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
的完美匹配。