Scopri se l'utente che ha effettuato l'accesso non è abbonato


8

Esiste un tag condizionale che mi consentirà di visualizzare determinati contenuti solo se l'utente NON è un abbonato?

Risposte:


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

15

Un modo ancora più semplice, che @Brady ti ha mostrato è l'uso di current_user_can:

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

MU

Esiste 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 "Hi, dear subscriber! Glad seeing you again on this blog!";

Dietro la tenda

Quando guardi l'origine delle funzioni per installazioni singole o MU , vedrai che entrambi fondamentalmente si basano su wp_get_current_user()e quindi eseguono un controllo has_cap. Ora se vuoi vedere da dove viene il tappo, allora la WP_Userclasse / oggetto entra in gioco.

Altri membri di questo set

Poi c'è anche author_can( $GLOBALS['post'], 'capability' );. Tutte quelle funzioni sono dentro l'una ~/wp-includes/capabilitiessotto l'altra.

Quando usare cosa?

Ora, dov'è la differenza tra current_user_can(_FOR_BLOG)e user_can?

  • user_can()è il più recente (dal 3.1), ma ha bisogno dell'utente come oggetto. Quindi puoi usarlo nei casi in cui non vuoi scegliere come target l'utente corrente, ma alcuni utenti.
  • current_user_can_*() è ovvio.
  • author_can()consente di verificare le funzionalità rispetto a un oggetto post. Questo oggetto è disponibile solo per i post che sono già nel DB. Quindi è principalmente per consentire / negare l'accesso a funzionalità di post specifiche.

1
Ritengo che questo debba essere aggiornato perché: Non passare un nome di ruolo a current_user_can (), poiché non è garantito che funzioni correttamente (vedi # 22624 ). dalla current_user_can()pagina del codice AFAIK non è cambiato.
Nicolai,

@ialocin Puoi aggiornarlo se vuoi (è 2 anni + vecchio). Hai fondamentalmente ragione. D'altra parte un ruolo viene aggiunto anche come capacità;)
kaiser

1
Immagino che questo in realtà dovrebbe essere sufficiente per un commento / aggiornamento, inoltre sono pigro ... troppo;)
Nicolai

-3

È ciò che intendi?

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

Maggiori dettagli sugli ID per diversi livelli: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

Esiste anche la funzione current_user_can (), che consente di indicare capacità specifiche per una maggiore flessibilità. http://codex.wordpress.org/Function_Reference/current_user_can


3
Non utilizzare i livelli utente ... Ecco cosa dice il codice al riguardo: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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.