WP_USER_QUERY NOT WORKING中的META_QUERY-返回每个用户,而不仅仅是键和值匹配的用户

时间:2020-03-01 作者:Mark Pedersen

我已经讨论这个问题好几个小时了,请在我发疯之前救救我。。。。。

我正在尝试使用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
它包含一些奇怪的用户元数据,似乎是由用户注册插件添加的。

我停用了插件,现在元查询工作了。。。。嗯

2 个回复
SO网友:Mark Pedersen

我在另一个简单的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);

相关推荐