Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

I messaggi di notifica permanenti nell'area admin di WordPress: Parte 3

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Persisted WordPress Admin Notices.
Persisted WordPress Admin Notices: Part 2
Persisted WordPress Admin Notices: Part 4

Italian (Italiano) translation by Cinzia Sgariglia (you can also view the original English article)

Bentornati alla nostra serie sui messaggi di notifica permanenti nell'area admin di WordPress. Ora siamo in una buona posizione per essere in grado di estendere la funzionalità dei nostri messaggi e controllare quando appaiono nella pagina.

Dopo di che, siamo passati agli avvisi permanenti e abbiamo visto come potete assicurarvi che siano ignorati in modo che non riappaiono quando le pagine di amministrazione vengono ricaricate.

Ciò è particolarmente importante poiché gli avvisi personalizzati implementati nei plugin e nei temi sono davvero utili solo quando è possibile ignorarli definitivamente. Non è sufficiente aggiungere semplicemente la classe CSS is-dismissible.

Controllare quando gli avvisi vengono visualizzati

Fino a ora, tutti gli avvisi sono stati visualizzati non appena la pagina viene caricata. Ci possono essere momenti nei quali questo è scomodo e si desidera che l'avviso sia visualizzato, invece, dopo che un certo evento è stato attivato.

E se volevamo un avviso personalizzato da visualizzare nella pagina opzioni del plugin che abbiamo creato in precedenza, ma solo dopo che è stato fatto clic sul pulsante Salva modifiche?

Sappiamo già dalla seconda parte come limitare un avviso alla pagina delle opzioni del plugin. Scopriamo come possiamo attivarlo per farli apparire dopo che sono state salvate le opzioni del plugin.

Iniziate commentando la chiamata alla funzione add_action di plugin_admin_notice. Quindi, aggiungete una quarta chiamata add_action a init come segue:

Ogni volta che vengono salvate le opzioni del plugin, un valore true di settings-updated viene aggiunto alla variabile array super globale $_GET. Possiamo usarla per determinare se ne abbiamo bisogno per visualizzare il nostro avviso.

Aggiungere un nuovo metodo conditional_plugin_admin_notice a Gwyer_Admin_Notices che restituisce il valore di $_GET sullo schermo.

Quando viene caricata la pagina delle opzioni del plugin normalmente non vediamo un valore impostato per le impostazioni aggiornate.

Normal Plugin Options Page Loading

Ora immettete del testo nel campo Inserisci il testo e fate clic su Salva modifiche. Questa volta, vediamo settings-updated impostato su true, che possiamo sfruttare al meglio.

The settings-updated value set to true

Sostituite conditional_plugin_admin_notice con:

Ormai, questo codice dovrebbe esservi familiare. Però, un paio di nuove funzionalità sono state aggiunte. In primo luogo, l'espressione condizionale è stata estesa per verificare la presenza di settings-update. Ora, l'avviso verrà visualizzato solo se siamo nella pagina delle opzioni del plugin e se settings-update è impostato su true.

Inoltre, il nome dell'utente corrente è dato in output per rendere l'avviso un po' più personale.

A more personal admin notice message

La funzione wp_get_current_user() restituisce le informazioni relative all'utente attualmente collegato. Questo oggetto viene memorizzato in $current_user e contiene dettagli quali email dell'utente, l'ID, il nome, il cognome e il nome visualizzato, che è la particolare proprietà che ci interessa.

Infine, per un piccolo extra impeccabile, abbiamo impedito all'avviso predefinito di visualizzarsi così il nostro personalizzato è l'unico visibile all'utente. Per raggiungere questo obiettivo, abbiamo solo aggiunto una sola riga di codice a conditional_plugin_admin_notice() all'output del  CSS per nascondere l'avviso indesiderato.

Il risultato finale quando vengono salvate le opzioni del plugin è mostrato qui sotto.

The finished admin notice to show the plugin has been updated

Mentre questo funziona bene per scopi dimostrativi, un approccio migliore (e più pulito) sarebbe di aggiungere gli stili in un foglio di stile separato invece e di accodarlo solo alla pagina delle opzioni del plugin.

Il nostro avviso personalizzato potrebbe essere esteso ulteriormente in un certo numero di modi. Una possibilità potrebbe essere di mantenere un log che memorizzi la data/ora corrente insieme alle informazioni dell'utente ogni volta che sono state salvate le opzioni del plugin.

O che ne dite di prendere l'avviso per visualizzare quante volte le opzioni del plugin sono state salvate quel giorno, settimana, mese, ecc.? Sono sicuro che pensare anche a molti altri altri esempi!

Ignorare gli avvisi permanenti efficacemente

È il momento di sporcarci le mani ora e scavare nel codice più in profondità poiché rivolgiamo la nostra attenzione all'ignorare gli avvisi permanenti. Fino ad ora, l'unico modo che abbiamo visto per effettuare questa operazione consiste nell'aggiungere la classe CSS .is-dismissible al nostro contenitore div dell'avviso. Questo ignora l'avviso della pagina corrente, ma non è molto usato in pratica poiché riappare quando viene ricaricata una pagina admin.

Così come possiamo risolverlo? Vedremo diversi metodi per ignorare gli avvisi permanenti, inclusi:

  • Avviso una tantum che scompare dopo una singola visita.
  • Un contatore per gli avvisi che scomparirà dopo un certo numero di visite.
  • Avviso fisso che resta ignorato all'aggiornamento della pagina.
  • Ignorare l'azione personalizzata (avviso rimosso dopo che un'azione specifica è stata completata).

Prima di iniziare a implementare ciascuno di questi esempi, assicuratevi che tutte le chiamate di add_action() in Gwyer_Admin_Notices::init() siano state commentate. Quindi aggiungete un nuovo file dismissible-admin-notices.php alla cartella del plugin admin_notices. Aprite il nuovo file e aggiungete una nuova definizione di classe:

In admin_notices.php, aggiungete un'altra chiamata require_once() per importare la nostra nuova classe:

La classe Gwyer_Dismissible_Admin_Notices contiene tutto il codice relativo all'ignorare gli avvisi permanenti.

Avviso una tantum

Il primo metodo che guarderemo è come visualizzare un avviso solo una volta, cosicché non si ripresenti al caricamento della pagina. Potreste utilizzare questo metodo per notificare a un utente quando un plugin o un tema è appena stato attivato.

Facciamolo per il nostro plugin per gli avvisi. Inizieremo con la registrazione di un'opzione di WordPress transient al momento dell'attivazione del plugin che è impostato per scadere quasi immediatamente.

Nella classe Gwyer_Dismissible_Admin_Notices, aggiungete una chiamata a register_activation_hook():

La funzione register_activation_hook() richiede di specificare il percorso del file del plugin principale, ma siamo attualmente in dismissible-admin-notices.php. Quindi, non possiamo solo usare la magica costante di PHP __FILE__ che abbiamo usato in precedenza poiché punta sempre al file PHP corrente.

Invece, dobbiamo costruire il percorso al file principale del plugin noi stessi utilizzando plugin_dir_path( __FILE__ ) . 'admin-notices.php'.

Quando viene attivato il plugin degli avvisi, verrà eseguito il codice aggiunto al metodo della classe set_admin_notice_transient, che definiremo dopo.

Questo metodo crea un nuovo transient chiamato 'admin-notice-transient' con un valore true ed è impostato per scadere dopo cinque secondi.

Facciamo uso di questo transient a determinate condizioni visualizzando un avviso se siamo sulla pagina di amministrazione giusta e il nostro transient esiste ancora.

Aggiungete una nuova chiamata add_action() a init().

Quindi, aggiungete la funzione di callback display_admin_notice come un nuovo metodo di classe:

Analogamente agli esempi precedenti, l'avviso viene visualizzato solo se siamo su una pagina specifica — in questo caso, la pagina principale del plugin di admin. Ma abbiamo una condizione aggiuntiva che anche il 'admin-notice-transient' deve esistere, altrimenti non visualizzerà l'avviso.

Dopo che è dato in output  l'avviso, il transient viene eliminato immediatamente, anche se abbiamo inizialmente impostato che scada dopo solo cinque secondi. Questo modo assicura  solo che non verrà mostrato nuovamente. Questo potenzialmente potrebbe accadere se un utente ha tentato di aggiornare la pagina del plugin molto rapidamente. Ma eliminando deliberatamente il transient, possiamo essere certi che questo non accadrà mai.

Per verificare il codice che abbiamo appena aggiunto, andate alla pagina dei principali plugin pagina e disattivate, quindi riattivate, il plugin degli avvisi.

The one-off admin notice

La chiave qui è l'impostazione del transient 'admin-notice-transient'. Senza di questo, l'avviso apparirebbe ogni volta che la pagina del plugin si è caricata (dopo che il plugin è stato attivato), che non è quello che vogliamo.

Un contatore per gli avvisi

Il prossimo è un avviso che si visualizzerà solo un numero di volte, dopo di che non sarà più visibile. Inoltre, stavolta non sarà limitato a una pagina particolare.

Prima di cominciare, nella classe Gwyer_Dismissible_Admin_Notices, commentate le chiamate alle funzioni register_activation_hook() e add_action(). Ora impostiamo un avviso base di cui estenderemo la funzionalità tra poco.

Aggiungete una nuova chiamata add_action() in init():

E poi arricchiamo la funzione di callback display_admin_notice_counter():

Questo visualizzerà un avviso standard che verrà visualizzato in ogni pagina di admin di WordPress.

Standard admin notice ready for customisation

Pensiamo a che cosa dobbiamo fare. Il nostro avviso deve visualizzarsi un determinato numero di volte e ogni volta appare un contatore interno che è aumentato di uno. Una volta che è stato raggiunto il limite del contatore, l'avviso non dovrebbe apparire di nuovo.

Vogliamo che l'avviso sia visualizzato su qualsiasi pagina di admin e quindi il valore del contatore deve perdurare tra il caricamento della pagina. Un buon modo di farlo è di utilizzare un'opzione di database per memorizzare il valore del contatore.

Aggiungete una proprietà di classe del contatore per memorizzare il valore limite del contatore:

Questo servirà a breve per gestire quante volte viene visualizzato l'avviso. All'interno di display_admin_notice_counter(), aggiornate il codice come segue:

Prima che l'avviso di amministrazione viene visualizzato, stiamo recuperando l'opzione del contatore e viene restituito un valore predefinito se ancora non esiste. Dopo che l'avviso esegue il rendering, l'opzione del contatore è aumentata di uno e aggiornato. Se non esiste quindi una nuova opzione verrà creata per memorizzare il valore corrente.

Abbiamo anche aggiornato la classe CSS per essere un avviso di informazione.

Provate a visitare varie pagine di admin e vedete il contatore aumentare ogni volta.

Counter admin notice in action

Il codice ++$counter è un esempio di un operatore di pre-incremento. Aggiunge un valore a $counter prima che venga salvato nel database. Se abbiamo utilizzato un operatore di post-incremento (cioè $counter++) allora il valore di $counter sarebbe archiviato prima e poi aumentato, cosa che non avrebbe funzionato.

Incorporiamo $counter_limit ora per evitare che l'avviso appaia troppe volte. Aggiungete questo a display_admin_notice_counter() sotto la dichiarazione di $counter:

Ora, una volta che l'avviso è visualizzato cinque volte, non sarà visibile sulle successive pagine di admin. Sarebbe bello, però, visualizzare un messaggio l'ultima volta che l'avviso appare in modo che l'utente sappia che non apparirà di nuovo. Estendete l'espressione condizionale e inviate un ulteriore messaggio:

Tuttavia, non vedrete il messaggio se siete già andati oltre il limite del contatore. Potete risolvere temporaneamente questo aumentando la variabile $counter_limit.

Display an additional message on the final render

Per scopi di test, sarebbe meglio essere in grado di azzerare il limite del contatore. Se sapete come modificare il database, potete entrare e modificare l'opzione direttamente, ma questo può essere noioso da fare più volte. Quindi implementiamo nostra funzione di reset.

In primo luogo, modificate di nuovo $counter_limit a 5 e aggiungete una nuova proprietà di classe:

Quindi, all'interno di init() sostituite

con

La funzione di reset dovrebbe o mostrare il nostro contatore dell'avviso o eliminare l'opzione del database admin_notice_counter e invece visualizzare un avviso di avvertimento.

Per utilizzare la nuova funzionalità di reset, è sufficiente modificare $counter_reset a true e caricare qualsiasi pagina di admin.

Reset admin notice counter

Quindi cambiate nuovamente su false.

Admin notice counter successfully reset

Nota: Questo metodo potrebbe facilmente essere utilizzato per visualizzare un avviso solo una volta, come abbiamo fatto nell'esempio precedente, ma è leggermente più complicato da configurare. Dipende molto dalle vostre esigenze.

Se tutto ciò di cui avete bisogno è un singolo uso dell'avviso allora il metodo precedente probabilmente soddisfa le vostre esigenze meglio ed è più veloce da implementare. Ma il metodo del contatore è più flessibile e una volta istituito, è altrettanto facile da usare nei vostri progetti.

Conclusione

Abbiamo coperto un'area ampia nella terza parte di questa serie di tutorial. Abbiamo visto come controllare quando gli avvisi appaiono piuttosto che apparire sempre solo quando una pagina di admin ha completato il caricamento. Questo è utile in molti modi, ma il nostro esempio ha mostrato come visualizzare un avviso personalizzato dopo che erano state salvate le opzioni del plugin.

Poi, ci siamo spostati su due distinti esempi sull'ignorare gli avvisi permanenti. Questo vi dà un sacco di flessibilità su come presentate gli avvisi all'utente. E nella parte successiva e finale di questa serie di tutorial, ci vedremo altri modi per ignorare gli avvisi permanenti.

E, per un po' di divertimento, creeremo il nostro tipo di avviso personalizzato e aggiungeremo le decorazioni con icone.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.