Averigüe si el usuario conectado no es suscriptor

8

¿Existe alguna etiqueta condicional que me permita mostrar cierto contenido solo si el usuario NO es un suscriptor?

Nasir Zia
fuente

Respuestas:

9
<?php
global $current_user; // Use global
get_currentuserinfo(); // Make sure global is set, if not set it.
if ( ! user_can( $current_user, "subscriber" ) ) // Check user object has not got subscriber role
    echo 'User is a not Subscriber';
else
    echo 'User is a Subscriber';
?>
Scott
fuente
15

Una manera aún más simple que @Brady te mostró es usar current_user_can:

if ( current_user_can( 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again!";

MU

También hay un equivalente para instalaciones MU, llamado current_user_can_for_blog:

global $blog_id;
if ( current_user_can_for_blog( $blog_id 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again on this blog!";

Detras de la cortina

Al mirar la fuente de las funciones para instalaciones individuales o MU , verá que ambas dependen básicamente wp_get_current_user()y luego realizan una verificación has_cap. Ahora, si quieres ver de dónde viene el límite, entonces la WP_Userclase / objeto entra en el juego.

Otros miembros de este conjunto

Entonces hay también author_can( $GLOBALS['post'], 'capability' );. Todas esas funciones están dentro, ~/wp-includes/capabilitiesuna debajo de la otra.

¿Cuándo usar qué?

Ahora, ¿dónde está la diferencia entre current_user_can(_FOR_BLOG)y user_can?

  • user_can()es el más nuevo (desde 3.1), pero necesita al usuario como objeto. Por lo tanto, puede usarlo en casos en los que no desea apuntar al usuario actual, sino a algunos usuarios.
  • current_user_can_*() es obvio.
  • author_can()le permite verificar capacidades contra un objeto de publicación. Este objeto solo está disponible para publicaciones que ya están en la base de datos. Por lo tanto, es principalmente para permitir / denegar el acceso a funciones de publicación específicas.
emperador
fuente
1
Creo que esto debe actualizarse porque: No le pase un nombre de rol a current_user_can (), ya que no se garantiza que funcione correctamente (consulte # 22624 ). desde la current_user_can()página del códice AFAIK no ha cambiado.
Nicolai
@ialocin Puede actualizar eso si lo desea (tiene 2 años o más). Básicamente tienes razón. Por otro lado, también se agrega un rol como capacidad;)
kaiser
1
Supongo que esto debería ser suficiente para un comentario / actualización, además de que soy flojo ... también;)
Nicolai
-3

¿Es esto lo que quieres decir?

global $userdata;
get_currentuserinfo();
if ( $userdata->user_level != 0 )//check user level by level ID
{
  echo 'User is a not Subscriber';
}
else
{
  echo 'User is a Subscriber';
}

Más detalles sobre los ID para diferentes niveles: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

También existe la función current_user_can (), que le permite denotar capacidades específicas para una mayor flexibilidad. http://codex.wordpress.org/Function_Reference/current_user_can

gaN
fuente
3
No use niveles de usuario ... Esto es lo que dice el códice al respecto:To maintain backwards compatibility with plugins that still use the user levels system (although this is very much discouraged), the default Roles in WordPress also include Capabilities that correspond to these levels. User Levels were finally deprecated in version 3.0.
Scott