WordPress viene utilizzato sempre di più come framework di applicazioni web. Con quel caso d'uso arrivano un sacco di circostanze extra che WordPress non copre. Vuoi davvero che gli utenti dell'applicazione vedano l'amministratore di WordPress?
Nella mia esperienza di sviluppo di applicazioni web, la risposta a questa domanda è solitamente "no".
Oggi ti insegnerò come reindirizzare un utente in base al loro ruolo in una pagina personalizzata in WordPress.
Iniziamo creando un plug-in. Lo vuoi in un plug-in perché è probabile che cambierai la progettazione del tema e desideri comunque la funzionalità di reindirizzamento. Qualsiasi funzionalità che desideri superare il design del tema corrente dovrebbe essere in un plug-in.
Crea una nuova cartella di plugin nel tuo wp-content / plugins directory chiamata 'cm-redirect-by-ruolo'e aggiungi un file chiamato cm-redirect-by-role.php. A quel file aggiungeremo l'intestazione di base per il plugin di WordPress vista sotto.
Ora che hai un plug-in avviato, diamo un'occhiata a come funziona il login dell'utente.
Lo spot predefinito che un utente può accedere al tuo sito WordPress è tramite http://yoursite.com/wp-login.php
. Quando accedi a un sito da quella posizione, il sito ti invia al pannello di amministrazione di WordPress.
Ciò significa che l'amministratore di WordPress è in fase di avvio ed è necessario utilizzare un'azione di amministrazione per catturare l'utente. Io amo sempre il admin_init
azione poiché viene eseguita abbastanza tardi da consentire l'accesso ai dati dell'utente, ma non così tardi che l'utente vedrà nulla sul dashboard.
Usando il admin_init
azione significa che anche se sono già registrati e cercano di accedere all'amministratore di WordPress, verranno comunque reindirizzati.
Ora diamo un'occhiata al codice che useremo. Per il nostro esempio, supponiamo di voler reindirizzare tutti gli iscritti, ma funzionerà con qualsiasi ruolo standard o personalizzato in WordPress.
/ ** * Reindirizza gli utenti in base al loro ruolo * * @since 1.0 * @author SFNdesign, Curtis McHale * * @uses wp_get_current_user () Restituisce un oggetto WP_User per l'utente corrente * @uses wp_redirect () Reindirizza l'utente all'URL specificato * / function cm_redirect_users_by_role () $ current_user = wp_get_current_user (); $ role_name = $ current_user-> ruoli [0]; if ('subscriber' === $ role_name) wp_redirect ('http://yoursite.com/dashboard'); // if // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');
Iniziamo questo processo portando il nostro oggetto utente corrente con wp_get_current_user ()
. Da ciò otteniamo il nostro nome di ruolo e lo assegniamo al $ nome_ruolo
variabile.
Quindi controlliamo se $ nome_ruolo
corrisponde al ruolo che vogliamo reindirizzare. Se lo fa usiamo wp_redirect
per inviare l'utente alla nostra posizione di scelta.
Mentre funzionerà, abbiamo ancora un altro pezzo da aggiungere.
Quando si effettuano chiamate AJAX in WordPress si dovrebbe sempre chiamare il file di routing WordPress AJAX che si trova all'interno dell'amministratore di WordPress. Se lasciamo il nostro codice così com'è, qualsiasi chiamata AJAX fatta dai nostri ruoli di abbinamento fallirà poiché soddisferà il nostro condizionale e verrà reindirizzato.
Per risolvere questo problema, è necessario verificare se stiamo effettuando una chiamata AJAX e, in tal caso, saltare il controllo del ruolo.
function cm_redirect_users_by_role () if (! defined ('DOING_AJAX')) $ current_user = wp_get_current_user (); $ role_name = $ current_user-> ruoli [0]; if ('subscriber' === $ role_name) wp_redirect ('http://yoursite.com/dashboard'); // if $ role_name // if DOING_AJAX // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');
Ora abbiamo la nostra funzione di reindirizzamento avvolta in un controllo per il DOING_AJAX
costante. Se questo è definito, stiamo eseguendo una chiamata AJAX e vogliamo saltare il codice di reindirizzamento.
Ora possiamo reindirizzare gli utenti in base al loro ruolo in una posizione personalizzata di nostra scelta. Se lo volessimo, potremmo persino reindirizzare gli utenti con ruoli diversi a pagine diverse.
Tutto quello che dovremmo fare è aggiungere un secondo condizionale per abbinare il secondo ruolo e impostare la posizione in cui vogliamo reindirizzare.