Creazione di un sistema di messaggistica WordPress personalizzato, parte 4

In questa serie, abbiamo dato un'occhiata a come possiamo implementare un sistema che ci consente di definire in modo programmatico i messaggi personalizzati che vengono visualizzati su una determinata pagina di amministrazione nel back-end di WordPress.

Se hai seguito la serie fino ad ora, allora sai:

  • Abbiamo gettato le basi per il plug-in che è stato utilizzato in questa serie, e lo abbiamo anche sviluppato un po 'oltre.
  • Abbiamo definito e utilizzato un hook personalizzato che possiamo utilizzare per visualizzare i messaggi delle impostazioni.
  • Abbiamo aggiunto il supporto per i messaggi di successo, di avviso e di errore che possono essere visualizzati nella parte superiore di una determinata pagina delle impostazioni.

Come menzionato nel precedente tutorial:

Ma se hai letto uno dei miei tutorial precedenti, sai che non sono un fan di avere il codice duplicato. Nemmeno io sono fan di avere una classe fare molte cose. E, sfortunatamente, è esattamente quello che stiamo facendo qui.

E ci occuperemo di questo in questo ultimo tutorial. Entro la fine, avremo una soluzione refactored completa che utilizza alcuni principi intermedi orientati agli oggetti come l'ereditarietà. Avremo anche alcuni metodi che possiamo usare a livello di programmazione o che possono essere registrati con il sistema di aggancio WordPress.

Iniziare alla fine

A questo punto dovresti sapere esattamente di cosa hai bisogno nel tuo ambiente di sviluppo locale. Nello specifico, dovresti avere quanto segue:

  • PHP 5.6.25 e MySQL 5.6.28
  • Apache o Nginx
  • WordPress 4.6.1
  • Il tuo IDE o editor preferito

Raccomando anche la versione più recente del codice sorgente in quanto ti consentirà di esaminare tutte le modifiche che stiamo apportando. Se non ce l'hai, va bene, ma ti consiglio di leggere le esercitazioni precedenti prima di andare oltre.

Nell'esercitazione precedente

Come potresti ricordare (o avere accertato dal commento sopra), il tutorial precedente ci ha lasciato con una sola classe che stava facendo troppo lavoro.

Un modo per sapere questo è che se dovessi descrivere quello che stava facendo la classe, non saresti in grado di dare una singola risposta. Invece, dovresti dire che era responsabile della gestione dei messaggi di successo, dei messaggi di avviso, dei messaggi di errore e del rendering di tutti loro indipendentemente l'uno dall'altro.

E benché si possa affermare che si trattava di "gestire messaggi personalizzati", non si descriverebbe necessariamente la verbosità della classe. Questo è ciò che speriamo di risolvere in questo tutorial.

Nel tutorial finale

In particolare, stiamo andando a fare quanto segue:

  • rimuovendo le vecchie impostazioni della classe di messaggistica
  • aggiungendo una nuova classe di messaggi di impostazioni più generiche
  • aggiungendo una classe di messaggistica di configurazione con cui comunicare
  • introducendo metodi che possiamo usare indipendentemente da WordPress
  • snellire il modo in cui WordPress esegue il rendering dei messaggi

Abbiamo il nostro lavoro tagliato per noi, quindi andiamo avanti e cominciamo con tutto quanto sopra.

Rifattorizzare il nostro lavoro

Quando si tratta di refactoring del nostro lavoro, aiuta a sapere esattamente cosa vogliamo fare. Nel nostro caso, riconosciamo che abbiamo un sacco di codice duplicato che potrebbe essere condensato. 

Inoltre, abbiamo tre diversi tipi di messaggi gestiti esattamente allo stesso modo, tranne per il modo in cui sono resi. E in questo caso, è un problema degli attributi della classe HTML.

Quindi, possiamo generalizzare quel codice per focalizzarci su uno specifico genere, e possiamo consolidare molti metodi per aggiungere messaggi di successo o recuperare messaggi di errore generalizzando un metodo per riconoscere detto genere

In definitiva, lo faremo. Ma prima, alcune pulizie.

1. Rimuovere il vecchio Impostazioni Messenger

Nelle esercitazioni precedenti, abbiamo lavorato con una classe chiamata Settings_Messenger. Fino a questo punto, è servito al suo scopo, ma stiamo rifacendo questa lezione per il resto di questo tutorial.

Quando si tratta di questo tipo di refactoring, è facile voler semplicemente cancellare la classe e ricominciare da capo. Ci sono momenti in cui questo è appropriato, ma questo non è uno di questi. Invece, prenderemo quella classe e refactor cosa c'è già.

Tutto ciò per dire, non cancellare il file e iniziare con uno nuovo. Invece, segui ciò che stiamo facendo in questo tutorial.

2. Una nuova classe di messaggi di impostazione

Per prima cosa, introduciamo un Settings_Message classe. Questo rappresenta qualunque tipo di messaggio di impostazioni con cui scriveremo. Cioè, gestirà messaggi di successo, messaggi di errore e messaggi di avvertimento.

Per fare ciò, definiremo la classe, introdurremo una singola proprietà e quindi la istanziamo nel costruttore. Dai un'occhiata a questo codice e ti spiegherò un po 'più in basso:

messages = array ('success' => array (), 'error' => array (), 'warning' => array (),); 

Si noti che abbiamo creato un attributo privato, $ messages. Quando la classe viene istanziata, creiamo una matrice multidimensionale. Ogni indice, identificato da successo, errore, o avvertimento, si riferisce al proprio array in cui memorizzeremo i messaggi corrispondenti.

Successivamente, dobbiamo essere in grado di aggiungere un messaggio, ottenere un messaggio e ottenere tutti i messaggi. Discuterò ciascuno di questi in modo più dettagliato momentaneamente.

Aggiungere messaggi

Per prima cosa, vediamo come aggiungeremo i messaggi:

messaggi [$ tipo])) return;  array_push ($ this-> messages [$ type], $ message); 

Questo messaggio prende prima la stringa in entrata e disinfetta i dati. Quindi controlla se esiste già nei messaggi di successo. Se è così, restituisce semplicemente. Dopotutto, non vogliamo messaggi duplicati.

In caso contrario, aggiunge il messaggio alla raccolta.

Ottenere messaggi

Il recupero dei messaggi ha due forme:

  1. rendering di singoli messaggi di genere
  2. rendere i messaggi nella visualizzazione della pagina di amministrazione (completa di sanitizzazione HTML, ecc.)

Ricorda, ci sono momenti in cui potremmo voler solo visualizzare messaggi di avvertimento. Altre volte, potremmo voler visualizzare tutti i messaggi. Poiché ci sono due modi per farlo, possiamo sfruttarne uno e poi sfruttarlo in un'altra funzione.

Suona confuso? Aspetta con me e ti spiegherò tutto. La prima parte su cui ci concentreremo è la modalità di rendering dei messaggi genere (pensa al successo, all'errore o all'avviso). Ecco il codice per farlo (e dovrebbe sembrare familiare):

messaggi [$ tipo])) return;  $ html = "
"; $ html. = '
    '; foreach ($ this-> messages [$ type] come $ message) $ html. = "
  • $ messaggio
  • "; $ html. = '
'; $ html. = '
'; $ allowed_html = array ('div' => array ('class' => array (),), 'ul' => array (), 'li' => array (),); echo wp_kses ($ html, $ allowed_html);

Si noti qui che stiamo utilizzando gran parte dello stesso codice del precedente tutorial; tuttavia, lo abbiamo generalizzato in modo che guardi l'arrivo $ tipo e lo applica dinamicamente al markup. 

Questo ci permette di avere un'unica funzione per rendere i nostri messaggi. Questo non è tutto, però. Che dire delle volte che vogliamo ottenere tutti messaggi? Questo potrebbe essere quello di eseguire il rendering su una pagina o di acquisirli a livello di codice per altre elaborazioni.

Per fare questo, possiamo introdurre un'altra funzione:

messaggi come $ tipo => $ messaggio) $ this-> get_messages ($ tipo); 

Questo messaggio dovrebbe essere abbastanza facile da capire. Semplicemente scorre attraverso tutti i messaggi che abbiamo nella nostra collezione e chiama il get_messages funzione che abbiamo delineato sopra.

Li rende ancora tutti insieme (che vedremo un loro utilizzo nella nostra implementazione di un amo personalizzato momentaneamente). Se si desidera utilizzarli per un altro scopo, è possibile aggiungere il risultato in una stringa e restituirlo al chiamante o eseguire qualche altra funzione programmatica.

Questa è solo un'implementazione.

3. Impostazioni Messenger

Questo lo fa per il reale Settings_Message classe. Ma come possiamo comunicare con esso? Certo, possiamo parlarne direttamente, ma se c'è una classe intermedia, abbiamo il controllo su ciò che ci viene restituito senza aggiungere ulteriori responsabilità al Settings_Message classe, giusto?

Inserisci il Settings_Messenger. Questa classe è responsabile per ci consente di leggere e scrivere i messaggi delle impostazioni. Penso che si possa fare un caso in cui potresti dividerlo in due classi con la sua responsabilità perché legge e scrive ma, come un messaggero che invia e riceve, questo è lo scopo di questa classe.

La configurazione iniziale della classe è semplice.

  • Il costruttore crea un'istanza di Settings_Message classe che possiamo usare per inviare e ricevere messaggi.
  • Associa un metodo alla nostra abitudine tutsplus_settings_messages gancio che abbiamo definito in un precedente tutorial.

Dai uno sguardo al primo paio di metodi:

messaggio = new Settings_Message ();  public function init () add_action ('tutsplus_settings_messages', array ($ this, 'get_all_messages')); 

Ricordati di prima in questo tutorial, abbiamo il gancio definito nella nostra vista che può essere trovato in settings.php. Per completezza, è elencato qui:

In realtà non visualizzeremo opzioni in questa pagina. Invece, useremo questa pagina per dimostrare come collegarci al nostro messenger personalizzato.

Si noti, tuttavia, che questo particolare hook sfrutta il get_all_messages metodo che esamineremo in un momento. Non deve usare questo metodo. Invece poteva essere utilizzato per rendere semplicemente i messaggi di successo o qualsiasi altro metodo che si desidera utilizzare.

Aggiungere messaggi

Creare le funzioni per aggiungere messaggi è semplice in quanto queste funzioni richiedono un tipo e il messaggio stesso. Ricorda il Settings_Message si occupa di disinfettare le informazioni in modo che possiamo semplicemente passare i messaggi in arrivo.

Vedi sotto dove stiamo aggiungendo successo, avviso e messaggi di errore:

add_message ('successo', $ messaggio);  public function add_warning_message ($ message) $ this-> add_message ('warning', $ message);  public function add_error_message ($ message) $ this-> add_message ('error', $ message); 

È facile, non è vero??

Ottenere messaggi

Recupero dei messaggi non è molto diverso, tranne che dobbiamo solo fornire il tipo di messaggi che vogliamo recuperare:

get_messages ('successo');  public function get_warning_messages () echo $ this-> get_messages ('warning');  public function get_error_messages () echo $ this-> get_messages ('error'); 

Fatto e fatto, giusto?

Ma l'hai preso??

Si noti che i messaggi si riferiscono soprattutto a due altri metodi che non abbiamo ancora affrontato. Questi sono messaggi privati ​​che ci aiutano a semplificare le chiamate sopra. 

Scopri i seguenti metodi privati ​​che sono entrambi responsabili dell'aggiunta e del recupero dei messaggi direttamente dal Settings_Message istanza mantenuta sull'oggetto di messaggistica:

messaggio-> add_message ($ tipo, $ messaggio);  funzione privata get_messages ($ tipo) return $ this-> message-> get_messages ($ type); 

quello avvolge il nuovo Settings_Messenger classe. Tutto questo è molto più semplice, no??

Avvio del plugin

Tuttavia, solleva la domanda: come possiamo avviare il plugin ora che abbiamo avuto tutte queste modifiche?

Vedi l'intera funzione qui sotto:

dentro(); $ messenger = new Settings_Messenger (); $ Messenger-> init (); $ messenger-> add_success_message ('Nice shot kid, era uno su un milione!'); $ messenger-> add_warning_message ('Non andare dolcemente in quella buona notte.'); $ messenger-> add_error_message ('Danger Will Robinson.'); 

E questo è tutto.

Alcuni punti da notare:

  • Se non chiami init sul Settings_Messenger, quindi non devi preoccuparti di visualizzare alcun messaggio nella tua pagina delle impostazioni.
  • Il codice aggiunge messaggi al Settings_Messenger, ma in realtà non ne recupera nessuno perché io sono usando il metodo init.
  • Se si desidera recuperare i messaggi, è possibile utilizzare i metodi che abbiamo descritto sopra.

Questo è tutto per il refactoring. Questo non funzionerà Esattamente fuori dalla scatola perché c'è ancora del codice necessario per caricare tutti i file PHP necessari per far funzionare il plugin; tuttavia, il codice sopra si concentra sul refactoring che è il punto di questo intero tutorial.

Conclusione

Per una versione completa di questo tutorial e completo del codice sorgente fa lavoro fuori dalla scatola, si prega di scaricare il codice sorgente allegato a questo post sulla barra laterale destra.

Spero che nel corso di questo materiale tu abbia acquisito una serie di nuove competenze e modi per affrontare lo sviluppo di WordPress. Quando guardiamo oltre la serie, abbiamo coperto molto:

  • menu personalizzati
  • introduzione di pagine di amministrazione
  • i vari tipi di messaggi
  • definire e sfruttare i ganci personalizzati
  • e refactoring codice orientato agli oggetti

Come al solito, sono sempre felice di rispondere alle domande tramite i commenti, e puoi anche controllare il mio blog e seguirmi su Twitter. Di solito parlo anche dello sviluppo del software all'interno di WordPress e di argomenti tangenziali. Se ti interessa più sviluppo di WordPress, non dimenticare di dare un'occhiata alle mie serie ed esercitazioni precedenti e l'altro materiale WordPress che abbiamo qui su Envato Tuts+.

risorse

  • Creazione di pagine di amministrazione personalizzate con WordPress
  • L'API delle impostazioni di WordPress
  • Come iniziare con WordPress
  • add_action
  • do_action
  • wp_kses
  • sanitize_text_field