Is there a conditional tag that will allow me to display certain content only if the user is NOT a subscriber?

3 Answers 3

$current_user = wp_get_current_user();
if ( ! user_can( $current_user, "subscriber" ) ) // Check user object has not got subscriber role
    echo 'User is a not Subscriber';
    echo 'User is a Subscriber';

An even more simple way, than @Brady showed you is the using current_user_can:

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


There's also an equivalent for MU installations, named 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!";

Behind the curtain

When looking at the source of the functions for single or MU installations, then you'll see, that both basically rely on wp_get_current_user() and then do a check for has_cap. Now if you want to see, where the cap comes from, then WP_User class/object comes into the game.

Other members of this set

Then there's also author_can( $GLOBALS['post'], 'capability' );. All those functions are inside ~/wp-includes/capabilities right below each other.

When to use what?

Now, where's the difference between current_user_can(_FOR_BLOG) and user_can?

  • user_can() is the newer one (since 3.1), but needs the user as object. So you can use it in cases, where you don't want to target the current user, but some users.
  • current_user_can_*() is obvious.
  • author_can() allows you to check capabilities against a post object. This object is only available for posts, that are already in the DB. So it's mainly for allowing/denying the access to specific post features.
  • 1
    This I feel needs to be updated, because: Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly (see #22624). from the current_user_can() codex page AFAIK hasn't changed. Aug 4, 2014 at 21:59
  • @ialocin You can update that if you want (it's 2years+ old). You are basically right. On the other hand a role gets added as capability as well ;)
    – kaiser
    Aug 4, 2014 at 23:47
  • 1
    I guess this should actually be enough for a remark/update, besides I'm lazy...too ;) Aug 5, 2014 at 8:41

Is this what you mean?

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

More details on the ID's for different levels: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

There is also the current_user_can() function, which lets you denote specific capabilities for more flexibility. http://codex.wordpress.org/Function_Reference/current_user_can

  • 3
    Don't use user levels... Here is what codex says about it: 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
    Jul 31, 2012 at 8:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.