Я думал, что с помощью 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
между групповыми символами.