Verificare se l'utente connesso non è un subscriber

31 lug 2012, 10:32:05
Visualizzazioni: 24.2K
Voti: 14

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

0
Tutte le risposte alla domanda 3
3
19

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.
31 lug 2012 13:17:02
Commenti

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.

Nicolai Grossherr Nicolai Grossherr
5 ago 2014 00:59:20

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

kaiser kaiser
5 ago 2014 02:47:52

Immagino che questo dovrebbe essere sufficiente per una nota/aggiornamento, oltre al fatto che sono anche pigro... ;)

Nicolai Grossherr Nicolai Grossherr
5 ago 2014 11:41:48
0
12
<?php
$current_user = wp_get_current_user();
if ( ! user_can( $current_user, "subscriber" ) ) // Controlla se l'oggetto utente non ha il ruolo di sottoscrittore
    echo 'L\'utente non è un Sottoscrittore';
else
    echo 'L\'utente è un Sottoscrittore';
?>
31 lug 2012 11:45:09
1
-3

È 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

31 lug 2012 11:34:27
Commenti

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.

Scott Scott
31 lug 2012 11:36:28