Bentornati alla nostra serie su notifiche amministrative persistenti su WordPress. Siamo ora in una buona posizione per poter estendere la funzionalità e il controllo dell'avviso di amministrazione quando compaiono sulla pagina.
Dopodiché, passeremo alle notifiche di amministratore persistenti e vediamo come puoi assicurarti che vengano ignorate in modo tale che non riappaiono quando le pagine di amministrazione vengono ricaricate.
Ciò è particolarmente importante in quanto le notifiche di amministrazione personalizzate implementate nei plug-in e i temi sono utili solo quando è possibile eliminarli definitivamente. Non è sufficiente aggiungere semplicemente il è-dismissible
Classe CSS.
Fino ad ora, tutte le notifiche di amministrazione sono state visualizzate non appena la pagina viene caricata. Ci possono essere momenti in cui questo è inopportuno e si desidera che venga visualizzata la notifica di amministratore dopo al suo posto è stato attivato un determinato evento.
Che ne dici se vogliamo che venga visualizzata una notifica di amministratore personalizzata nella pagina delle opzioni del plug-in che abbiamo creato in precedenza, ma solo dopo il Salva I Cambiamenti pulsante è stato fatto clic?
Sappiamo già dalla seconda parte come limitare un avviso di amministrazione alla pagina delle opzioni del plugin. Scopriamo come possiamo attivarlo per apparire dopo che le opzioni del plugin sono state salvate.
Inizia commentando il add_action
chiamata di funzione per plugin_admin_notice
. Quindi, aggiungi un quarto add_action
chiamare dentro
come segue:
add_action ('admin_notices', array ($ this, 'conditional_plugin_admin_notice'));
Ogni volta che vengono salvate le opzioni del plugin, a Impostazioni aggiornate
valore di vero
è aggiunto al super globale $ _GET
variabile dell'array. Possiamo usare questo per determinare se abbiamo bisogno di visualizzare la nostra notifica di amministratore.
Aggiungi un nuovo conditional_plugin_admin_notice
metodo a Gwyer_Admin_Notices
che emette il valore di $ _GET
sullo schermo.
/ ** * Emette un avviso di amministrazione nella pagina delle opzioni del plug-in quando le impostazioni sono state salvate. * / public function conditional_plugin_admin_notice () echo ""; print_r ($ _ GET); echo"";
Quando la pagina delle opzioni del plugin viene caricata normalmente, non viene visualizzato un valore impostato per le impostazioni aggiornate.
Ora inserisci del testo nel Inserisci del testo campo e fare clic Salva I Cambiamenti. Questa volta, vediamo Impostazioni aggiornate
impostato vero
, che possiamo mettere a frutto.
Sostituisci il conditional_plugin_admin_notice
con:
/ ** * Emette un avviso di amministrazione nella pagina delle opzioni del plug-in quando le impostazioni sono state salvate. * / public function conditional_plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notice / plugin-options'); $ admin_page = get_current_screen (); $ current_user = wp_get_current_user (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages) && isset ($ _GET ['settings-updated']) && $ _GET ['settings-updated']):?>Opzioni del plugin appena salvate. nome da visualizzare; ?>, sei così fantastico!
A questo punto, questo codice dovrebbe sembrarti familiare. Sono state aggiunte un paio di nuove funzionalità. Innanzitutto, l'espressione condizionale è stata estesa per verificare la presenza di
impostazioni-update
. Ora, l'avviso di amministrazione verrà visualizzato solo se siamo nella pagina delle opzioni del plug-in e SeImpostazioni aggiornate
è impostato pervero
.Inoltre, il nome visualizzato dell'utente corrente viene emesso per rendere l'avviso dell'amministratore un po 'più personale.
Il
wp_get_current_user ()
funzione restituisce informazioni sull'utente attualmente loggato. Questo oggetto è memorizzato in$ current_user
e contiene dettagli come l'email, l'ID, il nome, il cognome e il nome visualizzato dell'utente, che è la particolare proprietà a cui siamo interessati.Infine, per un po 'di lucidità extra, abbiamo impedito la visualizzazione della notifica di amministrazione predefinita in modo che la nostra personalizzata fosse l'unica visibile all'utente. Per ottenere ciò, abbiamo appena aggiunto una singola riga di codice a
conditional_plugin_admin_notice ()
per generare CSS per nascondere l'avviso amministrativo indesiderato.eco "";Il risultato finale quando le opzioni del plugin sono salvate è mostrato sotto.
Anche se questo funziona bene a scopo dimostrativo, un approccio migliore (e più pulito) sarebbe quello di aggiungere stili ad un foglio di stile separato invece di accodarlo solo nella pagina delle opzioni del plugin.
Il nostro avviso di amministrazione personalizzato potrebbe essere esteso ulteriormente in diversi modi. Una possibilità potrebbe essere quella di mantenere un registro che memorizza la data / ora corrente insieme alle informazioni dell'utente ogni volta che le opzioni del plugin sono state salvate.
O che ne dici di ricevere l'avviso di amministrazione per mostrare quante volte le opzioni del plugin sono state salvate quel giorno, settimana, mese, ecc.? Sono sicuro che puoi pensare anche a più esempi!
Ignorare in modo efficace gli avvisi di amministrazione persistenti
È ora di sporcarsi le mani ora e di scavare in un codice più approfondito mentre rivolgiamo la nostra attenzione al licenziamento di avvisi di amministrazione persistenti. Fino ad ora, l'unico modo in cui abbiamo visto come fare questo è aggiungere il
.è-dismissible
Classe CSS per il nostro contenitore di notifica preavviso admin. Ciò disattiva l'avviso di amministrazione per la pagina corrente, ma in pratica non è molto utile in quanto riappare quando viene ricaricata una pagina di amministrazione.Quindi, come possiamo risolvere questo? Vedremo diversi metodi per ignorare le notifiche di amministratore persistenti, tra cui:
Prima di iniziare a implementare ognuno di questi esempi, assicurati di tutto add_action ()
chiama Gwyer_Admin_Notices :: init ()
sono stati commentati Quindi aggiungi un nuovo dismissible-admin-notices.php
file al admin_notices
cartella dei plugin. Apri questo nuovo file e aggiungi una nuova definizione di classe:
dentro();
Nel admin_notices.php
, Aggiungi un altro require_once ()
chiama per importare la nostra nuova classe:
require_once (dirname (__ FILE__). '/dismissible-admin-notices.php');
Il Gwyer_Dismissible_Admin_Notices
la classe conterrà tutto il codice relativo al licenziamento delle notifiche di amministrazione persistenti.
Il primo metodo che vedremo è come visualizzare un avviso di amministrazione una sola volta in modo che non riappaia al caricamento della pagina. È possibile utilizzare questo metodo per notificare a un utente quando è stato appena attivato un plug-in o un tema.
Facciamo questo per il nostro plugin per gli avvisi amministrativi. Inizieremo registrando un'opzione transitoria di WordPress sull'attivazione del plug-in che è impostata per scadere quasi immediatamente.
Nel Gwyer_Dismissible_Admin_Notices
classe, aggiungi una chiamata a register_activation_hook ()
:
register_activation_hook (plugin_dir_path (__FILE__). 'admin-notices.php', array ($ this, 'set_admin_notice_transient'));
Il register_activation_hook ()
la funzione richiede di specificare il percorso del file del plugin principale, ma al momento ci troviamo dismissible-admin-notices.php
. Quindi non possiamo semplicemente usare la costante magica di PHP __FILE__
abbiamo usato in precedenza in quanto questo punta sempre al file PHP corrente.
Invece, dobbiamo costruire il percorso del file plugin principale che usiamo plugin_dir_path (__FILE__). 'Admin-notices.php'
.
Quando il plug-in Admin Notices è attivato, verrà eseguito il codice aggiunto a set_admin_notice_transient
metodo di classe, che definiremo in seguito.
funzione pubblica set_admin_notice_transient () set_transient ('admin-notice-transient', true, 5);
Questo metodo crea un nuovo transiente chiamato 'Admin-notice-transient'
con un valore di vero
, ed è impostato per scadere dopo cinque secondi.
Facciamo uso di questo transitorio visualizzando condizionatamente un avviso di amministrazione se siamo nella pagina di amministrazione giusta e il nostro transitorio esiste ancora.
Aggiungi un nuovo add_action ()
chiama a dentro()
.
add_action ('admin_notices', array (& $ this, 'display_admin_notice'));
Quindi, aggiungi il display_admin_notice
funzione di callback come nuovo metodo di classe:
public function display_admin_notice () $ current_user = wp_get_current_user (); $ whitelist_admin_pages = array ('plugins'); $ admin_page = get_current_screen (); if (in_array ($ admin_page-> base, $ whitelist_admin_pages) && get_transient ('admin-notice-transient')):?>Il Avvisi amministrativi il plugin è stato appena attivato. Grazie per il vostro sostegno nome da visualizzare; ?>!
Analogamente agli esempi precedenti, l'avviso di amministrazione viene visualizzato solo se ci si trova su una pagina specifica, in questo caso la pagina dei plug-in di amministrazione principale. Ma abbiamo una condizione aggiuntiva che il
'Admin-notice-transient'
deve anche esistere, altrimenti l'avviso di amministrazione non verrà visualizzato.Dopo che l'avviso di amministrazione è stato emesso, il transitorio viene eliminato immediatamente, anche se inizialmente lo impostiamo per scadere dopo soli cinque secondi. Questo assicura che non verrà più mostrato. Ciò potrebbe potenzialmente accadere se un utente ha tentato di aggiornare la pagina dei plugin molto rapidamente. Ma eliminando deliberatamente il transitorio, possiamo essere certi che questo non sarà mai il caso.
Per testare il codice che abbiamo appena aggiunto, andare sulla pagina dei plugin principali e disattivare, quindi riattivare, il plugin di Admin Notices.
La chiave qui è la
'Admin-notice-transient'
impostazione transitoria. Senza questo, l'avviso di amministrazione apparirebbe ogni volta che la pagina dei plugin viene caricata (dopo che il plugin è stato attivato), che non è quello che vogliamo.Contatore note amministrative
Il prossimo è un avviso dell'amministratore che visualizzerà solo un determinato numero di volte, dopo di che non sarà più visibile. Inoltre, questa volta non sarà limitato a nessuna particolare pagina di amministrazione.
Prima di iniziare, nel
Gwyer_Dismissible_Admin_Notices
classe, commentare ilregister_activation_hook ()
eadd_action ()
chiamate di funzione. Ora impostiamo un avviso di amministrazione di base che estenderemo la funzionalità a breve.Aggiungi un nuovo
add_action ()
chiamaredentro()
:add_action ('admin_notices', array (& $ this, 'display_admin_notice_counter'));E poi estendere la funzione di callback
display_admin_notice_counter ()
:public function display_admin_notice_counter () ?>Contronotifica dell'amministratore.
Questo mostrerà un avviso di amministrazione standard che apparirà su ogni pagina di amministrazione di WordPress.
Pensiamo a ciò che dobbiamo fare. Il nostro avviso di amministratore dovrebbe mostrare un numero di volte stabilito, e ogni volta che appare un contatore interno viene aumentato di uno. Una volta raggiunto il limite del contatore, l'avviso di amministrazione non dovrebbe apparire più.
Vogliamo che l'avviso di amministrazione venga visualizzato su qualsiasi pagina di amministrazione e quindi il valore del contatore deve persistere tra i carichi di pagina. Un buon modo per farlo è utilizzare un'opzione del database per memorizzare il valore del contatore.
Aggiungi una proprietà della classe contatore per memorizzare il valore limite del contatore:
public $ counter_limit = 5;Questo verrà utilizzato a breve per gestire quante volte appare l'avviso di amministrazione. Dentro
display_admin_notice_counter ()
, aggiornare il codice come segue:public function display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); ?>Questo avviso di amministratore è stato visualizzato volte).
Prima che venga visualizzata l'avviso di amministrazione, recuperiamo l'opzione contatore e viene restituito un valore predefinito se non esiste ancora. Dopo il riepilogo dell'avviso di amministrazione, l'opzione contatore viene aumentata di uno e aggiornata. Se non esiste, verrà creata una nuova opzione per memorizzare il valore corrente.
Abbiamo anche aggiornato la classe CSS per essere un avviso di amministrazione delle informazioni.
Prova a visitare varie pagine di amministrazione e guarda il contatore aumentare ogni volta.
Il
++$ contatore
il codice è un esempio di operatore pre-incremento. Aggiunge un valore a$ contatore
prima è salvato nel database. Se abbiamo usato un operatore di post-incremento (es.$ contatore++
) quindi il valore di$ contatore
sarebbe memorizzato prima e poi aumentato, che non avrebbe funzionato.Incorporiamo
$ counter_limit
ora per evitare che l'avviso di amministrazione compaia troppe volte. Aggiungi questo adisplay_admin_notice_counter ()
sotto la dichiarazione per$ contatore
:if ($ counter> $ this-> counter_limit) return;Ora, una volta che l'avviso di amministrazione è stato visualizzato cinque volte, non sarà visibile nelle pagine di amministrazione successive. Potrebbe essere carino, tuttavia, visualizzare un messaggio l'ultima volta che viene visualizzata l'avviso di amministrazione, in modo che l'utente sappia che non verrà più visualizzato. Estendi l'espressione condizionale e genera un messaggio aggiuntivo:
public function display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); if ($ counter> $ this-> counter_limit) return; else if ($ counter == $ this-> counter_limit) $ extra_message = "È ora di dire addio."; ?>Questo avviso di amministratore è stato visualizzato volte).
Tuttavia, non vedrai il messaggio se hai già superato il limite del contatore. Puoi risolvere temporaneamente questo problema aumentando il
$ counter_limit
variabile.A scopo di test, sarebbe meglio essere in grado di resettare il limite del contatore. Se sai come modificare il database, puoi entrare e modificare direttamente l'opzione, ma questo può essere noioso da fare più volte. Quindi implementiamo la nostra funzione di ripristino.
Innanzitutto, cambia
$ counter_limit
di nuovo a5
e aggiungi una nuova proprietà di classe:pubblico $ counter_reset = false;Quindi, dentro
dentro()
sostituireadd_action ('admin_notices', array (& $ this, 'display_admin_notice_counter'));con
$ This-> reset_counter_check ();La funzione di ripristino dovrebbe mostrare la nostra notifica di amministratore del contatore o eliminare il
admin_notice_counter
opzione del database e visualizza invece un avviso di avviso.funzione pubblica reset_counter_check () if (! $ this-> counter_reset) add_action ('admin_notices', array (& $ this, 'display_admin_notice_counter')); else delete_option ('admin_notice_counter'); ?>Il contatore delle notifiche amministrative è stato ripristinato! Modificare
$ counter_reset
afalso
per avviare nuovamente il contatore degli avvisi admin.Per utilizzare la nuova funzionalità di ripristino, è sufficiente cambiare
$ counter_reset
avero
e carica qualsiasi pagina di amministrazione.Quindi cambiarlo in
falso
ancora.Nota: questo metodo potrebbe essere facilmente utilizzato per visualizzare un avviso di amministrazione solo una volta, come abbiamo fatto nell'esempio precedente, ma è leggermente più complicato da configurare. Dipende davvero dalle tue esigenze.
Se tutto ciò di cui hai bisogno è un avviso di amministratore monouso, il metodo precedente probabilmente si adatta meglio alle tue esigenze ed è più veloce da implementare. Ma il metodo contatore è più flessibile e, una volta impostato, è altrettanto facile da usare nei propri progetti.
Conclusione
Abbiamo coperto un sacco di argomenti nella terza parte di questa serie di tutorial. Abbiamo visto come controllare quando appaiono le notifiche di amministratore piuttosto che apparire sempre non appena una pagina di amministrazione ha terminato il caricamento. Questo è utile in molti modi, ma il nostro esempio mostra come visualizzare un avviso di amministrazione personalizzato dopo che le opzioni del plugin sono state salvate.
Quindi, passammo a due esempi distinti di ignorare le notifiche di amministratore persistenti. Questo ti dà molta flessibilità nel modo in cui presenti le notifiche di amministrazione all'utente. E nella prossima e ultima parte di questa serie di tutorial, vedremo più modi per eliminare le notifiche di amministratore persistenti.
E, per un po 'di divertimento, creeremo i nostri tipi di avviso di amministrazione personalizzati e aggiungere decorazioni per icone.