Verificare se l'utente connesso non è un subscriber
Esiste un conditional tag che mi permetta di mostrare determinati contenuti solo se l'utente NON è un subscriber?

Un modo ancora più semplice, rispetto a quello mostrato da @Brady, è utilizzare current_user_can
:
if ( current_user_can( 'subscriber' ) )
echo "Ciao, caro abbonato! È bello rivederti!";
MU
C'è anche un equivalente per le installazioni MU, chiamato current_user_can_for_blog
:
global $blog_id;
if ( current_user_can_for_blog( $blog_id, 'subscriber' ) )
echo "Ciao, caro abbonato! È bello rivederti su questo blog!";
Dietro le quinte
Guardando il codice sorgente delle funzioni per singole o installazioni MU, vedrai che entrambe si basano sostanzialmente su wp_get_current_user()
e poi eseguono un controllo per has_cap
.
Se vuoi vedere da dove viene la capability, entra in gioco la classe/oggetto WP_User
.
Altri membri di questa famiglia
Esiste anche author_can( $GLOBALS['post'], 'capability' );
. Tutte queste funzioni si trovano in ~/wp-includes/capabilities
, una di seguito all'altra.
Quando usare cosa?
Ora, qual è la differenza tra current_user_can(_FOR_BLOG)
e user_can
?
user_can()
è la più recente (dal 3.1), ma richiede l'utente come oggetto. Quindi puoi usarla nei casi in cui non vuoi indirizzarti all'utente corrente, ma a qualche utente.current_user_can_*()
è ovvio.author_can()
ti permette di verificare le capability rispetto a un oggetto post. Questo oggetto è disponibile solo per i post già presenti nel database. Quindi è principalmente per consentire/negare l'accesso a funzionalità specifiche dei post.

Penso che questo debba essere aggiornato, perché:
Non passare un nome di ruolo a current_user_can(), poiché ciò non garantisce il corretto funzionamento (vedi #22624).
dalla pagina del codex di current_user_can()
AFAIK non è cambiato.

@ialocin Puoi aggiornarlo se vuoi (sono passati più di 2 anni). Fondamentalmente hai ragione. D'altra parte, un ruolo viene aggiunto anche come capability ;)

È questo che intendi?
global $userdata;
get_currentuserinfo();
if ( $userdata->user_level != 0 ) //controlla il livello dell'utente tramite ID livello
{
echo 'L\'utente non è un Sottoscrittore';
}
else
{
echo 'L\'utente è un Sottoscrittore';
}
Maggiori dettagli sugli ID per i diversi livelli: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels
C'è anche la funzione current_user_can(), che permette di specificare capacità specifiche per maggiore flessibilità. http://codex.wordpress.org/Function_Reference/current_user_can

Non utilizzare i livelli utente... Ecco cosa dice il codex a riguardo: Per mantenere la compatibilità con i plugin che ancora utilizzano il sistema dei livelli utente (sebbene sia fortemente sconsigliato), i Ruoli predefiniti in WordPress includono anche le Capabilities che corrispondono a questi livelli. I Livelli Utente sono stati definitivamente deprecati nella versione 3.0.
