何らかの理由で、メタフィルタを使ったユーザークエリ中に、私は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]
に現れる配列番号も出力することに注意してください。
他に誰も二度現れることはありません。
事前に感謝します - 任意の入力を高く評価してください。
キックのためにこれを試してください...
注: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";
}
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チケット のおかげで追跡されました。
それがうまくいくかどうか確認してください...