web-dev-qa-db-ja.com

ユーザーがWP_User_Queryに2回現れる

何らかの理由で、メタフィルタを使ったユーザークエリ中に、私はprint_rを実行したときに結果がリストに2回現れるユーザーがいます...

データベースが重複しているように見えますが、ユーザーには単一の値しかありません。メタクエリがなければ、ユーザは一度だけ現れる。

コード:

$user_query = new WP_User_Query( 
    array(
        'role'       => 'member',
        'orderby'    => 'registered',
        'order'      => 'DESC',
        'meta_query' => array(
             array(
                 'key'   => 'onTrial',
                 'value' => '1',
             ),
        ),
    )
);
echo '<pre>';
print_r($user_query->results);
echo '</pre>';

出力(他の多くのものと共に):

[54] => WP_User Object
    (
        [data] => stdClass Object
            (
                [ID] => 10410
                [user_login] => [email protected]
                [user_pass] => $P$XXXXXXX
                [user_nicename] => XXXXXXX-XXXXXXX
                [user_email] => [email protected]
                [user_url] => 
                [user_registered] => 2016-02-15 10:52:57
                [user_activation_key] => 
                [user_status] => 0
                [display_name] => XXXXXXX XXXXXXX
            )

        [ID] => 10410
        [caps] => Array
            (
                [member] => 1
            )

        [cap_key] => wp_capabilities
        [roles] => Array
            (
                [0] => member
            )

        [allcaps] => Array
            (
                [read] => 
                [no_admin_bar] => 1
                [member] => 1
            )

        [filter] => 
    )

[55] => WP_User Object
    (
        [data] => stdClass Object
            (
                [ID] => 10410
                [user_login] => [email protected]
                [user_pass] => $P$XXXXXXX
                [user_nicename] => XXXXXXX-XXXXXXX
                [user_email] => [email protected]
                [user_url] => 
                [user_registered] => 2016-02-15 10:52:57
                [user_activation_key] => 
                [user_status] => 0
                [display_name] => XXXXXXX XXXXXXX
            )

        [ID] => 10410
        [caps] => Array
            (
                [member] => 1
            )

        [cap_key] => wp_capabilities
        [roles] => Array
            (
                [0] => member
            )

        [allcaps] => Array
            (
                [read] => 
                [no_admin_bar] => 1
                [member] => 1
            )

        [filter] => 
    )

ここでは詳細を明らかに示すことはできませんが、IDとreg timeが[54][55]に現れる配列番号も出力することに注意してください。

他に誰も二度現れることはありません。

事前に感謝します - 任意の入力を高く評価してください。

3
Bysander

キックのためにこれを試してください...

解決策1

注:WP_User_Query(?)では機能しません

add_filter('posts_distinct', 'user_meta_query_distinct');

//your query here...

remove_filter('posts_distinct', 'user_meta_query_distinct');

function user_meta_query_distinct() { 
    return "DISTINCT"; 
}

解決策2

Meta_queryに'relation' => 'OR'を追加してみてください。

$user_query = new WP_User_Query( 
    array(
        'role'       => 'member',
        'orderby'    => 'registered',
        'order'      => 'DESC',
        'meta_query' => array(
             'relation' => 'OR', //should result in a DISTINCT query
             array(
                 'key'   => 'onTrial',
                 'value' => '1',
             ),
        ),
    )
);

この差分を参照してください。

https://core.trac.wordpress.org/attachment/ticket/17582/17582.4.diff

if ( 'OR' == $meta_query->relation ) { 
    $this->query_fields = 'DISTINCT ' . $this->query_fields; 
}

この tracチケット のおかげで追跡されました。

それがうまくいくかどうか確認してください...

3
userabuser