web-dev-qa-db-fra.com

WP_User_Query avec méta requête combinée - ne fonctionne pas?

J'essaie d'utiliser la classe WP_User_Query pour répertorier tous les utilisateurs en fonction de leurs champs meta spécifiques.

Lorsque j'utilise une simple requête simple méta, cela fonctionne bien:

$q = new WP_User_Query( array(
        'role' => 'contributor',
        'fields' => 'all_with_meta',
        'meta_key'  => 'first_meta',
        'meta_value' => '2'
    ) );

mais lorsque j'essaie de combiner une requête à deux champs et de trouver des utilisateurs qui ont rempli le champ méta second_meta, la requête répertorie tous les contributeurs (la méta-requête ne fonctionne pas du tout):

 $q = new WP_User_Query( array(
        'role' => 'contributor',
        'fields' => 'all',
        'meta_query' => array(
            'relation' => 'AND',
            0 => array( 
                'meta_key'  => 'first_meta',
                'meta_value' => '2'),
            1 => array(
                'meta_key' => 'second_meta',
                'meta_value' => '',
                'meta_compare' => '!='
            )
        )
    ) );

Comment puis-je faire fonctionner cette méta-requête combinée?

Bien sûr, j'essaie de trouver tous les utilisateurs qui sont des contributeurs, ont first_meta == 2 ET second_meta n'est pas vide

2
Gacek

On dirait que vous utilisez des paramètres incorrects, essayez plutôt ceci (non testé):

$q = new WP_User_Query( 
    array(
        'role'          => 'contributor',
        'meta_query'    => array(
            'relation'  => 'AND',
            array( 
                'key'     => 'first_meta',
                'value'   => '2',
            ),
            array(
                'key'     => 'second_meta',
                'value'   => '',
                'compare' => '!='
            )
        )
    ) 
);

où nous avons utilisé les paramètres key, value et compare dans le tableau meta_query. J'ai également supprimé la partie 'fields' => 'all', car elle est définie par défaut.

3
birgire