it-swarm.com.de

WP_User_Query mit kombinierter Meta-Abfrage - funktioniert das nicht?

Ich versuche, mit der Klasse WP_User_Query alle Benutzer aufzulisten, die auf ihren spezifischen Feldern meta basieren.

Wenn ich eine einfache Einzel-Meta-Abfrage verwende, funktioniert das einwandfrei:

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

wenn ich jedoch versuche, eine kombinierte Abfrage mit zwei Feldern durchzuführen und Benutzer zu finden, die das second_meta-Metafeld ausgefüllt haben, listet die Abfrage alle Mitwirkenden auf (die Meta-Abfrage funktioniert überhaupt nicht):

 $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' => '!='
            )
        )
    ) );

Wie kann ich diese kombinierte Meta-Abfrage zum Laufen bringen?

Natürlich versuche ich alle Benutzer zu finden, die Mitwirkende sind, first_meta == 2 haben UND second_meta nicht leer ist

2
Gacek

Es sieht so aus, als ob Sie falsche Parameter verwenden. Versuchen Sie dies stattdessen (ungetestet):

$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' => '!='
            )
        )
    ) 
);

hier haben wir die Parameter key, value und compare im Array meta_query verwendet. Ich habe auch den Teil 'fields' => 'all' entfernt, da er standardmäßig eingestellt ist.

3
birgire