这些功能作为用户元数据存储在每个站点的序列化阵列中。
作为正则表达式的键如下所示:
\'~\' . $GLOBALS[\'wpdb\']->base_prefix . \'(\\d+)_capabilities~\'
因此……获取用户元数据,找到功能字符串(它们包含角色),并将未序列化的结果与您想要找到的角色进行比较。
然后获取博客ID(\\d+)
在上面的正则表达式中,您就完成了。
我认为使用一些代码更容易理解:
if ( ! function_exists( \'get_user_blogs_by_role\' ) )
{
/**
* Get all blog IDs where the user has the given role.
*
* @param int $user_id
* @param string $role
* @return array
*/
function get_user_blogs_by_role( $user_id, $role )
{
$out = array ();
$regex = \'~\' . $GLOBALS[\'wpdb\']->base_prefix . \'(\\d+)_capabilities~\';
$meta = get_user_meta( $user_id );
if ( ! $meta )
return array ();
foreach ( $meta as $key => $value )
{
if ( preg_match( $regex, $key, $matches ) )
{
$roles = maybe_unserialize( $meta[$key][0] );
// the number is a string
if ( isset ( $roles[$role] ) and 1 === (int) $roles[$role] )
$out[] = $matches[1];
}
}
return $out;
}
}
用法:
$blogs = get_user_blogs_by_role( 37, \'editor\' );
var_dump( $blogs ); // Array ( 2, 14, 90 )