JJCM Editor Theme Access for Kadence

JJCM Editor Theme Access for Kadence

0/5 (0 ratings) — active installs Updated Oct 8, 2026

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