Finden Sie heraus, ob der angemeldete Benutzer kein Abonnent ist

8

Gibt es ein bedingtes Tag, mit dem ich den bestimmten Inhalt nur anzeigen kann, wenn der Benutzer KEIN Abonnent ist?

Nasir Zia
quelle

Antworten:

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
quelle
15

Ein noch einfacherer Weg, als @Brady Ihnen gezeigt hat, ist die Verwendung von current_user_can:

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

MU

Es gibt auch ein Äquivalent für MU-Installationen mit dem Namen 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!";

Hinter dem Vorhang

Wenn Sie sich die Quelle der Funktionen für Einzel- oder MU-Installationen ansehen, werden Sie feststellen, dass sich beide im Wesentlichen auf die Funktionen verlassen wp_get_current_user()und diese dann überprüfen has_cap. Wenn Sie nun sehen möchten, woher die Kappe kommt, WP_Userkommt die Klasse / das Objekt ins Spiel.

Andere Mitglieder dieses Sets

Dann gibt es auch noch author_can( $GLOBALS['post'], 'capability' );. Alle diese Funktionen befinden sich ~/wp-includes/capabilitiesdirekt untereinander.

Wann was verwenden?

Wo ist der Unterschied zwischen current_user_can(_FOR_BLOG)und user_can?

  • user_can()ist die neuere (seit 3.1), benötigt aber den Benutzer als Objekt. Sie können es also in Fällen verwenden, in denen Sie nicht den aktuellen Benutzer, sondern einige Benutzer ansprechen möchten .
  • current_user_can_*() Es ist offensichtlich.
  • author_can()Mit dieser Option können Sie Funktionen anhand eines Post-Objekts überprüfen. Dieses Objekt ist nur für Beiträge verfügbar, die sich bereits in der Datenbank befinden. Es dient also hauptsächlich dazu, den Zugriff auf bestimmte Post-Funktionen zuzulassen / zu verweigern.
Kaiser
quelle
1
Dieses Ich fühle mich Bedarf aktualisiert werden, denn: Do nicht current_user_can () einen Rollennamen übergeben, da dies nicht zur Arbeit richtig (siehe garantiert # 22624 ). von der current_user_can()Codex-Seite hat sich AFAIK nicht geändert.
Nicolai
@ialocin Sie können das aktualisieren, wenn Sie möchten (es ist 2 Jahre + alt). Sie haben im Grunde recht. Andererseits wird auch eine Rolle als Fähigkeit hinzugefügt;)
Kaiser
1
Ich denke, das sollte eigentlich für eine Bemerkung / ein Update ausreichen, außerdem bin ich faul ... auch;)
Nicolai
-3

Ist es das was du meinst?

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

Weitere Details zu den IDs für verschiedene Ebenen: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

Es gibt auch die Funktion current_user_can (), mit der Sie bestimmte Funktionen für mehr Flexibilität angeben können. http://codex.wordpress.org/Function_Reference/current_user_can

gArn
quelle
3
Verwenden Sie keine Benutzerebenen ... Hier ist, was Codex darüber sagt: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