在MU上运行的情况下,我正在编写一个开源/公开且免费可用的插件。就像我以前一样add_screen_option()
为了让用户能够轻松地根据自己的喜好设置管理页面,我留下了一堆用户元数据。现在,页面本身仅限于具有manage_options
功能,因此只有那些在调整per page
列表表的值。
为了让插件保持干净状态,以防有人选择删除插件,我添加了一个停用和一个卸载挂钩回调,该回调应该循环遍历用户数据并删除元条目。现在,我可以简单地遍历所有用户,检查他们的元值等等,但这在有大量用户的网站上几乎不会失败,并以超时结束(记住,元表是JOIN
ed)。
简而言之,我的想法是:MU安装有user
和ausermeta
桌子据我所见,并没有真正保存功能,但角色名称-WordPress在这里对角色和功能没有区别。虽然很有趣,但似乎我必须考虑不同的事情:
User can be…
- superadmin在多个站点上注册,在多个具有不同角色的站点上注册,在具有相同角色的多个站点上注册,但角色在不同站点上具有不同的功能
问题从这些不同的可能性开始,当您查看存储在网络/MU设置中的功能时,问题会更进一步:
{$wpdb->prefix}capabilities
或
{$wpdb->prefix}{get_current_blog_id()}_capabilities
那么,一个查询是为了什么?
$query_args = array(
);
$query = new WP_User_Query( $query_args );
$users = $query->results;
if ( empty( $users ) )
return;
var_dump( $users );
编辑仅是第一次尝试查询具有特定功能的角色名称:
$roles = new WP_Roles();
$roles = wp_list_pluck( $roles->role_objects, \'capabilities\' );
$results = array();
foreach ( $roles as $role => $caps )
{
array_key_exists( \'manage_options\', $caps )
AND $results[] = $role;
}
var_dump( $results );
# Even if it\'s smarter then above loop, it won\'t work and
# throw an error in core files.
$roles = array_filter( wp_list_pluck( $roles, \'manage_options\' ) );