JJCM Editor Theme Access for Kadence
The Kadence theme uses its own internal capability check to decide whether to display its own Customizer panels (Header, Footer, Colors & Fonts, General, Posts/Pages Layout, Homepage Settings, etc.). In practice, that check is only satisfied by manage_options — the standard edit_theme_options capabi
About this tool.
The Kadence theme uses its own internal capability check to decide whether to display its own Customizer panels (Header, Footer, Colors & Fonts, General, Posts/Pages Layout, Homepage Settings, etc.). 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:
- 01Only 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.
- 02Only 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.
- 03Only 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 theme’s functions.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 );