Vérifiez si l'utilisateur connecté n'est pas abonné


8

Existe-t-il une balise conditionnelle qui me permettra d'afficher certains contenus uniquement si l'utilisateur n'est PAS abonné?

Réponses:


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';
?>

15

Un moyen encore plus simple que @Brady ne vous l'a montré est l'utilisation current_user_can:

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

MU

Il existe également un équivalent pour les installations MU, nommé 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!";

Derrière le rideau

Lorsque vous regardez la source des fonctions pour les installations simples ou MU , vous verrez que les deux s'appuient essentiellement sur wp_get_current_user(), puis vérifient has_cap. Maintenant, si vous voulez voir d'où vient la casquette, alors la WP_Userclasse / l'objet entre en jeu.

Autres membres de cet ensemble

Et puis il y a aussi author_can( $GLOBALS['post'], 'capability' );. Toutes ces fonctions sont à l'intérieur ~/wp-includes/capabilitiesjuste en dessous les unes des autres.

Quand utiliser quoi?

Maintenant, où est la différence entre current_user_can(_FOR_BLOG)et user_can?

  • user_can()est le plus récent (depuis 3.1), mais a besoin de l'utilisateur comme objet. Vous pouvez donc l'utiliser dans les cas où vous ne souhaitez pas cibler l'utilisateur actuel, mais certains utilisateurs.
  • current_user_can_*() est évident.
  • author_can()vous permet de vérifier les capacités par rapport à un objet de publication. Cet objet n'est disponible que pour les publications déjà présentes dans la base de données. C'est donc principalement pour permettre / refuser l'accès à des fonctionnalités de publication spécifiques.

1
Je pense que cela doit être mis à jour, car: Ne passez pas un nom de rôle à current_user_can (), car cela n'est pas garanti de fonctionner correctement (voir # 22624 ). à partir de la current_user_can()page du codex AFAIK n'a pas changé.
Nicolai

@ialocin Vous pouvez le mettre à jour si vous le souhaitez (c'est 2 ans et plus). Vous avez fondamentalement raison. D'un autre côté, un rôle est également ajouté en tant que capacité;)
kaiser

1
Je suppose que cela devrait en fait suffire pour une remarque / mise à jour, d'ailleurs je suis paresseux ... aussi;)
Nicolai

-3

C'est ce que tu veux dire?

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';
}

Plus de détails sur les ID pour différents niveaux: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

Il existe également la fonction current_user_can (), qui vous permet de désigner des capacités spécifiques pour plus de flexibilité. http://codex.wordpress.org/Function_Reference/current_user_can


3
N'utilisez pas les niveaux utilisateurs ... Voici ce que le codex en dit: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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.