【问题标题】:get users with special roles in wordpress plugin在 wordpress 插件中获取具有特殊角色的用户
【发布时间】:2014-08-31 17:36:36
【问题描述】:

我正在为 wordpress 开发一个插件,我想获取具有角色 1 或角色 2 或角色 3 或角色 4 的用户列表。我使用下面的代码来获取具有角色 1 的用户,但我不知道应该如何更改它以获取具有 1 个以上角色的用户。

$jobholders = get_users( 'orderby=nicename&role=jobholder' ); 

【问题讨论】:

    标签: php wordpress plugins


    【解决方案1】:

    我认为使用 MySQL wildcard 会起作用,因为 WP_User_Query 类中的查询是用 LIKE 构建的,但它不是:get_users(array('role' => 'job%'))

    解决方案必须使用动作挂钩pre_user_query

    /**
     * Filter the mysql query for get_users when searching for the role "job" to search for "%job%"
     */
    add_action( 'pre_user_query', 'so_25594548' );
    
    function so_25594548( $user_search ) 
    {
        $search_str = '%\"job\"%';
    
        # Quotes around $search_str so we don't need to escape the backslashes
        if( false === strpos( $user_search->query_where, "$search_str" ) )
            return;
    
        # Simplify the LIKE to do a loose search
        $user_search->query_where = str_replace( 
            "$search_str", 
            '%job%', 
            $user_search->query_where 
        );
    }
    

    它认为我们有两个角色,jobseekerjobholder,为了搜索这两个角色,我们将使用这个调用,一个不存在的角色,但一个字符串都包含(没有通配符):@ 987654329@。这使得query_where 变成这样:

    WHERE 1=1 AND ( (wp_usermeta.meta_key = 'wp_capabilities' AND CAST(wp_usermeta.meta_value AS CHAR) LIKE '%\"job\"%') )
    

    wp_capabilities 是一个序列化数组,因此它会在通配符之间寻找job 的完美匹配。

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 2020-09-07
      • 2016-06-18
      • 1970-01-01
      相关资源
      最近更新 更多