¿Cómo puedo verificar si el usuario que inició sesión actualmente es un administrador o un editor?
Sé cómo hacer cada uno individualmente:
<?php if(current_user_can('editor')) { ?>
<!-- Stuff here for editors -->
<?php } ?>
<?php if(current_user_can('administrator')) { ?>
<!-- Stuff here for administrators -->
<?php } ?>
¿Pero cómo los trabajo juntos? Es decir, ¿el usuario es administrador o editor?
users
user-roles
andy
fuente
fuente
if( current_user_can('editor') || current_user_can('administrator') )
Respuestas:
Primera respuesta, no relacionada con WordPress porque es solo PHP: use el operador lógico "O":
Si desea verificar más de dos roles, puede verificar si los roles del usuario actual están dentro de una matriz de roles, algo así como:
Sin embargo,
current_user_can
puede usarse no solo con el nombre del rol de los usuarios, sino también con las capacidades.Entonces, una vez que tanto los editores como los administradores pueden editar páginas, su vida puede ser más fácil al verificar esas capacidades:
Eche un vistazo aquí para obtener más información sobre las capacidades.
fuente
is_logged_in();
?current_user_can()
siempre devuelve falso si el usuario no ha iniciado sesión, ywp_get_current_user()
devolverá un usuario sin ningún rol si el usuario no ha iniciado sesión, por loarray_intersect()
que siempre será falso.current_user_can()
función, podemos ver la línea " Si bien, en parte, se admite la verificación de roles particulares en lugar de una capacidad, esta práctica se desaconseja, ya que puede producir resultados poco confiables ". Así que creo que sería mejor evitar usar roles mientras se verifica la capacidad de un usuario :-)array_intersect
método, recibo una advertencia de PHP en nuestro registro de errores del servidor que dicearray_intersect(): Argument #2 is not an array
. ¿Esto se debe a que los usuarios que está comprobando solo tienen un Rol?array_intersect($allowed_roles, (array)$user->roles )
funcionará sin problemas.Primero,
current_user_can()
no debe usarse para verificar el rol de un usuario; debe usarse para verificar si un usuario tiene una capacidad específica .En segundo lugar, en lugar de preocuparse por la función del usuario, sino centrarse en las capacidades, no tiene que preocuparse por hacer cosas como el problema planteado en la pregunta original (que es verificar si el usuario es un administrador O un editor). En cambio, si
current_user_can()
se usara según lo previsto, que es verificar las capacidades de un usuario, no su función, no necesitaría la verificación condicional para contener una prueba "o" (||). Por ejemplo:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages es una capacidad de los roles de administrador y editor, pero no de roles inferiores, como los autores. Así es como
current_user_can()
se pretendía utilizar.fuente
current_user_can
generalmente debe usarse para capacidades, no roles.Como dijo la respuesta @butlerblog, no debe usar current_user_can para verificar un rol
Este aviso se agrega específicamente en la documentación de PHP de la
has_cap
función a la que llamacurrent_user_can
La forma CORRECTA de hacer esto es obtener el usuario y verificar
$user->roles
, de esta manera:Aquí hay algunas funciones auxiliares que uso para hacer esto (ya que a veces no quiero solo el usuario actual):
Entonces puedes hacer esto:
current_user_has_role( 'editor' );
o
current_user_has_role( array( 'editor', 'administrator' ) );
fuente
fuente