разрешить редакторам редактировать меню?
7 ответ
- голосов
-
- 2011-02-24
добавьте это в
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' );
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_role - это класс?is get_role a class?
- 1
- 2011-02-24
- Mild Fuzz
-
@Mild Fuzz - не сам по себе нет,но возвращает экземпляр `WP_Role`@Mild Fuzz - not itself no, but it returns an instance of `WP_Role`
- 4
- 2011-08-14
- TheDeadMedic
-
Вероятно,вам не следует делать это при каждом запросе,поскольку это вызывает запись в БД,насколько я понял.Лучше на `admin_init` и только`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
-
Этот параметр сохраняется в базе данных (в таблице wp_options,поле wp_user_roles),поэтому может быть лучше запустить его при активации темы/плагина.См. 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
-
Или вы можете добавить его вfunctions.php,запустить один раз,а затем удалитьOr you could add it to functions.php, run it once and then remove it
- 0
- 2019-01-16
- d79
-
- 2013-04-16
РЕДАКТИРОВАТЬ: обновление для WP 4.9 & amp; скрытие только пунктов меню для редактора
Если вы хотите,чтобы ваши пользователи могли изменять меню навигации,но не другие параметры,отображаемые на экране: используйте это
// Do this only once. Can go anywhere inside your functions.php file $role_object = get_role( 'editor' ); $role_object->add_cap( 'edit_theme_options' );
Вы можете закомментировать весь этот код после обновления панели администратора,потому что приведенный выше код будет вносить постоянные изменения в базу данных.
Теперь у вас есть все параметры под внешним видом,видимые для редакторов. Вы можете скрыть другие параметры следующим образом:
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');
Последние 3 строки в функции
hide_menu()
относятся к моей теме. Вы можете найти второй параметр,нажав на подменю,которое вы хотите скрыть,в панели администратора. Тогда ваш URL будет выглядеть примерно так:example.com/wp-admin/themes.php?page=<▪yiw_panelИтак,в этом примере вторым параметром функции
remove_submenu_page()
будетyiw_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
-
это также скрывает темы и т. д. для администраторов.this hides themes etc for admins too.
- 1
- 2017-09-15
- JorgeLuisBorges
-
- 2014-01-09
В WordPress 3.8 это был бы лучший код,чем текущий принятый ответ.
/** * @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
Когда я смотрю на структуру меню администратора,мне кажется, ссылка
nav-menus.php
привязана к возможностиedit_theme_options
.Можете ли вы изменить роль редактора,чтобы включить эту возможность?Это также даст им возможность редактировать виджеты ,не знаю,проблема ли в этом?Все элементы меню Ajax ограничены этой возможностью,поэтому простое изменение возможности меню администратора для редактирования меню,вероятно,не сработает.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
установить плагин "Редактор ролей пользователя" - включитьedit_theme_options - установить плагин Adminimize - выключить "Виджеты" и "Сменить тему" для редакторов;)
instal plugin "User Role Editor" - Switch edit_theme_options ON - install plugin Adminimize - switch off "Widgets" and "Switch Theme" for Editors ;)
-
- 2011-01-05
Я обнаружил,что ваше меню будет работать следующим образом: установите плагин " Редактор ролей пользователя ",и там вы можете редактировать условия для роли редактора и других.Включитеedit_theme_options.Но теперь: вы увидите опцию «меню» в разделах «темы»,«виджеты». Для меня: после щелчка по «меню» (в качестве редактора) я не видел заполненных параметров,но пустых.Поэтому я деактивировал плагин «Редактор ролей пользователя»,и заполненные параметры для «меню» отображались правильно.Обратите внимание,что при деактивации плагина «Редактор ролей пользователя» условия остаются активными!Молодец,может,и тебе поможет
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
На дворе 2020 год,WordPress не поддерживает V5.3,поэтому я подумал,что внесу обновленную версию,в которой настройки сохраняются в базе данных только один раз - при активации темы и удаляются,когда тема деактивирована.
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' );
Я также предпочитаю кодировать в стиле ООП,так что это версия ООП:
/** * 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'); } } } }
Я хотел бы предоставить своим редакторам право изменять меню. Можно ли это сделать?
Вкладка внешнего вида вообще не является опцией,можно ли это сделать?