permettere agli editor di modificare i menu?

17 nov 2010, 14:42:00
Visualizzazioni: 87.8K
Voti: 56

Vorrei poter concedere ai miei editor la possibilità di modificare il menu, è possibile farlo?

La scheda Aspetto non sembra essere un'opzione disponibile, posso renderla accessibile?

0
Tutte le risposte alla domanda 7
5
75

aggiungi questo al file functions.php del tuo tema:

// aggiunge all'editor il privilegio di modificare il tema

// ottiene l'oggetto del ruolo
$role_object = get_role( 'editor' );

// aggiunge la capability $cap a questo oggetto ruolo
$role_object->add_cap( 'edit_theme_options' );

Aggiornamento (suggerito nei commenti):

Probabilmente non dovresti eseguirlo ad ogni richiesta, AFAIK questo causa una scrittura sul database. Meglio su admin_init e solo se !$role_object->has_cap('edit_theme_options')

24 feb 2011 15:11:45
Commenti

get_role è una classe?

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

@Mild Fuzz - no di per sé no, ma restituisce un'istanza di WP_Role

TheDeadMedic TheDeadMedic
14 ago 2011 15:25:21

Probabilmente non dovresti farlo ad ogni richiesta, poiché questo causa una scrittura sul database per quanto ho capito. Meglio su admin_init e solo if !$role_object->has_cap('edit_theme_options')

jsphpl jsphpl
14 feb 2017 11:14:12

Questa impostazione viene salvata nel database (nella tabella wp_options, campo wp_user_roles), quindi potrebbe essere meglio eseguirla durante l'attivazione del tema/plugin. Vedi https://codex.wordpress.org/Function_Reference/add_cap

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

Oppure puoi aggiungerla a functions.php, eseguirla una volta e poi rimuoverla

d79 d79
17 gen 2019 01:10:39
1
25

EDIT: aggiornamento per WP 4.9 & nascondere solo le voci di menu per l'Editor

Se vuoi che i tuoi utenti possano modificare il menu di navigazione, ma non le altre opzioni sotto Aspetto: usa questo codice

// Esegui questo solo una volta. Può essere inserito ovunque nel tuo file functions.php
$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );

Puoi commentare l'intero codice dopo aver aggiornato il pannello di amministrazione, perché il codice sopra apporterà modifiche persistenti al database.

Ora tutte le opzioni sotto Aspetto saranno visibili agli editori. Puoi nascondere le altre opzioni in questo modo:

function hide_menu() {

    if (current_user_can('editor')) {

        remove_submenu_page( 'themes.php', 'themes.php' ); // nasconde il sottomenu di selezione del tema
        remove_submenu_page( 'themes.php', 'widgets.php' ); // nasconde il sottomenu dei widget
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php' ); // nasconde il sottomenu del personalizzatore
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php&autofocus%5Bcontrol%5D=background_image' ); // nasconde il sottomenu dello sfondo


        // queste sono specifiche del tema. Possono avere altri nomi o semplicemente non esistere nel tuo tema corrente.
        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');

Le ultime 3 righe nella funzione hide_menu() sono specifiche per il mio tema. Puoi trovare il secondo parametro cliccando sul sottomenu che vuoi nascondere, nel pannello di amministrazione. L'URL sarà qualcosa tipo: example.com/wp-admin/themes.php?page=yiw_panel

Quindi, in questo esempio, il secondo parametro per la funzione remove_submenu_page() sarà yiw_panel

16 apr 2013 17:51:02
Commenti

questo nasconde anche temi ecc. per gli amministratori.

JorgeLuisBorges JorgeLuisBorges
15 set 2017 15:05:50
0
13

In WordPress 3.8, questo sarebbe un codice migliore rispetto alla risposta attualmente accettata.

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

Quando osservo la struttura del menu di amministrazione, sembra che il link nav-menus.php sia collegato alla capability edit_theme_options. Puoi modificare il ruolo dell'editor per includere questa capability? Questo gli darebbe anche la possibilità di modificare i widget, non so se questo sia un problema? Tutta la parte Ajax dei menu è limitata da questa capability, quindi cambiare solo la capability del menu di amministrazione per modificare i menu probabilmente non funzionerà.

17 nov 2010 15:26:34
0

È il 2020, WordPress ha superato la versione 5.3, quindi ho pensato di contribuire con una versione aggiornata in cui l'impostazione viene salvata solo una volta nel database - all'attivazione del tema, e rimossa quando il tema viene disattivato.

function add_theme_caps(){
  global $pagenow;
  // ottiene il ruolo dell'editor
  $role = get_role('editor');

  if ('themes.php' == $pagenow && isset($_GET['activated'])) { 
          // Verifica se il tema è attivato
          // Tema attivato
          // Funziona solo perché accede all'istanza della classe
          // consente all'editor di modificare le opzioni del tema
          $role->add_cap('edit_theme_options');
  } else {
         // Tema disattivato
         // Rimuove la capacità quando il tema è disattivato
         $role->remove_cap('edit_theme_options');
  }
}
add_action( 'load-themes.php', 'add_theme_caps' );

Preferisco inoltre programmare in stile OOP, quindi questa è una versione OOP:


/**
 * Classe YourClient
 *
 * @author   John Doe
 * @package  YourClient
 * @since    1.0
 */
if (!defined('ABSPATH')) {
    exit;
}
if (!class_exists('YourClient')) {
    /**
     * La classe principale YourClient
     */
    class YourClient
    {
        /**
         * Configura la classe
         */

        public function __construct()
        {
            // Concede più privilegi all'attivazione del Tema
            add_action('load-themes.php', array($this, 'add_theme_caps'));
        }

        function add_theme_caps()
        {
            global $pagenow;

            // ottiene il ruolo dell'editor
            $role = get_role('editor');

            if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Verifica se il tema è attivato
                // Tema attivato

                // Funziona solo perché accede all'istanza della classe
                // consente all'editor di modificare le opzioni del tema solo per il tema corrente
                $role->add_cap('edit_theme_options');
            } else {
                // Tema disattivato
                // Rimuove la capacità quando il tema è disattivato
                $role->remove_cap('edit_theme_options');
            }
        }
    }
}

30 mar 2020 18:04:52
0

installa il plugin "User Role Editor" - Attiva edit_theme_options ON - installa il plugin Adminimize - disattiva "Widgets" e "Switch Theme" per gli Editor ;)

14 apr 2011 10:51:21
0

Ho scoperto che il tuo menu funzionerà in questo modo: installa il plugin "User Role Editor" e lì puoi modificare le condizioni per il ruolo di editor e altri. Attiva l'opzione edit_theme_options. Ma ora: vedrai l'opzione "menu" sotto "temi", "widgets".

Nel mio caso: dopo aver cliccato su "menu" (come editor) non vedevo le opzioni riempite ma vuote. Quindi ho disattivato il plugin "User Role Editor" e le opzioni per "menu" sono apparse correttamente. Nota che disattivando il plugin "User Role Editor" le condizioni per l'editor rimangono attive! Per me è stato utile, forse può aiutare anche te.

5 gen 2011 14:54:33