разрешить редакторам редактировать меню?


46

Я хотел бы предоставить моим редакторам возможность изменять меню, это можно сделать?

Вкладка «Внешний вид» вообще не является опцией, могу ли я сделать это так?

Ответы:


53

добавьте это к вашей теме 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' );

1
get_role - это класс?
Мягкий пух

4
@ Мягкий Fuzz - не сам по себе нет, но он возвращает экземплярWP_Role
TheDeadMedic

8
Вы, вероятно, не должны делать это при каждом запросе, так как это вызывает запись в БД, насколько я понял. Лучше admin_initи толькоif !$role_object->has_cap('edit_theme_options')
jsphpl

Этот параметр сохраняется в базе данных (в таблице wp_options, поле wp_user_roles), поэтому лучше выполнить его при активации темы / плагина. См. Codex.wordpress.org/Function_Reference/add_cap
Пим Шааф

Или вы можете добавить его в functions.php, запустить его один раз, а затем удалить
d79

18

РЕДАКТИРОВАТЬ: обновление для WP 4.9 и скрывать только пункты меню для редактора

Если вы хотите, чтобы ваши пользователи могли изменять навигационное меню, но не отображать остальные параметры: используйте это

// 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


1
это скрывает темы и т.д. для администраторов тоже.
Хорхе ЛуисБоргес

12

В WordPress 3.8 этот код будет лучше, чем текущий принятый ответ.

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

3

Когда я смотрю на структуру меню администратора, кажется, что nav-menus.phpссылка связана с возможностьюedit_theme_options . Можете ли вы изменить роль редактора, чтобы включить эту возможность? Это также даст им возможность редактировать виджеты , я не знаю, является ли это проблемой? Все возможности Ajax меню ограничены этой возможностью, поэтому простое изменение возможности меню администратора для редактирования меню, вероятно, не сработает.


3

установить плагин «User Role Editor» - включить edit_theme_options - установить плагин «Adminize» - отключить «Виджеты» и «Switch Theme» для редакторов;)


0

Я обнаружил, что ваше меню будет работать следующим образом: установите плагин « User Role Editor », и там вы сможете отредактировать условие для роли редактора и другие. Включить edit_theme_options. Но теперь: вы увидите «menu» -опция под «themes», «widgets». Для меня: после нажатия на «меню» (как редактор) я не вижу заполненные опции, но пустые. Поэтому я деактивировал плагин "User Role Editor", и заполненные опции для "menu" отображаются правильно. Обратите внимание, что отключение плагина «User Role Editor» остается условием для активного редактора! Хорошо для меня, может быть, это поможет вам тоже

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.