permitir que editores editem menus?

46

Gostaria de poder conceder aos meus editores o poder de alterar o menu, isso pode ser feito?

A guia aparência não parece ser uma opção, posso fazê-lo?

Fuzz leve
fonte

Respostas:

53

adicione isso ao seu tema 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
fonte
1
get_role é uma classe?
Fuzz suave
4
@Mild Fuzz - não em si não, mas ele retorna uma instância deWP_Role
TheDeadMedic
8
Você provavelmente não deve fazer isso em todas as solicitações, pois isso causa uma gravação de banco de dados tanto quanto eu entendi. Melhor admin_inite únicoif !$role_object->has_cap('edit_theme_options')
jsphpl 14/02
Essa configuração é salva no banco de dados (na tabela wp_options, campo wp_user_roles), portanto, pode ser melhor executar isso na ativação do tema / plugin. Veja codex.wordpress.org/Function_Reference/add_cap
Pim Schaaf
Ou você pode adicioná-lo ao functions.php, executá-lo uma vez e removê-lo
d79 16/01
18

EDIT: atualização para o WP 4.9 e ocultando apenas itens de menu para o Editor

Se você deseja que seus usuários possam alterar o menu de navegação, mas não as outras opções na aparência: use este

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

Você pode comentar esse código inteiro depois de atualizar seu painel de administração, porque o código acima fará alterações persistentes no banco de dados.

Agora você tem todas as opções em aparência visíveis para os editores. Você pode ocultar as outras opções da seguinte maneira:

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');

As últimas 3 linhas da hide_menu()função são tema específico para o meu tema. Você pode encontrar o segundo parâmetro clicando no submenu que deseja ocultar, no painel do administrador. Seu URL será algo como: example.com/wp-admin/themes.php?page= yiw_panel

Portanto, neste exemplo, o segundo parâmetro para a remove_submenu_page()função seráyiw_panel

Jules
fonte
1
isso esconde temas etc para administradores também.
JorgeLuisBorges
12

No WordPress 3.8, este seria um código melhor do que a resposta atualmente aceita.

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

Quando olho para a estrutura do menu do administrador, parece que o nav-menus.phplink está vinculado ao recursoedit_theme_options . Você pode modificar a função de editor para incluir esse recurso? Isso também daria a eles a opção de editar widgets , não sei se isso é um problema? Todo o material do menu Ajax é restrito por esse recurso, portanto, apenas alterar o recurso do menu do administrador para editar menus provavelmente não funcionará.

Jan Fabry
fonte
3

plugin de instalação "Editor de Função de Usuário" - Ative edit_theme_options - ative o plugin de instalação Adminimize - desative "Widgets" e "Alternar Tema" para Editores;)


fonte
0

Eu descobri que seu menu funcionará desta maneira: instale o plugin " User Role Editor " e lá você poderá editar a condição da função de editor e outras também. Ative edit_theme_options. Mas agora: você verá a opção "menu" em "temas", "widgets". Para mim: Depois de clicar no "menu" (como editor), não vejo as opções preenchidas, mas vazia. Desativei o plug-in "User Role Editor" e as opções preenchidas para "menu" aparecem corretamente. Observe que a desativação do plugin "User Role Editor" permanece como condição para o editor ativo! Bom para mim, talvez isso também ajude você


fonte