Crear usuarios y asignar roles en WordPress es una tarea habitual cuando el sitio web que hemos creado es administrado por varios usuarios y necesitamos asignar roles con propiedades especificas para cada uno de ellos.

Existen varias formas de llevar a cabo esta tarea, una de ellas es usar el plugin WPFront User Role Editor, este plugin nos facilita mucho las tareas de administración de usuarios y roles.

Otra forma es usar funciones específicas para cada tarea, que es lo que vamos a ver en este tutorial, antes que nada debemos conocer los usuarios y los privilegios que se otorgan a cada uno de ellos:

Suscriptor

Puede acceder a contenidos privados o solo para suscriptores.

Colaborador

Pueda escribir nuevas entradas y modificarlas, no publica directamente, requiere la aprobación de un administrador.

Autor

Pueda escribir nuevas entradas y publicarlas directamente.

Editor

Pueda escribir y publicar nuevas entradas asi como modificar, borrar o editar cualquier entrada publicada en el blog propia o de otros usuarios.

Administrador

Puede acceder a todos los recursos del blog, publicaciones, configuración, actualizaciones, instalación de plugins y themes, usuarios …

Super administrador

Puede administrar todos los recursos en una red de sitios WordPress.

Independientemente de los permisos que cada tipo de usuario dispone para trabajar en el panl de administración, podemos asignar roles específicos para cada tipo de usuario, añadir tipos de usuario o eliminarlos. Para llevar a cabo estas tareas, WordPress nos proporciona las siguientes funciones:

get_role()
Obtiene los permisos que posee el tipo de ususario especificado.
Sintaxis: get_role( $role );

add_role()
Añade un nuevo tipo de usuario.
Sintaxis: add_role( $role, $display_name, $capabilities );

remove_role()
Elimina un tipo de usuario.
Sintaxis: remove_role( $role );

add_cap()
Añade permisos al tipo de ususario especificado.
Sintaxis: add_cap( $cap );

remove_cap()
Elimina los permisos del tipo de ususario especificado.
Sintaxis: remove_cap( $cap );

Lo mejor es crear una función y asignar una variable con la función get_role() que como hemos visto anteriormente,
obtiene los permisos que posee el tipo de ususario especificado, por ejemplo, supongamos que queremos que los tipos de usuario “editor”, no dispongan de los permisos para crear, eliminar o modificar el resto de usuarios del blog, pero queremos que pueda visualizar los datos de los mismos:

/* Administra los permisos del editor */
function add_theme_caps() {
    $role = get_role( 'editor' );
    $role->remove_cap( 'create_users' );
    $role->remove_cap( 'add_users' );
    $role->remove_cap( 'edit_users' );
    $role->remove_cap( 'delete_users' );
    $role->remove_cap( 'remove_users' );
    $role->add_cap( 'list_users' );
    $role->add_cap( 'promote_users' );  
}
add_action( 'admin_init', 'add_theme_caps');

Es importante destacar que los permisos se almacenan en la base de datos por lo que si queremos devolver un privilegio a un tipo de usuario al que previamente se lo hemos quitado, debemos volver a asignarle ese privilegio, no basta con eliminar la función.

En la función anterior quiero destacar además el privilegio ‘promote_users’ que es el que genera el acceso a los usuarios en el escritorio de WordPress y no depende de ‘edit_users’.

Si quisieramos añadir o eliminar permisos a un usuario específico, lo haríamos cambiando la función get_role() por la clase WP_User y pasándole el ID del usuario, ejemplo:

/* Administra los permisos de Juan */
function add_theme_caps() {
    $role = new WP_User(12);
    $role->remove_cap( 'create_users' );
    $role->remove_cap( 'add_users' );
    $role->remove_cap( 'edit_users' );
    $role->remove_cap( 'delete_users' );
    $role->remove_cap( 'remove_users' );
    $role->add_cap( 'list_users' );
    $role->add_cap( 'promote_users' );  
}
add_action( 'admin_init', 'add_theme_caps');

Si queremos crear un nuevo Rol para un tipo de usuario específico, utilizaremos la función add_role(), su sintaxis es la siguiente:

add_role( $role, $display_name, $capabilities );

El tercer valor de esta función lo declaramos como un array en el que guardaremos los permisos que queremos asignar al nuevo Rol (Tipo de usuario)

$result = add_role(
    'usuario_basico',
    __( 'Usuario basico' ),
    array(
        'read'         => true,
        'edit_posts'   => true,
        'delete_posts' => false,
    )
);
if ( null !== $result ) {
    echo 'El nuevo usuario ha sido creado';
}
else {
    echo 'Ya existe el usuario, intentelo de nuevo';
}

Para eliminarlo usamos la función remove_role()

remove_role( 'usuario_basico' );

Cambiar el nombre del tipo de rol de usuario

Si queremos cambiar el nombre del tipo de rol para cada rol (administrator, editor …) utilizaremos la siguiente función:

function ddw_change_role_name() {
    global $wp_roles;
    if ( ! isset( $wp_roles ) )
        $wp_roles = new WP_Roles();
	    $wp_roles->roles['administrator']['name'] = 'Programación';
	    $wp_roles->role_names['administrator'] = 'Programación';
	    $wp_roles->roles['editor']['name'] = 'Contenidos';
	    $wp_roles->role_names['editor'] = 'Contenidos';           
}
add_action('init', 'ddw_change_role_name');

También podemos hacerlo para woocommerce:

function ddw_change_role_name() {
    global $wp_roles;
    if ( ! isset( $wp_roles ) )
        $wp_roles = new WP_Roles();
	    $wp_roles->roles['customer']['name'] = 'Cliente';
	    $wp_roles->role_names['customer'] = 'Cliente';    
	    $wp_roles->roles['shop_manager']['name'] = 'Vendedor';
	    $wp_roles->role_names['shop_manager'] = 'Vendedor';             
}
add_action('init', 'ddw_change_role_name');

Por último os dejo una función para ejecutar según el rol al que pertenezca el usuario, por ejemplo en este caso vamos a ocultar accesos en el menú a todos los usuarios no administradores:

$user = wp_get_current_user();
$allowed_roles = array('administrator');
if( !array_intersect($allowed_roles, $user->roles ) ) {
  function ddw_remove_menus_rol() {
    remove_menu_page( 'plugins.php' );
    remove_menu_page( 'tools.php' );
    remove_menu_page( 'options-general.php' );
  }
  add_action( 'admin_menu', 'ddw_remove_menus_rol' );
}

Para una referencia mas completa podemos acceder al codex de WordPress en el apartado Roles & Capabilities, donde se encuentra toda la información referente a este tema, así como una tabla completa con todos los permisos ordenados por cada tipo de usuario.

Por último os recomiendo leer el artículo “Ultimate guide to Roles and Capabilities” de Gary Cao en Solis Lab.

Valoraciones


Sé el primero en valorar

* Tu valoración puede tardar hasta 72 horas en publicarse.

He leido y acepto el Aviso legal y condiciones de uso

CAPTCHA


Utilizamos cookies propias y de terceros para el correcto funcionamiento de la web, personalizar el contenido y mostrar publicidad en función de las preferencias del visitante. Puedes encontrar más información en nuestra Política de cookies.

ACEPTAR
Aviso de cookies