He agregado una función a functions.php para redirigir a los usuarios a posts-new.php después de iniciar sesión y funciona. Sin embargo, solo quiero que esto suceda si el usuario que inicia sesión es un colaborador. Así que agregué lo siguiente:
/** Redirect after login */
function mysite_login_redirect(){
if ( current_user_can( 'manage_options' ) ) {
return 'http://mysite.com/wp-admin/index.php';}
else {
return 'http://mysite.com/wp-admin/post-new.php';}
}
add_action( 'login_redirect', 'mysite_login_redirect');
En este estado, tanto los colaboradores como los administradores son redirigidos a post-new.php. Para probarlo, modifiqué la función para que los usuarios sin la capacidad fueran redirigidos:
if ( !current_user_can( 'ma ...
cuando modifiqué la función, tanto los colaboradores como los administradores son redirigidos a index.php.
Entonces, la función parece funcionar, pero esto implica para mí que no está viendo la capacidad ‘manage_options’ para los administradores. Probé varias capacidades exclusivas de administrador con los mismos resultados. raro eh?
Debo decir que estoy usando el complemento editor de roles de usuario, pero lo deshabilité y probé las funciones con los mismos resultados.
También estoy usando Active Directory Integration y Admin Menu Editor.
Prueba esto:
if( current_user_can( 'administrator' ) ){} // only if administrator
if( current_user_can( 'editor' ) ){} // only if editor
if( current_user_can( 'author' ) ){} // only if author
if( current_user_can( 'contributor' ) ){} // only if contributor
if( current_user_can( 'subscriber' ) ){} // only if subscriber
O:
if( current_user_can( 'level_10' ) ){}
if( current_user_can( 'level_9' ) ){}
if( current_user_can( 'level_8' ) ){}
if( current_user_can( 'level_7' ) ){}
if( current_user_can( 'level_6' ) ){}
if( current_user_can( 'level_5' ) ){}
if( current_user_can( 'level_4' ) ){}
if( current_user_can( 'level_3' ) ){}
if( current_user_can( 'level_2' ) ){}
if( current_user_can( 'level_1' ) ){}
if( current_user_can( 'level_0' ) ){}
-
Intenté usar ‘administrador’ en lugar de ‘manage_options’ pero obtengo los mismos resultados. Si entiendo correctamente, la etiqueta current_user_can() solo se aplica a las capacidades y no a los roles de los usuarios.
– Es George
15 de noviembre de 2012 a las 20:17
-
Su argumento es una capacidad o un nombre de rol, por lo que debería funcionar (codex.wordpress.org/Function_Reference/current_user_can).
– CE
15 de noviembre de 2012 a las 22:42
-
Entonces, de cualquier manera, la función no funciona y el problema es que la función no reconoce correctamente ni los roles ni las capacidades. Si lo configuro en un rol específico de administrador, o simplemente ‘administrador’, debería usar la URL ‘si’ si inicio sesión como administrador, y la URL ‘si no’ si inicio sesión como colaborador. De cualquier manera, ya sea que configuro la función en ‘current_user_can’ o ‘!current_user_can’, el inicio de sesión del administrador y el inicio de sesión del colaborador se comportan igual como si las capacidades no fueran diferentes.
– Es George
16 de noviembre de 2012 a las 3:13
-
Cita de la definición de la función: Si bien se admite en parte la verificación de roles particulares en lugar de una capacidad, se desaconseja esta práctica, ya que puede producir resultados poco confiables.
– Shivanand Sharma
21 oct 2019 a las 11:32
Prueba esto:
$exclude_role="contributor";
$roles = get_role( $exclude_role )->capabilities;
foreach ( $roles as $cap ) {
if ( current_user_can( $cap ) ) {
...
}
}
Más detalles se pueden encontrar aquí codex.wordpress.org/Function_Reference/current_user_can
– Andrés Liu
7 de julio de 2016 a las 6:34