Add an edit_global_styles
user capability to limit access to Global StylesΒ #56299
Description
What problem does this address?
By default, the Site Editor is restricted to Administrators. You can enable Site Editor access by granting any user role, or a new role, the capability of edit_theme_options
. Here is an example:
function create_custom_site_editor_role() {
$capabilities = array(
'read' => true,
'edit_theme_options' => true, // Allows access to the Site Editor and appearance settings
);
add_role( 'site_editor', 'Site Editor', $capabilities );
}
add_action( 'init', 'create_custom_site_editor_role' );
This example user role is extremely restrictive, but as soon as the user accesses the Site Editor they have a lot of power to modify they site. Certain things won't work, like adding/modifying patterns, adding templates, adding pages, etc. It takes a bit of trial and error to figure out what does.
This role does, however, have near complete control over Global Styles, which might not be ideal in specific scenarios.
Consider the situation where I have built a site for a client. The client wants some of their users to have limited access to the Site Editor so they can modify templates, pages, and patterns, but the users should not have access to modify the styling of the site. A designer configured the styling to match the client's brand guidelines.
I want to be able to create a new user role for the client that provides access to the Site Editor but restricts access to Global Styles, perhaps with a capability called edit_global_styles
.
What is your proposed solution?
Create a new user capability called edit_global_styles
(or something similar), which would allow the creation of a user role like the following.
function create_custom_site_editor_role() {
$capabilities = array(
'read' => true,
'edit_theme_options' => true, // Allows access to the Site Editor and appearance settings
'edit_global_styles' => false // Restrict access to Global Styles
);
add_role( 'site_editor', 'Site Editor', $capabilities );
}
add_action( 'init', 'create_custom_site_editor_role' );
This capability would have the following effect.
Site Editor sidebar
Before | After |
---|---|
Global Styles panel
Before | After |
---|---|
Push to Global Styles panel
Before | After |
---|---|
Activity