autoriser les éditeurs à modifier les menus?
7 réponses
- votes
-
- 2011-02-24
ajoutez ceci à
functions.php
de votrethème:// 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' );
add this to your theme's
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' );
-
get_roleest-il une classe?is get_role a class?
- 1
- 2011-02-24
- Mild Fuzz
-
@Mild Fuzz -pas lui-mêmenon,maisil renvoie uneinstance de `WP_Role`@Mild Fuzz - not itself no, but it returns an instance of `WP_Role`
- 4
- 2011-08-14
- TheDeadMedic
-
Vousne devriezprobablementpasfaire cela à chaque demande,car celaprovoque une écriture debase de donnéespour autant queje sache.Mieux sur `admin_init`et seulement`if! $ Role_object-> has_cap ('edit_theme_options') `You probably shouldn't do this on every request, as this causes a db write as far as i understood. Better on `admin_init` and only `if !$role_object->has_cap('edit_theme_options')`
- 9
- 2017-02-14
- jsphpl
-
Ceparamètreestenregistré dans labase de données (dans latable wp_options,champ wp_user_roles),il serait doncpréférable de l'exécuter lors de l'activation duthème/plugin.Voir https://codex.wordpress.org/Function_Reference/add_capThis setting is saved to the database (in table wp_options, field wp_user_roles), so it might be better to run this on theme/plugin activation. See https://codex.wordpress.org/Function_Reference/add_cap
- 0
- 2018-03-12
- Pim Schaaf
-
Ou vouspouvez l'ajouter àfunctions.php,l'exécuter unefois,puis le supprimerOr you could add it to functions.php, run it once and then remove it
- 0
- 2019-01-16
- d79
-
- 2013-04-16
EDIT:mise àjourpour WP 4.9 & amp;masquer uniquement les éléments demenupour l'éditeur
Si vous voulez que vos utilisateurspuissent changer lemenu denavigation,maispas les autres options sous l'apparence: utilisez ceci
// Do this only once. Can go anywhere inside your functions.php file $role_object = get_role( 'editor' ); $role_object->add_cap( 'edit_theme_options' );
Vouspouvez commenter l'intégralité de ce code après avoir actualisé votrepanneau d'administration,car le code ci-dessus apportera desmodificationspersistantes à labase de données.
Vous avezmaintenanttoutes les options sous apparence visiblespar les éditeurs. Vouspouvezmasquer 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 lafonction
hide_menu()
sont spécifiques authème demonthème. Vouspouveztrouver le deuxièmeparamètreen cliquant sur le sous-menu que vous souhaitezmasquer,dans lepanneau d'administration. Votre URL sera alors quelque chose comme:example.com/wp-admin/themes.php?page=<%yiw_panelDonc,dans cetexemple,le deuxièmeparamètre de lafonction
remove_submenu_page()
serayiw_panel
EDIT: update for WP 4.9 & only hiding menu items for Editor
If you want your users to be able to change the navigation menu, but not the other options under appearance: use this
// Do this only once. Can go anywhere inside your functions.php file $role_object = get_role( 'editor' ); $role_object->add_cap( 'edit_theme_options' );
You can comment out this entire code after you have refreshed your admin panel, because the above code will make persistent changes to the database.
You now have all the options under appearance visible to the editors. You can hide the other options like so:
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');
The last 3 lines in the
hide_menu()
function are theme specific for my theme. You can find the second parameter by clicking on the submenu you want to hide, in the admin panel. Your URL will then be something like: example.com/wp-admin/themes.php?page=yiw_panelSo, in this example, the second parameter for the
remove_submenu_page()
function will beyiw_panel
-
celamasque lesthèmes,etc.pour les administrateurs aussi.this hides themes etc for admins too.
- 1
- 2017-09-15
- JorgeLuisBorges
-
- 2014-01-09
Dans WordPress 3.8,ce serait unmeilleur code que la réponse actuellement acceptée.
/** * @var $roleObject WP_Role */ $roleObject = get_role( 'editor' ); if (!$roleObject->has_cap( 'edit_theme_options' ) ) { $roleObject->add_cap( 'edit_theme_options' ); }
In WordPress 3.8, this would be better code than the current accepted answer.
/** * @var $roleObject WP_Role */ $roleObject = get_role( 'editor' ); if (!$roleObject->has_cap( 'edit_theme_options' ) ) { $roleObject->add_cap( 'edit_theme_options' ); }
-
- 2010-11-17
Quandje regarde la structure dumenu d'administration,il semble le lien
nav-menus.php
est lié à la capacitéedit_theme_options
.Pouvez-vousmodifier le rôle d'éditeurpourinclure cettefonctionnalité?Cela leurpermettrait également de demodifier les widgets ,je ne saispas si c'est unproblème?Tous les éléments dumenu Ajax sont limitéspar cettefonctionnalité,donc le simplefait de changer la capacité dumenu d'administrationpourmodifier lesmenusne fonctionneraprobablementpas.When I look at the admin menu structure, it seems the
nav-menus.php
link is tied to the capabilityedit_theme_options
. Can you modify the editor role to include this capability? This would also give them the option to edit widgets, I don't know whether this is a problem? All the menu Ajax stuff is restricted by this capability, so just changing the admin menu capability for editing menus will probably not work. -
- 2011-04-14
installer leplugin "User Role Editor" - Activeredit_theme_options -installer leplugin Adminimize - désactiver "Widgets"et "Changer dethème"pour les éditeurs;)
instal plugin "User Role Editor" - Switch edit_theme_options ON - install plugin Adminimize - switch off "Widgets" and "Switch Theme" for Editors ;)
-
- 2011-01-05
J'aitrouvé que votremenufonctionnera de cettefaçon:instalplugin " User Role Editor "et là,vouspouvezmodifier la conditionpour le rôle d'éditeuret d'autres aussi.Activezedit_theme_options.Maismaintenant: vous verrez l'option "menu" sous "thèmes","widgets". Pourmoi: Après avoir cliqué sur "menu" (entant qu'éditeur),je ne verraispas les options rempliesmais vides.Je désactive donc leplugin "User Role Editor"et les options rempliespour "menu" apparaissent correctement.Notez que la désactivation duplugin "User Role Editor" reste les conditions de l'éditeur actif!Tantmieuxpourmoi,peut-être que cela vous aidera aussi
I´ve found, that your menu will work this way: instal plugin "User Role Editor" and there you can edit condition for editor role and other too. Switch edit_theme_options ON. But now: you will see "menu" -option under "themes", "widgets". For me: After click to "menu" (as editor) I´d not see filled options but empty. So I´d deactivate plugin "User Role Editor" and filled options for "menu" appears correctly. Note that deactivating plugin "User Role Editor" remains conditions for editor active! Good for me, maybe it will help you too
-
- 2020-03-30
Nous sommesen 2020,WordPress amaintenant dépassé la V5.3,alorsj'aipensé queje contribuerais à une versionmise àjour dans laquelle leparamètren'estenregistré qu'une seulefois dans labase de données - lors de l'activation duthème,et supprimé lorsque lethèmeest désactivé.
function add_theme_caps(){ global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the editor to edit the theme options $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } add_action( 'load-themes.php', 'add_theme_caps' );
Jepréfère également coder dans un style POO,donc c'est une version POO:
/** * YourClient Class * * @author John Doe * @package YourClient * @since 1.0 */ if (!defined('ABSPATH')) { exit; } if (!class_exists('YourClient')) { /** * The main YourClient class */ class YourClient { /** * Setup class */ public function __construct() { // Give more privileges on Theme Activation add_action('load-themes.php', array($this, 'add_theme_caps')); } function add_theme_caps() { global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the author to edit others' posts for current theme only $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } } }
It's 2020, WordPress is now past V5.3 so i thought i would contribute an updated version in which the setting is saved only once in the database - upon theme activation, and removed when the theme is desactivated.
function add_theme_caps(){ global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the editor to edit the theme options $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } add_action( 'load-themes.php', 'add_theme_caps' );
I also prefer to code in an OOP style so this is an OOP version:
/** * YourClient Class * * @author John Doe * @package YourClient * @since 1.0 */ if (!defined('ABSPATH')) { exit; } if (!class_exists('YourClient')) { /** * The main YourClient class */ class YourClient { /** * Setup class */ public function __construct() { // Give more privileges on Theme Activation add_action('load-themes.php', array($this, 'add_theme_caps')); } function add_theme_caps() { global $pagenow; // gets the author role $role = get_role('editor'); if ('themes.php' == $pagenow && isset($_GET['activated'])) { // Test if theme is activated // Theme is activated // This only works, because it accesses the class instance. // would allow the author to edit others' posts for current theme only $role->add_cap('edit_theme_options'); } else { // Theme is deactivated // Remove the capability when theme is deactivated $role->remove_cap('edit_theme_options'); } } } }
Je voudraispouvoir accorder àmes éditeurs lepouvoir demodifier lemenu,est-ce que celapeut êtrefait?
L'onglet Apparencene semblepas dutout être une option,puis-je lefaire?