2
我正在为wordpress开发一个插件,我想要获取具有role1或role2或role3或role4的用户列表。我使用下面的代码来获取角色1的用户,但我不知道如何更改它以获得多于1个角色的用户。在wordpress插件中获得特殊角色的用户
$jobholders = get_users('orderby=nicename&role=jobholder');
我正在为wordpress开发一个插件,我想要获取具有role1或role2或role3或role4的用户列表。我使用下面的代码来获取角色1的用户,但我不知道如何更改它以获得多于1个角色的用户。在wordpress插件中获得特殊角色的用户
$jobholders = get_users('orderby=nicename&role=jobholder');
我认为使用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
);
}
它认为,我们有两个角色,jobseeker
和jobholder
,并寻找两者,我们会使用这个调用,用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
的完美匹配。