Avvisi di amministratore WordPress persistenti parte 2

Nella prima parte di questa serie, abbiamo imparato come implementare un avviso di amministrazione di base che appare nella parte superiore di ogni pagina di amministrazione di WordPress. In questo tutorial, inizieremo a creare un plug-in per contenere tutto il nostro codice di notifica dell'amministratore personalizzato.

Inizieremo implementando gli avvisi di amministrazione standard e li utilizzeremo come base per esempi più flessibili e avanzati.

Impostazione del nostro plugin

Innanzitutto, configuriamo un nuovo plug-in da zero che utilizzeremo per tutte le nostre notifiche di amministrazione, quindi siamo pronti per iniziare a inserire il codice.

Presumo qui che tu abbia già impostato un sito di sviluppo WP locale. In caso contrario, fare riferimento ai collegamenti nella prima parte di questa serie di tutorial.

Crea una nuova cartella di plugin chiamata admin_notices dentro / Wp-content / plugins /, e quindi creare un admin_notices.php file che sarà il file plugin principale.

Aprire admin_notices.php nel tuo editor preferito e aggiungi la struttura di base del plugin:

dentro();

Abbiamo aggiunto un'intestazione di plugin di base in modo che WordPress riconosca il nostro plug-in. Questo è seguito da una classe che conterrà metodi per visualizzare le nostre notifiche di amministrazione.

Ho chiamato la classe Gwyer_Admin_Notices per cercare di renderlo il più unico possibile. In questo modo, è molto meno probabile che sia in conflitto con un nome di classe esistente.

Iniziamo visualizzando un avviso di amministrazione di base, quindi aggiungiamolo per renderlo più utile. Per creare un avviso di amministrazione, aggiungi il admin_notices agganciare al dentro() funzione:

add_action ('admin_notices', array ($ this, 'test_notice'));

Il gancio include a test_notice funzione di callback che verrà utilizzata per emettere il markup dell'avviso di amministrazione.

Aggiungi il seguente metodo di classe a Gwyer_Admin_Notices per visualizzare l'avviso di amministrazione effettivo. Per i messaggi, utilizzeremo citazioni di film classici degli ultimi 100 anni di film.

/ ** * Emissione di un avviso di amministrazione di prova. * / public function test_notice () ?> 

Yoo hoo, grande esplosione estiva.

Attiva il plugin per mostrare l'avviso di prova.

Aggiungiamo anche esempi degli altri tipi di avviso di amministrazione che possiamo mostrare incluso il tipo eliminabile aggiungendo il è-dismissible Classe CSS Aggiungi questi al test_notice () metodo sotto l'avviso di amministrazione esistente div:

Toto, ho la sensazione che non siamo più in Kansas.

Mi hai fatto "ciao".

Di tutte le articolazioni del gin in tutte le città di tutto il mondo, lei entra nel mio.

Nessuno mette Baby in un angolo.

Questa è la gamma completa di tipi di avviso di amministrazione che possiamo visualizzare tramite le classi CSS core di WordPress. Ricorda, tuttavia, che l'avviso di amministrazione da cancellare riappare su ogni caricamento della pagina!

L'avviso di amministrazione "non ammissibile" in questo contesto indica solo la pagina corrente. Avere notifiche amministrative persistenti non è molto flessibile, quindi in un secondo momento esamineremo in modo diverso i modi in cui è possibile eliminare le notifiche di amministrazione in modo efficace.

Ganci di notifica

Finora, abbiamo usato solo il admin_notice gancio per implementare un avviso di amministrazione. Esistono infatti quattro hook di notifica dell'amministratore separati che è possibile utilizzare per visualizzare le notifiche, ma admin_notice è quello più comunemente usato.

I quattro ganci disponibili sono:

  • admin_notices (utilizzato nella maggior parte dei casi)
  • network_admin_notices
  • all_admin_notices*
  • user_admin_notices*

*Nessuna documentazione ufficiale attualmente disponibile per questi ganci.

Quindi, dove useresti di solito all_admin_notices, user_admin_notices, e network_admin_notices? E come si differenziano da admin_notices?

Ho detto in precedenza che il admin_notices hook visualizza le notifiche su tutte le pagine di amministrazione, ma questo non è assolutamente vero. Se dai un'occhiata admin-header.php nel core di WordPress, lo vedrai admin_notices, network_admin_notices, e user_admin_notices si escludono a vicenda. Cioè, solo uno di questi hook si attiva su una pagina di amministrazione di WordPress.

Una serie di espressioni condizionali valuta la pagina di amministrazione corrente e attiva solo una di queste, a seconda del tipo di pagina di amministrazione attualmente in uso.

in primo luogo, is_network_admin () controlla se sei su una schermata di amministrazione di rete (ad esempio, qualsiasi pagina di amministrazione basata su a) / Wp-admin / network / URL). Se è così, il network_admin_notices agganciare i fuochi.

Altrimenti, is_user_admin () controlla se sei su una schermata di amministrazione degli utenti (ad esempio, qualsiasi pagina di amministrazione basata su a) / Wp-admin / user / URL). Se è così, il user_admin_notices agganciare i fuochi. 

E, come avrai intuito, se tutti e due is_network_admin ()is_user_admin () restituisce falso allora il admin_notices agganciare i fuochi.

Questo lascia solo il all_admin_notices gancio. Questo hook non fa parte dell'espressione condizionale discussa sopra, quindi questo hook è garantito per la visualizzazione su tutti pagine di amministrazione non importa cosa, comprese le pagine di amministrazione di rete multisito.

Per chiarire, per qualsiasi pagina di amministrazione di WordPress, solo il all_admin_notices il gancio è garantito per sparare sempre. Degli altri tre ganci, solo uno si attiva a seconda della pagina di amministrazione in cui ti trovi attualmente.

Ti incoraggio a dare un'occhiata admin-header.php (verso la fine del file) per vedere di persona come valuta WordPress quando utilizzare ogni hook di avvisi di amministrazione.

Useremo solo admin_notices in questa serie di tutorial, ma potresti scoprire che hai bisogno di alcuni degli altri hook nel tuo progetto, quindi vale la pena di controllarli.

Visualizzazione degli avvisi di amministrazione su pagine specifiche

Rivolgiamo ora la nostra attenzione alla visualizzazione delle notifiche di amministrazione su pagine specifiche. Innanzitutto, commenta la chiamata a add_action quindi i nostri avvisi di test non vengono più visualizzati.

Dentro dentro(), aggiungi un nuovo add_action () chiama che useremo per visualizzare un avviso di amministrazione su una specifica pagina di amministrazione.

add_action ('admin_notices', array ($ this, 'specific_admin_page'));

Quindi definire il specific_admin_page () metodo come segue:

/ ** * Emette un avviso di amministrazione su una specifica schermata di amministrazione. * / public function specific_admin_page () $ admin_page = get_current_screen (); ?> 

Informazioni: attualmente siamo al base; ?> pagina di amministrazione.

Salva le modifiche e visualizza qualsiasi pagina nell'amministratore di WordPress. Proverò la pagina principale del dashboard.

Come puoi vedere, per ogni pagina di amministrazione che visiti, il nome (di base) della pagina viene visualizzato nell'avviso di amministrazione.

Il get_current_screen () la funzione restituisce a WP_Screen oggetto con dettagli sulla schermata di amministrazione corrente. La particolare proprietà dell'oggetto che ci interessa è WP_Screen-> Base, che valuta il tipo di base della schermata corrente. Prova a caricare diverse pagine di amministrazione di WordPress per vedere per quali valori vengono restituiti WP_Screen-> Base.

Possiamo utilizzare il valore di base per caricare condizionalmente la nostra notifica di amministratore solo nella pagina del dashboard. Il valore che dobbiamo controllare è cruscotto. Mostriamo anche un avviso amministrativo alternativo se non ci troviamo nella pagina dashboard dell'amministratore. Sostituisci la tua definizione di specific_admin_page () con:

/ ** * Emette un avviso di amministrazione su una specifica schermata di amministrazione. * / public function specific_admin_page () $ admin_page = get_current_screen (); if ($ admin_page-> base == "dashboard"):?> 

L'abbiamo fatta! Benvenuto nella dashboard.

Dove sei andato? Questo non è il cruscotto!

Va tutto bene quando siamo nella pagina del dashboard, ma prova a navigare verso qualsiasi altra pagina di amministrazione e vedere cosa succede.

L'utilizzo di questo approccio semplice ci dà un po 'di flessibilità quando si visualizzano le notifiche di amministrazione su pagine di amministrazione specifiche. Possiamo facilmente estenderlo per autorizzare qualsiasi numero di pagine di amministrazione su cui vogliamo visualizzare le notifiche di amministrazione.

Ancora una volta, sostituisci il specific_admin_pages () funzione, questa volta con il seguente codice:

/ ** * Emette un avviso di amministrazione su una specifica schermata di amministrazione. * / public function specific_admin_page () $ whitelist_admin_pages = array ('dashboard', 'upload', 'edit-comments'); $ admin_page = get_current_screen (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages)):?> 

L'abbiamo fatta! Questo è il 'base; ?> 'Pagina di amministrazione.

Non sul tuo fratello! Questa pagina non è nella mia lista.

Invece di cercare una singola pagina di amministrazione, ora controlliamo se il nome di base per la pagina di amministrazione corrente è nel $ whitelist_admin_pages array. Quando navighiamo alla dashboard, alla libreria multimediale o alle pagine di amministrazione dei commenti, vediamo la nostra notifica di amministratore di successo.

E quando visitiamo qualunque altra pagina di amministrazione (non inclusa nella nostra matrice whitelist), viene visualizzato un avviso amministrativo alternativo.

Che dire della visualizzazione di un avviso di amministrazione su una pagina di opzioni del plugin? Come potremmo fare? Prima di iniziare, dobbiamo prima impostare una pagina di opzioni fittizie per il nostro plug-in.

Crea un nuovo file chiamato plugin-options.php dentro il admin-comunicazioni cartella di plugin che abbiamo aggiunto in precedenza e aggiungere il seguente codice:

 

Admin Note Plugin

Inserisci del testo
dentro();

In cima a admin-notices.php (direttamente sopra la dichiarazione della classe), includere la classe di opzioni del plugin nel file del plugin principale con:

require_once (dirname (__ FILE__). '/plugin-options.php');

Non entrerò troppo nel dettaglio su come inserire il codice plugin-options.php funziona come quello potrebbe essere un intero tutorial a sé stante! Se vuoi un aggiornamento, ti consiglio di dare un'occhiata alla pagina del codice WordPress sull'aggiunta delle pagine delle opzioni dei plugin.

Fondamentalmente, tutto ciò che stiamo facendo è aggiungere un nuovo Avvisi amministrativi sotto-pagina al impostazioni menu. La pagina delle opzioni del plugin contiene un singolo campo di testo in cui inserire una stringa. Quando il Salva I Cambiamenti viene cliccato il pulsante, i contenuti del campo di testo vengono salvati nel database di WordPress.

Questo è solo un esempio di una pagina delle impostazioni del plugin per la dimostrazione. Non include le funzioni di sanitizzazione o traduzione necessarie per un plug-in di produzione destinato alla versione generale.

Vai a Impostazioni> Avvisi di amministrazione per visualizzare la pagina delle opzioni del plugin.

Come previsto, l'avviso dell'amministratore è stato aggiunto alle visualizzazioni precedenti nella nostra pagina delle opzioni del plugin. Il messaggio di errore viene visualizzato perché la nostra pagina delle opzioni del plugin non si trova in $ whitelist_admin_pages array delle pagine di amministrazione consentite. Risolviamolo ora.

Per aggiungere la nostra pagina di opzioni all'array, è necessario conoscere il nome di base. Dentro specific_admin_page (), cambia l'errore admin notice div al seguente:

Non sul tuo fratello! Questo 'base; ?> 'la pagina non è nella mia lista.

Continuiamo a ricevere lo stesso avviso dell'amministratore di errore di prima, ma questa volta include il nome base di cui abbiamo bisogno, che risulta essere settings_page_admin-comunicazioni / plugin-options. Non è un nome che avremmo potuto indovinare facilmente, quindi valeva la pena dedicare del tempo per produrlo!

Aggiungi il nome di base al $ whitelist_admin_pages array, che dovrebbe ora assomigliare a questo:

$ whitelist_admin_pages = array ('settings_page_admin-notice / plugin-options', 'dashboard', 'upload', 'edit-comments');

Aggiorna la pagina delle opzioni del plug-in per visualizzare l'avviso amministrativo aggiornato.

Ora che conosciamo il nome di base della pagina delle opzioni di plugin, possiamo facilmente creare un avviso di amministrazione che viene visualizzato solo su quella pagina di amministrazione. Rimuovere settings_page_admin-comunicazioni / plugin-options dal $ whitelist_admin_pages array e commentare il secondo add_action chiamata in entrata dentro(). Quindi aggiungi una terza azione che useremo per la nostra pagina delle opzioni di plug-in solo notifica di amministratore. Il tuo dentro() la funzione dovrebbe ora assomigliare a questa:

/ ** * Registrare i ganci. * / public function init () // add_action ('admin_notices', array ($ this, 'test_notice')); // add_action ('admin_notices', array ($ this, 'specific_admin_page')); add_action ('admin_notices', array ($ this, 'plugin_admin_notice'));  

Diamo risalto al plugin_admin_notice () funzione di callback ora. Aggiungi questo nuovo metodo al Gwyer_Admin_Notices classe:

/ ** * Pubblica un avviso di amministrazione nella pagina delle opzioni del plug-in. * / public function plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notice / plugin-options'); $ admin_page = get_current_screen (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages)):?> 

Benvenuti nella pagina del plug-in degli avvisi amministrativi!

Questo è molto simile a specific_admin_page () tranne che abbiamo rimosso l'espressione condizionale. Abbiamo anche aggiunto un pulsante eliminabile aggiungendo il è-dismissible Classe CSS, quindi l'avviso di amministrazione può essere chiuso.


Prova a caricare altre pagine di amministrazione per verificare che l'avviso di amministrazione venga visualizzato solo nella pagina delle opzioni del plug-in.

Conclusione

In questo tutorial, abbiamo imparato di più sulle notifiche di amministrazione e sui vari hook disponibili per la visualizzazione. Abbiamo anche spiegato come visualizzare le notifiche di amministrazione solo su pagine specifiche dell'amministratore di WordPress. Abbiamo sviluppato un plugin dedicato per contenere tutto il codice di notifica dell'amministratore personalizzato.

Nella terza parte, estenderemo ulteriormente il plug-in mostrando come attivare le notifiche di amministrazione quando si verificano determinati eventi. Ricorda, la natura open source di WordPress facilita l'apprendimento e l'estensione. A tal fine, se sei curioso, abbiamo molto da recensire e studiare nel mercato di Envato.

Dopodiché rivolgeremo la nostra attenzione a scoprire come possiamo risolvere il problema persistente della notifica di amministratore in modo che non riappaiano quando la pagina viene aggiornata. Implementeremo diversi metodi nel nostro plug-in personalizzato per consentirci di farlo.