permiteți editorilor să editeze meniurile?

17 nov. 2010, 14:42:00
Vizualizări: 87.8K
Voturi: 56

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?

0
Toate răspunsurile la întrebare 7
5
75

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

24 feb. 2011 15:11:45
Comentarii

este get_role o clasă?

Mild Fuzz Mild Fuzz
24 feb. 2011 15:31:06

@Mild Fuzz - nu în sine, dar returnează o instanță a WP_Role

TheDeadMedic TheDeadMedic
14 aug. 2011 15:25:21

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

jsphpl jsphpl
14 feb. 2017 11:14:12

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

Pim Schaaf Pim Schaaf
12 mar. 2018 18:46:25

Sau poți să o adaugi în functions.php, să o rulezi o dată și apoi să o elimini

d79 d79
17 ian. 2019 01:10:39
1
25

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

16 apr. 2013 17:51:02
Comentarii

acest lucru ascunde temele etc. și pentru administratori.

JorgeLuisBorges JorgeLuisBorges
15 sept. 2017 15:05:50
0
13

În WordPress 3.8, acest cod ar fi mai bun decât răspunsul acceptat în prezent.

/**
 * @var $roleObject WP_Role
 */
$roleObject = get_role( 'editor' );
if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
    $roleObject->add_cap( 'edit_theme_options' );
}
9 ian. 2014 09:39:30
0

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.

17 nov. 2010 15:26:34
0

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

30 mar. 2020 18:04:52
0

instalează pluginul "User Role Editor" - Activează edit_theme_options - instalează pluginul Adminimize - dezactivează "Widgets" și "Schimbă Tema" pentru Editori ;)

14 apr. 2011 10:51:21
0

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.

5 ian. 2011 14:54:33