JJCM Editor Theme Access for Kadence

JJCM Editor Theme Access for Kadence

Details
View on WordPress

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:

  1. 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.
  2. 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.
  3. 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
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 );

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' ) );
} );

Details

Plugin code:
jjcm-editor-theme-access-for-kadence
Plugin version:
2.1.2
Outdated:
No
WP version:
5.8 or higher
PHP version:
7.4 or higher
Test up to WP version:
7.1.3
Total installations:
0
Last updated:
2026-10-08
Rating:
Times rated:
0
capabilities
customizer
editor
kadence
theme-options