permettre aux éditeurs de modifier les menus?

46

J'aimerais pouvoir donner à mes rédacteurs le pouvoir de modifier le menu, est-ce possible?

L'onglet Apparence ne semble pas être une option, puis-je le faire?

Fuzz doux
la source

Réponses:

53

ajoutez ceci à votre thème functions.php:

// add editor the privilege to edit theme

// get the the role object
$role_object = get_role( 'editor' );

// add $cap capability to this role object
$role_object->add_cap( 'edit_theme_options' );
Jan Fabry
la source
1
get_role est-il une classe?
Doux Fuzz
4
@Mild Fuzz - pas lui-même non, mais retourne une instance deWP_Role
TheDeadMedic
8
Vous ne devriez probablement pas faire cela à chaque requête, car cela provoquerait une écriture de la base de données pour autant que je sache. Mieux vaut admin_initet seulementif !$role_object->has_cap('edit_theme_options')
jsphpl
Ce paramètre est enregistré dans la base de données (dans la table wp_options, champ wp_user_roles), il peut donc être préférable de l'exécuter lors de l'activation du thème / du plug-in. Voir codex.wordpress.org/Function_Reference/add_cap
Pim Schaaf
Ou vous pouvez l’ajouter à functions.php, exécutez-le une fois, puis supprimez-le
d79
18

EDIT: mise à jour pour WP 4.9 et masquage des éléments de menu pour Editor

Si vous souhaitez que vos utilisateurs puissent modifier le menu de navigation mais pas les autres options de l’apparence: utilisez cette commande.

// Do this only once. Can go anywhere inside your functions.php file
$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );

Vous pouvez commenter tout le code après avoir actualisé votre panneau d'administration, car le code ci-dessus apportera des modifications persistantes à la base de données.

Vous avez maintenant toutes les options sous apparence visibles pour les éditeurs. Vous pouvez masquer les autres options comme ceci:

function hide_menu() {

    if (current_user_can('editor')) {

        remove_submenu_page( 'themes.php', 'themes.php' ); // hide the theme selection submenu
        remove_submenu_page( 'themes.php', 'widgets.php' ); // hide the widgets submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php' ); // hide the customizer submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php&autofocus%5Bcontrol%5D=background_image' ); // hide the background submenu


        // these are theme-specific. Can have other names or simply not exist in your current theme.
        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');

Les 3 dernières lignes de la hide_menu()fonction sont spécifiques à mon thème. Vous pouvez trouver le deuxième paramètre en cliquant sur le sous-menu que vous souhaitez masquer, dans le panneau d'administration. Votre URL sera alors quelque chose comme: example.com/wp-admin/themes.php?page= yiw_panel

Ainsi, dans cet exemple, le deuxième paramètre de la remove_submenu_page()fonction serayiw_panel

Jules
la source
1
cela cache aussi des thèmes pour les administrateurs.
JorgeLuisBorges
12

Dans WordPress 3.8, ce serait un meilleur code que la réponse acceptée actuellement.

/**
 * @var $roleObject WP_Role
 */
$roleObject = get_role( 'editor' );
if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
    $roleObject->add_cap( 'edit_theme_options' );
}
BenFreke
la source
3

Quand je regarde la structure du menu admin, il semble que le nav-menus.phplien est lié à la capacitéedit_theme_options . Pouvez-vous modifier le rôle d'éditeur pour inclure cette fonctionnalité? Cela leur donnerait également la possibilité d’éditer des widgets , je ne sais pas s’il s’agit d’un problème? Toutes les options de menu Ajax sont limitées par cette fonctionnalité, il est donc probable que le simple fait de modifier la fonctionnalité du menu d'administration pour l'édition des menus ne fonctionnera pas.

Jan Fabry
la source
3

instal plugin "User Role Editor" - Activez edit_theme_options - installez le plugin Adminimize - désactivez les "Widgets" et "Changer de thème" pour les éditeurs;)


la source
0

J'ai trouvé que votre menu fonctionnerait de cette façon: instal plugin " User Role Editor " et là vous pouvez éditer la condition pour le rôle d'éditeur et autre aussi. Activez edit_theme_options. Mais maintenant: vous verrez l'option "menu" sous "thèmes", "widgets". Pour moi: Après avoir cliqué sur "menu" (en tant qu'éditeur), je ne voyais pas les options remplies mais vide. Donc, je désactivais le plug-in "Editeur de rôle utilisateur" et les options remplies pour "menu" apparaissent correctement. Notez que la désactivation du plug-in "User Role Editor" reste une condition active pour l'éditeur! Bien pour moi, peut-être que ça vous aidera aussi


la source