Avvisi di amministratore WordPress persistenti parte 3

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.

Controllo quando vengono visualizzate le informazioni sull'amministratore

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 Se Impostazioni aggiornate è impostato per vero.

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:

  • Avviso di amministrazione una tantum che scompare dopo una vista.
  • Un contatore avviso amministratore che scompare dopo un certo numero di visualizzazioni.
  • Avviso di amministratore appiccicoso che rimane ignorato all'aggiornamento della pagina.
  • Licenziamento di azioni personalizzate (avviso di amministrazione rimosso dopo che un'azione specifica è stata completata).

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.

Avviso di amministrazione One-Off

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 il register_activation_hook () e add_action () chiamate di funzione. Ora impostiamo un avviso di amministrazione di base che estenderemo la funzionalità a breve.

Aggiungi un nuovo add_action () chiamare dentro():

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 a display_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 a 5 e aggiungi una nuova proprietà di classe:

pubblico $ counter_reset = false;

Quindi, dentro dentro() sostituire

add_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 a falso per avviare nuovamente il contatore degli avvisi admin.

Per utilizzare la nuova funzionalità di ripristino, è sufficiente cambiare $ counter_reset a vero 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.