editor menu

¿Quieres patrocinar?

¿Quieres aparecer aquí? Si quieres patrocinar este blog, ponte en contacto conmigo a través de este formulario

Permite administrar los menús a un usuario con rol Editor

Como sabrás, en WordPress existe una gestión de usuarios con diferentes niveles de permisos o capabilities.

Por defecto la gestión de menús desde el panel de administración de WordPress está restringida a usuarios con rol administrador. En algunos casos, te habrás encontrado con la necesidad o la petición de un cliente para que los usuarios con rol Editor puedan tener acceso a la gestión de menús.

Vamos a ver cómo dar permiso a los usuarios con rol Editor para gestionar los menús, con apenas unas líneas de código. Lo primero es asignarle la capability necesaria, que para este caso es edit_theme_options. Esta capability o permiso, da acceso a los usuarios que la tengan a:

Para asignar una capability a un rol determinado, utilizaremos el método add_cap() perteneciente al objeto WP_Role que nos devuelve la función get_role():

$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );

Simplemente obtenemos el rol editor, y le añadimos la capability edit_theme_options.

¡IMPORTANTE!

El método add_cap almacena en base de datos las capabilities que asignamos a los roles. Por lo tanto, es aconsejable utilizar esto una sóla vez. Una vez ejecutado este código puedes eliminarlo, o mejor, puedes utilizarlo para ejecutar en el hook de activacion de temas y plugins. Si el día de mañana quieres dar marcha atrás, utiliza el método remove_cap.

Elimina el resto de opciones del menú apariencia

Hasta aquí todo bien. Pero ahora un usuario con rol editor tiene acceso a todo el menú de apariencia. Veamos cómo darle acceso únicamente a la gestión de menús, capando el resto de opciones:

<?php

function hide_menus_for_editor_role() {
    $role = wp_get_current_user();
    $main_roles = array('administrator');

    if (!in_array($role->roles[0], $main_roles)) {
        // Hide theme selection page
        remove_submenu_page( 'themes.php', 'themes.php' );

        // Hide widgets page
        remove_submenu_page( 'themes.php', 'widgets.php' );

        // Hide customize page
        global $submenu;
        unset( $submenu['themes.php'][6] );
    }
}
add_action( 'admin_menu', 'hide_menus_for_editor_role' );

Como ves, actuamos sobre el hook admin_menu. Comprobamos que el rol actual no sea administrador, y lo que hacemos es eliminar las subpáginas del menú de Apariencia. De este modo, un usuario con rol editor sólo tendrá acceso a la edición de menús.

¿Te ha resultado útil esta información?

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.