Find out if logged in user is not subscriber

The question:

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

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

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

Method 2

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.

Method 3

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:

There is also the current_user_can() function, which lets you denote specific capabilities for more flexibility.

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment