我已经讨论这个问题好几个小时了,请在我发疯之前救救我。。。。。
我正在尝试使用Wordpress的WP\\u User\\u查询从db检索用户
我一直在给它灌输这样的论点,而且效果很好…:
function getSomeUsers ($year, $month, $day)
{
$arg = [
\'meta_key\' => \'some_meta_key\',
\'meta_value\' => \'some_meta_value\',
\'date_query\' => [
[
\'year\' => $year,
\'month\' => $month,
\'day\' => $day
]
]
];
$user_query = new WP_User_Query( $arg );
return $user_query;
}
但当我尝试使用meta\\u查询时,它会返回数据库中的所有用户,而不仅仅是与查询匹配的用户。。。。
function getSomeUsers ()
{
$arg = [
\'meta_query\' => [
[
\'key\' => \'some_meta_key\',
\'value\' => \'some_meta_value\',
\'compare\' => \'=\'
]
]
] ;
$user_query = new WP_User_Query( $arg );
return $user_query;
}
有人知道怎么了吗?
编辑:我在另一个简单的wordpress网站上尝试了元查询,它在那里工作,所以肯定有其他事情在进行,对查询进行干预。。
我一直在挖掘查询监视器插件。。。我想这可能是因为我也在处理pre\\u user\\u查询,但我可以看到我没有任何附加到该挂钩的操作。。。所以nvm。。。
但我可以看到正在调用查询。这就是它的外观,正如所怀疑的那样,元查询中的元键没有包括在内:
SELECT DISTINCT SQL_CALC_FOUND_ROWS wp_users.*
FROM wp_users
LEFT JOIN wp_usermeta
ON (wp_users.ID = wp_usermeta.user_id
AND wp_usermeta.meta_key = \'ur_user_status\' )
LEFT JOIN wp_usermeta AS mt1
ON ( wp_users.ID = mt1.user_id )
LEFT JOIN wp_usermeta AS mt2
ON ( wp_users.ID = mt2.user_id )
WHERE 1=1
AND ( ( ( wp_usermeta.user_id IS NULL
OR ( mt1.meta_key = \'ur_user_status\'
AND mt1.meta_value = \'1\' ) )
AND ( mt2.meta_key = \'wp_3_capabilities\' ) ) )
ORDER BY user_login AS
它包含一些奇怪的用户元数据,似乎是由用户注册插件添加的。
我停用了插件,现在元查询工作了。。。。嗯
SO网友:Siddhesh Shirodkar
以下是参考代码:
$args = array (
\'role\' => \'reporter\',
\'order\' => \'ASC\',
\'orderby\' => \'display_name\',
\'search\' => \'*\'.esc_attr( $search_term ).\'*\',
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'first_name\',
\'value\' => $search_term,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'last_name\',
\'value\' => $search_term,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'description\',
\'value\' => $search_term ,
\'compare\' => \'LIKE\'
)
)
);
// Create the WP_User_Query object
$wp_user_query = new WP_User_Query($args);