In questa serie, abbiamo dato un'occhiata a come WordPress può servire come base per lo sviluppo di applicazioni web.
Il fatto è che, fino a questo punto, non abbiamo davvero dato un'occhiata alle funzionalità di WordPress che realmente contribuiscono a costruire applicazioni web. Invece, abbiamo passato un po 'di tempo a guardare come WordPress serve come base piuttosto che come framework, e abbiamo esaminato il modo in cui WordPress è organizzato rispetto a molti dei moderni framework disponibili.
In particolare, abbiamo esaminato il modello di progettazione basato sugli eventi in contrasto con il modello di progettazione del modello-vista-controller (e le sue varianti) e come questo si presenta nel contesto di WordPress.
In questo modo, abbiamo lavorato per ripensare l'architettura delle applicazioni e la sua struttura nel contesto di WordPress per aiutarci ad ottenere un modello concettuale migliore per come le cose si integrano all'interno di WordPress e come sfruttare il sistema di hook - ovvero, le azioni e filtri - e come influiscono su vari punti durante il ciclo di vita della pagina di WordPress.
Anche se questo merita un po 'più di discussione, abbiamo bisogno di dare un'occhiata alle strutture che WordPress offre pronte all'uso per comprendere appieno le caratteristiche e le API con le quali dobbiamo lavorare prima di dare un'occhiata a Come lavorare con loro.
Nel prossimo paio di articoli, faremo proprio questo.
Quando si pensa ai componenti di un'applicazione Web, è probabile che venga in mente una serie di cose. Vale a dire che, a parte la solita architettura del database, del middleware e del livello di presentazione, ci sono anche le seguenti caratteristiche:
Anche se questa lista non è affatto esaustiva, colpisce le note alte di ciò che accade nella costruzione di un'applicazione web standard (ovviamente, se ci sono punti che mancano, non esitare a menzionarli nei commenti).
E no - questo non è prescrittivo. A volte, le applicazioni web non avranno la gestione degli utenti, a volte gli utenti non avranno ruoli, forse non avrai bisogno di caching e così via.
Ma il punto non è il caso tutti le cose che ti servono Invece, si tratta di fare un caso per le cose che sono disponibili dovrebbero ne hai bisogno.
Detto questo, diamo un'occhiata a ciò che offre WordPress in termini di gestione degli utenti, autorizzazioni, funzionalità di posta elettronica e gestione delle sessioni.
Chiunque abbia utilizzato WordPress - anche se è solo per il blogging o per la gestione dei contenuti di base - ha familiarità con il sistema utente di base. Cioè, tu crei un nome utente, una password, e poi riempi il tuo profilo quanto vuoi.
Inoltre, gli sviluppatori più esperti hanno familiarità con le idee di ruoli e capacità. Mi azzardo persino a dire che coloro che usano WordPress hanno familiarità con il sistema anche se non hanno mai dato uno sguardo al Codex o si sono scocciati con la scrittura di un codice basato sull'utente.
Ma l'idea generale è davvero semplice: gli utenti rappresentano un profilo individuale per un account in WordPress. Il loro ruolo è indicato da ciò che sono stati assegnati durante la creazione dell'account.
Questi ruoli includono:
Ancora una volta, molti di noi che hanno lavorato con WordPress hanno familiarità con questi ruoli, giusto? Ma come si inseriscono le capacità nell'immagine?
In poche parole, sono le funzionalità che garantiscono agli utenti determinate autorizzazioni in tutta l'applicazione WordPress, nonché ciò che le limita da determinate aree dell'applicazione. Questo è relativamente ben documentato nel Codice.
Ma ecco il punto: se stai creando un'applicazione su WordPress, le API disponibili consentono di bloccare gli utenti dalle aree personalizzate che hai creato in base ai loro ruoli e funzionalità.
Innanzitutto, diciamo che ad un certo punto mentre si lavora sulla tua applicazione web, si vuole essere in grado di fornire all'utente la possibilità di registrarsi o registrarsi da un modulo di iscrizione personalizzato (al contrario del metodo standard di creazione dell'account utente in il back-end come mostrato sopra).
Questo può essere fatto creando un modello con un modulo e quindi leggendo i dati del post.
In realtà, può davvero essere semplice come catturare l'indirizzo email dell'utente. Dico questo perché, sebbene i nomi utente siano belli e divertenti, le e-mail tendono ad essere uniche per un individuo in modo da facilitare il controllo degli errori.
Quindi i passi per farlo sarebbero:
Relativamente diretto, giusto? Ovviamente, questo implica che tu sia in grado di generare una password per l'utente al momento della creazione del proprio account. Fortunatamente, c'è un'API per questo.
Ecco un esempio di come creare un utente a livello di codice in base a un indirizzo email specificato (mentre si genera automaticamente una password).
if (null == username_exists ($ email_address)) $ password = wp_generate_password (12, false); $ user_id = wp_create_user ($ email_address, $ password, $ email_address); wp_update_user (array ('ID' => $ user_id, 'nickname' => $ email_address);); else // Il nome utente esiste già, quindi gestiscilo di conseguenza ...
Dopodiché, devi effettivamente creare una nuova istanza di WP_User
.
$ user = new WP_User ($ user_id);
Questo è ciò che ci permetterà di impostare i ruoli per l'utente dato.
Infine, è il momento di determinare quale ruolo e set di funzionalità verranno assegnati all'utente.
Da un lato, è possibile codificare questi valori in base alle opzioni offerte da WordPress. La verità è che puoi persino creare ruoli e funzionalità personalizzati. Per ora, questo è al di fuori del campo di applicazione dell'articolo; tuttavia, potremmo visitarlo in una serie futura.
Quindi diciamo che vogliamo che tutti gli utenti che sono attualmente registrati abbiano ricevuto il abbonato ruolo. Puoi vedere quale serie di funzionalità saranno concesse in questo articolo del Codex.
L'impostazione di un ruolo è banale:
$ utente-> set_role ('contributore');
A questo punto, hai creato con successo un nuovo utente all'interno dell'applicazione WordPress a livello di codice, senza dover utilizzare alcuna delle funzionalità amministrative predefinite.
Collegalo semplicemente al tuo modello, convalida, disinfetti e controlla l'entrata $ _POST
dati e sarai pronto per partire.
Il codice completo è simile a questo:
if (null == username_exists ($ email_address)) // Genera la password e crea l'utente $ password = wp_generate_password (12, false); $ user_id = wp_create_user ($ email_address, $ password, $ email_address); // Imposta il nickname wp_update_user (array ('ID' => $ user_id, 'nickname' => $ email_address);); // Imposta il ruolo $ user = new WP_User ($ user_id); $ utente-> set_role ('contributore'); else // L'utente esiste già // end if / else
Non male, giusto?
Ma creare un utente e quindi salvare le proprie informazioni nel database solo in metà, giusto?
Una volta che l'utente effettua l'accesso e viene autenticato, probabilmente vorrai limitare i contenuti in base al loro ruolo. Quindi questo solleva la domanda: una volta che un utente ha effettuato l'accesso, come possiamo recuperare il ruolo di un utente?
Fortunatamente, l'API di WordPress rende questo relativamente facile:
Avremo bisogno di sfruttare il wp_get_current_user ()
funzione, e quindi avremo bisogno di ottenere un'istanza del WP_User
oggetto usando l'ID dell'utente corrente dopo il quale possiamo dare un'occhiata alle capacità dell'utente.
Dai un'occhiata al codice qui sotto:
// Ottieni un'istanza dell'utente corrente $ user_id = wp_get_current_user () -> ID; $ user = new WP_User ($ user_id);
Non male, giusto?
Questo rende davvero facile scrivere codice condizionale come:
// Questo stamperà le funzionalità utente print_r ($ user-> wp_capabilities); // Che a sua volta ti permetterà di eseguire un controllo come questo: if ('1' === $ user-> wp_capabilities ['subscriber']) // Abbiamo un abbonato
Là è un modo alternativo di fare questo, però:
global $ current_user; get_currentuserinfo (); if (0 === $ current_user-> user_level) // Abbiamo un abbonato
Ma questo solleva la questione di dove è venuto lo zero? Guarda esattamente questo.
Le differenze tra i due approcci dipendono dal modo in cui si desidera che il codice sia orientato agli oggetti.
Io tendo ad essere meno fan dell'uso globale
quando è disponibile un approccio orientato agli oggetti (come nel primo esempio); tuttavia, il secondo esempio fornisce anche una soluzione relativamente semplice. La tua scelta.
In ogni caso, una volta che sei in grado di controllare in modo condizionale il ruolo dell'account di un utente, puoi quindi limitarlo a specifiche aree dell'applicazione.
Hai ragione: per lo meno, l'utente ha bisogno di ricevere e-mail per quando i loro account sono stati creati, e devono essere in grado di ricevere e-mail ogni volta che qualcosa sul loro account è cambiato.
Ancora una volta, WordPress fornisce un'API che rende questo veramente facile, ma può essere esteso oltre le semplici azioni come quando viene modificato il profilo di un utente.
Infatti, dato che WordPress ha un ricco sistema di eventi, potresti potenzialmente collegarti a qualsiasi numero di eventi e inviare email quando nulla succede. Ovviamente è eccessivo, ma va a dimostrare quanto sia davvero potente l'API.
Quindi, nella prossima sezione, daremo un'occhiata all'e-mail API di WordPress e a come può essere utilizzata per inviare messaggi su determinate attività, oltre a come può essere collegata ad altre funzionalità nell'applicazione.