WP自定义站点角色充其量看起来有点“古怪”,但这个特定的解决方案对我很有效(为它创建了一个自定义插件)。
$result = add_role(
\'org_site_owner\',
__( \'Site Owner\' ),
array(
\'activate_plugins\' => false,
\'create_users\' => true,
\'customize\' => true,
\'delete_others_pages\' => true,
\'delete_others_posts\' => true,
\'delete_pages\' => true,
\'delete_plugins\' => false,
\'delete_posts\' => true,
\'delete_private_pages\' => true,
\'delete_private_posts\' => true,
\'delete_published_pages\' => true,
\'delete_published_posts\' => true,
\'delete_site\' => false,
\'delete_themes\' => false,
\'delete_users\' => true,
\'edit_dashboard\' => false,
\'edit_files\' => true,
\'edit_others_pages\' => true,
\'edit_others_posts\' => true,
\'edit_pages\' => true,
\'edit_plugins\' => false,
\'edit_posts\' => true,
\'edit_private_pages\' => true,
\'edit_private_posts\' => true,
\'edit_published_pages\' => true,
\'edit_published_posts\' => true,
\'edit_theme_options\' => true,
\'edit_themes\' => false,
\'edit_users\' => true,
\'export\' => false,
\'import\' => false,
\'install_plugins\' => false,
\'install_themes\' => false,
\'list_users\' => true,
\'manage_categories\' => true,
\'manage_links\' => true,
\'manage_options\' => true,
\'moderate_comments\' => true,
\'promote_users\' => false,
\'publish_pages\' => true,
\'publish_posts\' => true,
\'read\' => true,
\'read_private_pages\' => true,
\'read_private_posts\' => true,
\'remove_users\' => true,
\'switch_themes\' => false,
\'unfiltered_html\' => false,
\'update_core\' => false,
\'update_plugins\' => false,
\'update_themes\' => false,
\'upload_files\' => true,
\'upload_plugins\' => false,
\'upload_themes\' => false,
)
);
// Allow site owners to see Appearance and Settings menus
$role_object = get_role( \'org_site_owner\' );
$role_object->add_cap( \'edit_theme_options\' );
$role_object->add_cap( \'manage_options\' );
function hide_appearance_options() {
// Hide theme selection page
remove_submenu_page( \'themes.php\', \'themes.php\' );
// Hide media settings page
remove_submenu_page( \'options-general.php\', \'options-media.php\' );
// Hide permalinks
remove_submenu_page( \'options-general.php\', \'options-permalink.php\' );
// Hide featured image column
remove_submenu_page( \'options-general.php\', \'featured-image-column\' );
//Hide SSO/SAML configuration settings
remove_submenu_page( \'options-general.php\', \'onelogin_saml_configuration\' );
}
function org_site_owner_menu_pages()
{
$user_role = wp_get_current_user();
$allowed_roles = array(\'org_site_owner\');
if( array_intersect($allowed_roles, $user_role->roles ) )
{
remove_menu_page(\'plugins.php\'); // Plugins
remove_menu_page(\'tools.php\'); // Tools
remove_menu_page(\'edit.php?post_type=acf\'); // ACF Fields
remove_menu_page(\'admin.php?page=searchandfilter-settings\'); // Search and filter plugin
add_action(\'admin_head\', \'hide_appearance_options\');
}
}
add_action( \'admin_init\' , \'org_site_owner_menu_pages\' );