2014-08-31 65 views
2

我正在为wordpress开发一个插件,我想要获取具有role1或role2或role3或role4的用户列表。我使用下面的代码来获取角色1的用户,但我不知道如何更改它以获得多于1个角色的用户。在wordpress插件中获得特殊角色的用户

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

回答

2

我认为使用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,并寻找两者,我们会使用这个调用,用inexistant作用,但与一个字符串都包含(无通配符):get_users(array('role' => 'job');。这使得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的完美匹配。

相关问题