web-dev-qa-db-ja.com

WP_User_Queryと複合メタクエリ - 機能していませんか?

特定のmetaフィールドに基づいてすべてのユーザーを一覧表示するためにWP_User_Queryクラスを使用しようとしています。

単純なシングルメタクエリーを使用すると、うまくいきます。

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

しかし、2つのフィールドを組み合わせたクエリを作成してsecond_metaメタフィールドを埋めたユーザーを検索しようとすると、クエリにすべての貢献者が一覧表示されます(メタクエリはまったく機能しません)。

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

この複合メタクエリを機能させるにはどうすればよいですか?

もちろん、私は貢献者であるすべてのユーザーを見つけようとしています。first_meta == 2 AND second_metaは空ではありません

2
Gacek

間違ったパラメータを使用しているようです。代わりにこれを試してください(未テスト)。

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

meta_query配列内のkeyvalue、およびcompareパラメーターを使用しました。 'fields' => 'all'部分も削除しました。デフォルトで設定されているからです。

3
birgire