¿Permitir a los editores editar menús?

46

Me gustaría poder otorgar a mis editores el poder de cambiar el menú, ¿se puede hacer esto?

La pestaña de apariencia no parece ser una opción, ¿puedo hacerlo?

Fuzz suave
fuente

Respuestas:

53

agregue esto a su 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
fuente
1
¿get_role es una clase?
Mild Fuzz
44
@Mild Fuzz - no en sí no, pero devuelve una instancia deWP_Role
TheDeadMedic
8
Probablemente no debería hacer esto en cada solicitud, ya que esto causa una escritura de db hasta donde yo entiendo. Mejor admin_inity soloif !$role_object->has_cap('edit_theme_options')
jsphpl
Esta configuración se guarda en la base de datos (en la tabla wp_options, campo wp_user_roles), por lo que podría ser mejor ejecutar esto en la activación del tema / complemento. Ver codex.wordpress.org/Function_Reference/add_cap
Pim Schaaf
O puede agregarlo a functions.php, ejecutarlo una vez y luego eliminarlo
d79
18

EDITAR: actualización para WP 4.9 y solo ocultar elementos de menú para Editor

Si desea que sus usuarios puedan cambiar el menú de navegación, pero no las otras opciones en apariencia: use esto

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

Puede comentar todo este código después de haber actualizado su panel de administración, ya que el código anterior realizará cambios persistentes en la base de datos.

Ahora tiene todas las opciones en apariencia visibles para los editores. Puede ocultar las otras opciones así:

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

Las últimas 3 líneas en la hide_menu()función son temas específicos para mi tema. Puede encontrar el segundo parámetro haciendo clic en el submenú que desea ocultar, en el panel de administración. Su URL será algo así como: example.com/wp-admin/themes.php?page= yiw_panel

Entonces, en este ejemplo, el segundo parámetro para la remove_submenu_page()función seráyiw_panel

Jules
fuente
1
esto oculta temas, etc. para administradores también.
JorgeLuisBorges
12

En WordPress 3.8, este sería un código mejor que la respuesta actual aceptada.

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

Cuando miro la estructura del menú de administración, parece que el nav-menus.phpenlace está vinculado a la capacidadedit_theme_options . ¿Se puede modificar la función de editor para incluir esta capacidad? Esto también les daría la opción de editar widgets , no sé si esto es un problema. Todas las cosas del menú Ajax están restringidas por esta capacidad, por lo que cambiar la capacidad del menú de administración para editar menús probablemente no funcionará.

Jan Fabry
fuente
3

instale el complemento "User Role Editor" - Active las opciones edit_theme_options - instale el complemento Adminimize - desactive "Widgets" y "Switch Theme" para los editores;)


fuente
0

He descubierto que su menú funcionará de esta manera: instale el complemento " Editor de roles de usuario " y allí también puede editar la condición para el rol de editor y otros. Encienda edit_theme_options ON. Pero ahora: verá la opción "menú" en "temas", "widgets". Para mí: después de hacer clic en "menú" (como editor), no vería las opciones llenas pero vacías. Así que desactivaría el plugin "User Role Editor" y las opciones completas para "menú" aparecen correctamente. Tenga en cuenta que la desactivación del complemento "User Role Editor" sigue siendo condiciones para el editor activo. Bien por mí, quizás también te ayude


fuente