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

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' );
}
BenFreke
источник
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» остается условием для активного редактора! Хорошо для меня, может быть, это поможет вам тоже


источник