按登录、元和角色查询用户

时间:2014-02-19 作者:Steven Jones

我正在使用pre\\u user\\u查询来限制显示在用户上的结果。php页面。

我通过角色和;还有一个元字段,所以我的查询from 像这样:

$query->query_from = "
     FROM wp_users 
     INNER JOIN wp_usermeta ON (wp_users.ID = wp_usermeta.user_id) 
     INNER JOIN wp_usermeta AS mt1 ON (wp_users.ID = mt1.user_id) ";
还有我的where 如下所示:

$query->query_where = " WHERE 1=1 
AND ( (wp_usermeta.meta_key = \'user-country\' 
           AND CAST(wp_usermeta.meta_value AS CHAR) IN ($countries_list))
AND (mt1.meta_key = \'wp_capabilities\' AND CAST(mt1.meta_value AS CHAR) 
    LIKE \'%\\"$role\\"%\') ) ";
这是工作很好,但我想能够通过登录或电子邮件搜索太。我试着修改我的where 查询到:

$query->query_where = "WHERE 1=1 
AND (user_login LIKE \'tom\' OR user_email LIKE \'tom\') 
AND ( (wp_usermeta.meta_key = \'user-country\' 
     AND CAST(wp_usermeta.meta_value AS CHAR) IN ($countries_list))
AND (mt1.meta_key = \'wp_capabilities\' 
     AND CAST(mt1.meta_value AS CHAR) LIKE \'%\\"$role\\"%\') ) ";
然而,这是行不通的。我想这与wp\\u users表没有前缀有关,但我不能百分之百确定。

编辑:只是澄清一下,代码没有错误,我只是没有得到正确的结果。

1 个回复
SO网友:Ярослав Рахматуллин

这不完全是你的错

负责生成用户列表的类不遵守pre_user_query 滤器这意味着任何依赖于已修改(在pre\\u user\\u query中)WP\\u user\\u query对象的自定义列排序或筛选都将无法工作。你可以在下面的补丁中看到我的意思。

管理员用户列表表忽略筛选器

@@ -100,6 +100,7 @@ class WP_Users_List_Table extends WP_List_Table {

        // Query the user IDs for this page
        $wp_user_search = new WP_User_Query( $args );
+       $wp_user_search = apply_filters( \'pre_user_query\', $wp_user_search );

        $this->items = $wp_user_search->get_results();
我认为这是一个bug或至少是一个疏忽,但我不能确定作者的意图是什么。也许值得向github上的WP人员提及这一点(我没有就此开罚单)。

WP\\u User\\u Query似乎是不可变的

此外,WP\\u User\\u Query->set()和WP\\u User\\u Query->prepare\\u Query()方法并没有达到我所期望的效果。这可能与您的情况有关,也可能与您的情况无关。如果遇到任何问题(即忽略设置),只需在过滤器中创建一个新对象并返回该对象即可。

function pre_user_query( $wp_user_query ) {
    if ( isset( $wp_user_query->query_vars[\'orderby\'] ) and 
            $wp_user_query->query_vars[\'orderby\']  === \'custom-column-slug\') {

        $order = strtoupper( $_GET[\'order\'] );
        if ( !in_array( $order , array(\'ASC\', \'DESC\') ))
            $order = \'DESC\';

        $wp_user_query = new WP_User_Query( array( 
            \'fields\' =>  \'all_with_meta\',
            \'orderby\' =>  \'meta_value\',
            \'order\' => $order ,
            \'meta_query\' => array(
                0 => array(
                    \'key\' => \'custom-column-slug\',
                    \'compare\' => \'NOT EXISTS\',
                ),
                \'relation\' => \'OR\',
                1 => array(
                    \'key\' => \'custom-column-slug\',
                    \'compare\' => \'IN\',
                    \'value\' => [\'zumba\', \'swing\', \'jazz\'],
                ),
            ),
        ));
    }
    return $wp_user_query;
}

结束

相关推荐