permiteți editorilor să editeze meniurile?
Aș dori să pot acorda editorilor mei dreptul de a modifica meniul, este posibil acest lucru?
Fila "Aspect" nu pare să fie deloc o opțiune, pot face acest lucru posibil?

adaugă acest cod în functions.php
al temei tale:
// adaugă editorului privilegiul de a edita tema
// obține obiectul rolului
$role_object = get_role( 'editor' );
// adaugă capabilitatea $cap acestui obiect rol
$role_object->add_cap( 'edit_theme_options' );
Actualizare (sugerată în comentarii):
Probabil că nu ar trebui să faci asta la fiecare solicitare, din câte știu, aceasta cauzează o scriere în baza de date. Mai bine pe
admin_init
și doar dacă!$role_object->has_cap('edit_theme_options')

Probabil nu ar trebui să faci asta la fiecare request, deoarece după cum am înțeles, acest lucru provoacă o scriere în baza de date. Mai bine pe admin_init
și doar if !$role_object->has_cap('edit_theme_options')

Această setare este salvată în baza de date (în tabelul wp_options, câmpul wp_user_roles), deci ar fi mai bine să rulezi acest cod la activarea temei/pluginului. Vezi https://codex.wordpress.org/Function_Reference/add_cap

EDIT: actualizare pentru WP 4.9 & ascunde doar elementele de meniu pentru Editor
Dacă doriți ca utilizatorii să poată modifica meniul de navigare, dar nu și celelalte opțiuni din subsecțiunea "Aspect": folosiți acest cod
// Executați acest cod o singură dată. Poate fi plasat oriunde în fișierul functions.php
$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );
Puteți comenta întregul cod după ce ați reîmprospătat panoul de administrare, deoarece codul de mai sus va face modificări persistente în baza de date.
Acum toate opțiunile din subsecțiunea "Aspect" sunt vizibile editorilor. Puteți ascunde celelalte opțiuni astfel:
function hide_menu() {
if (current_user_can('editor')) {
remove_submenu_page( 'themes.php', 'themes.php' ); // ascunde submeniul de selecție teme
remove_submenu_page( 'themes.php', 'widgets.php' ); // ascunde submeniul de widget-uri
remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php' ); // ascunde submeniul de personalizare
remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php&autofocus%5Bcontrol%5D=background_image' ); // ascunde submeniul de fundal
// acestea sunt specifice temei. Pot avea alte nume sau pur și simplu să nu existe în tema curentă.
remove_submenu_page( 'themes.php', 'yiw_panel' );
remove_submenu_page( 'themes.php', 'custom-header' );
remove_submenu_page( 'themes.php', 'custom-background' );
}
}
add_action('admin_head', 'hide_menu');
Ultimele 3 linii din funcția hide_menu()
sunt specifice temei mele. Puteți găsi al doilea parametru făcând click pe submeniul pe care doriți să-l ascundeți, în panoul de administrare. URL-ul va arăta astfel: exemplu.com/wp-admin/themes.php?page=yiw_panel
Deci, în acest exemplu, al doilea parametru pentru funcția remove_submenu_page()
va fi yiw_panel

Când analizez structura meniului de administrare, se pare că link-ul nav-menus.php
este legat de capabilitatea edit_theme_options
. Poți modifica rolul editorului pentru a include această capabilitate? Acest lucru le va oferi, de asemenea, opțiunea de a edita widget-uri, nu știu dacă aceasta este o problemă? Toate funcțiile Ajax pentru meniu sunt restrânse de această capabilitate, așa că doar schimbarea capabilității meniului de administrare pentru editarea meniurilor probabil că nu va funcționa.

Este 2020, WordPress a trecut de versiunea 5.3, așa că m-am gândit să contribui cu o versiune actualizată în care setarea este salvată doar o singură dată în baza de date - la activarea temei și eliminată când tema este dezactivată.
function add_theme_caps(){
global $pagenow;
// obține rolul de editor
$role = get_role('editor');
if ('themes.php' == $pagenow && isset($_GET['activated'])) {
// Testează dacă tema este activată
// Tema este activată
// Acest lucru funcționează doar pentru că accesează instanța clasei.
// va permite editorului să editeze opțiunile temei
$role->add_cap('edit_theme_options');
} else {
// Tema este dezactivată
// Elimină capabilitatea când tema este dezactivată
$role->remove_cap('edit_theme_options');
}
}
add_action( 'load-themes.php', 'add_theme_caps' );
De asemenea, prefer să codez în stil OOP, așa că iată o versiune OOP:
/**
* Clasa YourClient
*
* @author John Doe
* @package YourClient
* @since 1.0
*/
if (!defined('ABSPATH')) {
exit;
}
if (!class_exists('YourClient')) {
/**
* Clasa principală YourClient
*/
class YourClient
{
/**
* Configurarea clasei
*/
public function __construct()
{
// Acordă mai multe privilegii la Activarea Temei
add_action('load-themes.php', array($this, 'add_theme_caps'));
}
function add_theme_caps()
{
global $pagenow;
// obține rolul de editor
$role = get_role('editor');
if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Testează dacă tema este activată
// Tema este activată
// Acest lucru funcționează doar pentru că accesează instanța clasei.
// va permite editorului să editeze postările altora doar pentru tema curentă
$role->add_cap('edit_theme_options');
} else {
// Tema este dezactivată
// Elimină capabilitatea când tema este dezactivată
$role->remove_cap('edit_theme_options');
}
}
}
}

Am descoperit că meniul tău va funcționa astfel: instalează plugin-ul "User Role Editor" și acolo poți edita condițiile pentru rolul de editor și altele. Activează opțiunea edit_theme_options. Dar acum: vei vedea opțiunea "meniu" sub "temă", "widget-uri".
În cazul meu: După ce am dat clic pe "meniu" (ca editor) nu am văzut opțiunile completate, ci erau goale. Așa că am dezactivat plugin-ul "User Role Editor" și opțiunile pentru "meniu" au apărut corect. Reține că dezactivarea plugin-ului "User Role Editor" păstrează condițiile pentru editor active! A funcționat pentru mine, poate te va ajuta și pe tine.
