2014-08-31 64 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的完美匹配。

相關問題