web-dev-qa-db-fra.com

Comment trouver des objets par les termes

Je me bats avec un filtrage de recherche. Tout d'abord, mon script recherche des utilisateurs à l'aide de la recherche naturelle SQL. La requête renvoie les identifiants des utilisateurs. Maintenant, je voudrais les filtrer par des termes qui sont assignés à chaque utilisateur. J'ai utilisé ceci:

 $terms_ids = array();
 $terms_ids = $_GET['user_sport'];
 $objects = get_objects_in_term($terms_ids, 'user_sport');
 $unique = array_unique($objects);
 print_r($unique);

Mais cette fonction get_objects_in_term renvoie tous les objets ayant au moins un terme. Ce que je veux réaliser, c'est l'inverse. Si un utilisateur a le terme football et n'a pas de basket, il ne doit pas s'afficher lorsque je filtre les utilisateurs de football et de basket. Seulement si j'utilise le football. Y a-t-il un moyen de résoudre ce problème? Une autre approche serait la deuxième requête SQL mais j’ai trouvé les termes et les relations de taxonomies un peu bizarres juste pour écrire une requête SQL.

3
El Danielo

En supposant que "les utilisateurs" que vous essayez d'extraire soient un type de publication personnalisé. Vous pouvez utiliser "tax_query" comme ci-dessous.

$user_args = array(
    'post_type'         => 'custom_user_post',  // Custom post type,
    'posts_per_page'    => 10,
    'paged'             => ( ! empty( get_query_var( 'paged' ) )? get_query_var('paged'): 1 ),
    'tax_query'         => array(
        'relation' => 'AND',
            array(
                'taxonomy'      => 'user_sports', //assuming your custom taxonomy is 'user_sport'
                'field'         =>  'slug',
                'terms'         =>  array( 'football' )
            ),
            array(
                'taxonomy'      => 'user_sports', //assuming your custom taxonomy is 'user_sport'
                'field'         =>  'slug',
                'terms'         =>  array( 'basketball' )
            )
    )
);

$users_list = new WP_Query( $user_args );
1
Bhaskar K C