About this plugin
The Kadence theme uses its own internal capability check to decide
whether to display its own Customizer panels (Header, Footer, Colors
). In
practice, that check is only satisfied by manage_options — the
standard edit_theme_options capability, which the Editor role
normally lacks, is not enough: an Editor with only
edit_theme_options still sees just the native WordPress panels
(Site Identity, Menus, Widgets, Additional CSS), not Kadence’s own
panels.
This plugin solves that by granting manage_options to Editor users,
but in a tightly scoped way:
- Only when the active theme is actually Kadence (or a Kadence
child theme). The plugin can stay installed and active on any
WordPress site — it does nothing on sites using a different theme.
There is no need to deactivate it when switching themes, or to
install a different variant for other themes.
- Only at runtime. The capability is never written to the role
or to any database option — it is returned by the user_has_cap
filter only for the duration of the current HTTP request.
- Only during verified Customizer requests, with a nonce check
on every possible path: native Customizer preview, AJAX save
requests, and REST requests to /wp/v2/settings or
/wp/v2/themes. The mere presence of a URL parameter is never
enough on its own — this prevents an Editor from obtaining
manage_options on other wp-admin pages simply by tampering with
the query string.
Outside of those conditions, the Editor has manage_options nowhere
else: they remain without access to Plugins, Users, or any other page
that depends on that capability.
Nothing is written to the database
- There is no add_cap() call on the WP_Role object, in any
activation, deactivation, or admin_init hook.
- There is no register_setting, update_option, or
update_user_meta anywhere in the plugin.
- Deactivating the plugin immediately restores native WordPress
behavior for all Editors; uninstalling leaves no residue in the
database.
Extensibility
By default, the elevation applies to all Editors (within the
conditions above). To restrict it to specific users, use the
etak_grant_theme_access filter in a must-use plugin or in the
php — without modifying this plugin:
add_filter( 'etak_grant_theme_access', function ( $grant, $user ) { return in_array( $user->ID, array( 5, 12 ), true ); }, 10, 2 );
You can also adjust the AJAX actions and REST routes recognized as
Customizer/Kadence context through the etak_customizer_ajax_actions
and etak_customizer_rest_routes filters — useful if your site has
additional Kadence-related integrations using different actions or
routes than the defaults.
If your Kadence installation (or a variant of it) uses a different
theme slug, adjust it with etak_kadence_theme_slugs:
add_filter( 'etak_kadence_theme_slugs', function ( $slugs ) { return array_merge( $slugs, array( 'my-kadence-slug' ) ); } );