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

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

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

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

Nella prima parte di questa serie, abbiamo imparato come implementare un avviso di base che appare nella parte superiore di ogni pagina di admin di WordPress. In questo tutorial, inizieremo a costruire un plugin per contenere tutto il nostro codice degli avvisi personalizzato.

Inizieremo implementando gli avvisi standard e utilizzandoli come base per gli esempi più flessibili e avanzati.

Impostiamo il nostro Plugin

Prima, però, creiamo un nuovo plugin da zero che useremo per tutti i nostri avvisi quindi siamo pronti per iniziare a inserire il codice.

Immagino qui che avete già un sito di sviluppo WP locale impostato. Se no potete fare riferimento ai collegamenti nella prima parte di questa serie di tutorial.

Create una nuova cartella per il plugin chiamata admin_notices dentro /wp-content/plugins/ e quindi create un file admin_notices.php che sarà il file principale del plugin.

Aprite admin_notices.php nel vostro editor preferito e aggiungete la struttura di base del plugin:

Abbiamo aggiunto un'intestazione al plugin di base così WordPress riconosce il nostro plugin. Questa è seguita da una classe che conterrà i metodi per visualizzare i nostri avvisi.

Ho chiamato la classe Gwyer_Admin_Notices per cercare di renderla più unica possibile. In questo modo, è molto meno probabile entrare in conflitto con un nome di classe esistente.

Iniziamo a visualizzare un avviso di base e quindi aggiungiamolo a esso per renderlo più utile. Per creare un avviso, aggiungete l'hook admin_notices alla funzione init():

L'hook include una funzione di callback test_notice che verrà utilizzata per generare il markup dell'avviso.

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

Attivate il plugin per visualizzare l'avviso di prova.

Adding a basic admin notice to our plugin

Aggiungiamo anche esempi di altri tipi di avviso che possiamo visualizzare compreso il tipo ignorabile aggiungendo la classe CSS is-dismissible. Aggiungete questi elementi al metodo test_notice() sotto il div di avviso esistente:

Full set of admin notice types

Questa è la gamma completa dei tipi di avviso che possiamo visualizzare tramite le classi CSS core di WordPress. Ricordate, però, che l'avviso ignorabile riapparirà a ogni caricamento di pagina!

L'avviso 'ignorabile' in questo contesto ha valore solo per la pagina corrente. Avere avvisi permanenti non è molto flessibile, così più tardi cercheremo nello specifico modi diversi con cui potete ignorare in modo efficace le vostre notifiche.

Hook dell'avviso

Finora, abbiamo usato solo l'hook admin_notice per implementare un avviso. Ci sono infatti quattro hook separati di avviso che è possibile utilizzare per visualizzare le notifiche, ma admin_notice è quello più comunemente usato.

I quattro hook disponibili sono:

* Alcuna documentazione ufficiale attualmente disponibili per questi hook.

Così dove usate in genere all_admin_notices, user_admin_notices e network_admin_notices? E come si differenziano da admin_notices?

Ho detto in precedenza che l'hook admin_notices visualizza le notifiche su tutte le pagine di amministrazione, ma questo non è rigorosamente vero. Se si dà un'occhiata a admin-header.php nel core di WordPress, vedrete che admin_notices, network_admin_notices e user_admin_notices si escludono a vicenda. Cioè, solo uno di questi hook viene attivato su una pagina di WordPress admin.

Una serie di espressioni condizionali valuta l'attuale pagina di admin e lancia solo uno di loro a seconda del tipo di pagina admin sulla quale siete attualmente.

In primo luogo, is_network_admin() controlla per vedere se siete in una schermata di amministrazione di rete (ad es. qualsiasi pagina di amministrazione basato su /wp-admin/network/URL). Se è così, lancia l'hook network_admin_notices.

In caso contrario, is_user_admin() controlla per vedere se siete su una schermata admin utente (ad es. qualsiasi pagina di amministrazione basato su /wp-admin/user/URL). Se è così, lancia l'hook user_admin_notices.

E, come potete immaginare, se sia is_network_admin() che is_user_admin() restituiscono false quindi lanciano l'hook admin_notices.

Ciò lascia solo l'hook all_admin_notices. Questo hook non è parte dell'espressione condizionale discussa in precedenza, quindi questo hook garantisce di visualizzare su tutte le pagine di admin non importa cosa, incluse le pagine multisito di admin di rete.

Per chiarire, per ogni pagina di admin di WordPress, solo l'hook all_admin_notices garantisce sempre il lancio. Fuori gli altri tre hook, solo uno sarà lanciato a seconda della pagina admin su cui siete attualmente.

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

Useremo solo admin_notices in tutta questa serie di tutorial, ma è probabile che avrete bisogno per alcuni dei altri hook nel vostro progetto, quindi vale la pena controllarli.

Visualizzare gli avvisi su pagine specifiche

Portiamo la nostra attenzione ora alla visualizzazione di avvisi su determinate pagine. In primo luogo, commentate la chiamata ad add_action così i nostri avvisi di prova non vengono visualizzati in più.

All'interno di init(), aggiungete una nuova chiamata add_action() che utilizzeremo per visualizzare un avviso su una pagina di amministrazione specifica.

Quindi definite il metodo specific_admin_page() come segue:

Salvate le modifiche e visualizzate qualsiasi pagina in amministrazione di WordPress. Proverò con la pagina bacheca principale.

Dashboard admin notice

Come potete vedere, per qualsiasi pagina admin che si visita, il nome (base) della pagina viene visualizzato nell'avviso.

La funzione get_current_screen() restituisce un oggetto WP_Screen con dettagli sulla schermata corrente di admin. La proprietà particolare dell'oggetto a cui siamo interessati è WP_Screen-> base, che restituisce il tipo di base della schermata corrente. Tentate di caricare diverse pagine di admin di WordPress per vedere quali valori vengono restituiti per WP_Screen-> base.

Possiamo usare il valore di base per caricare in modo condizionale il nostro avviso solo nella pagina bacheca. Il valore che abbiamo bisogno di controllare è dashboard. Inoltre mostriamo un avviso alternativo se non siamo nella pagina di admin bacheca. Sostituite la definizione di specific_admin_page() con:

Output base name of current admin page in the admin notice

Tutto va bene quando siamo nella pagina bacheca, ma provate a navigare su qualsiasi altra pagina di admin e vedete cosa succede.

Error type admin notice shown when were not on the expected admin page

Utilizzare questo semplice approccio ci dà un po' di flessibilità durante la visualizzazione di avvisi su specifiche pagine. Possiamo facilmente estendere questo per inserire in una whitelist qualsiasi numero di pagine di admin su cui vogliamo mostrare avvisi.

Ancora una volta, sostituite la funzione specific_admin_pages(), questa volta con il codice riportato di seguito:

Invece di controllare per una pagina singola admin, ora controlliamo per vedere se il nome di base la pagina attuale è nella matrice $whitelist_admin_pages. Quando navighiamo alla bacheca, la libreria multimediale o le pagine commenti, vediamo il nostro avviso con successo.

Our success message shows on the admin comments page

E quando visitiamo qualsiasi altra pagina admin (non inclusa nel nostro array whitelist), vediamo un avviso alternativo.

Only allowed admin pages show the success message

E circa il visualizzare un avviso una pagina delle opzioni di un plugin? Come ce la caveremo a tal proposito? Prima di entrare in questo, abbiamo prima bisogno di impostare una pagina di opzioni fittizia per il nostro plugin.

Creare un nuovo file denominato plugin-options.php all'interno della cartella del plugin admin-notices che abbiamo aggiunto in precedenza e aggiungete il seguente codice:

Nella parte superiore di admin-notices.php (direttamente sopra la dichiarazione della classe), aggiungete questo nella classe di opzioni del plugin nel file principale plugin:

Non vado troppo nel dettaglio su come funziona il codice in plugin-options.php che potrebbe essere un tutorial tutto da solo! Se volete un aggiornamento allora vi consiglierei di dare un'occhiata alla pagina di WordPress Codex su come aggiungere le pagine di opzioni del plugin.

Fondamentalmente, tutto quello che stiamo facendo è aggiungere una nuova sottopagina Admin Notices al menu Impostazioni. La pagina di opzioni del plugin stessa contiene un campo di testo in cui è possibile immettere una stringa. Quando si fa clic sul pulsante Salva modifiche, il contenuto del campo di testo viene salvato nel database di WordPress.

Questo è solo un esempio puro e semplice di una pagina di impostazioni del plugin solo dimostrativa. Non include le funzioni necessarie di sanificazione o traduzione consigliate per un plugin di produzione previsto per il rilascio generale.

Andate su Impostazioni > avvisi amministrativi per visualizzare la pagina di opzioni del plugin.

Plugin options page

Come previsto, viene visualizzato l'avviso di amministrazione che abbiamo aggiunto in precedenza sulla nostra pagina di opzioni del plugin. Il messaggio di errore è visualizzato perché la nostra pagina di opzioni del plugin non è nella matrice $whitelist_admin_pages_array delle pagine admin consentite. Sistemiamolo adesso.

Al fine di aggiungere la nostra pagina di opzioni all'array, abbiamo bisogno di sapere il nome di base. All'interno di specific_admin_page(), è possibile modificare il div dell'avviso di errore come segue:

Ancora otteniamo lo stesso avviso di errore come prima, ma questa volta include il nome di base di cui abbiamo bisogno, che scopriamo essere settings_page_admin-notices/plugin-options. Che non è un nome che potremmo facilmente immaginare, quindi valeva la pena il tempo di ottenerlo!

Aggiungete il nome di base dell'array $whitelist_admin_pages che dovrebbe apparire come questo:

Aggiornate la pagina di opzioni del plugin per vedere l'avviso aggiornato.

Updated admin notice

Ora che sappiamo il nome della pagina di opzioni del plugin base, possiamo facilmente creare un avviso che si visualizzi solo su quella pagina di admin. Rimuovete settings_page_admin-notices/plugin-options dall'array $whitelist_admin_pages e commentate la seconda chiamata alla funzione add_action in init(). Quindi aggiungete una terza azione che useremo per la nostra pagina di opzioni del plugin solo avviso. La funzione init() ora dovrebbe assomigliare a questo:

Diamo corpo alla funzione di callback plugin_admin_notice() ora. Aggiungete questo nuovo metodo alla classe Gwyer_Admin_Notices:

Questo è molto simile a specific_admin_page() tranne che abbiamo rimosso l'espressione condizionale. Abbiamo anche aggiunto un pulsante ignora aggiungendo la classe CSS is-dismissible, quindi anche l'avviso può ora essere chiuso.

Plugin options page only admin notice

Provate a caricare altre pagine admin per confermare che l'avviso venga visualizzato solo nella pagina opzioni del plugin.

Conclusione

In questo tutorial, abbiamo imparato di più sugli avvisi di admin e i vari hook disponibili per la loro visualizzazione. Abbiamo compreso anche come visualizzare gli avvisi solo su determinate pagine di amministrazione di WordPress. Abbiamo sviluppato un plugin dedicato per contenere tutto il codice di avviso personalizzato.

Nella terza parte, estenderemo ulteriormente il plugin mostrando come attivare gli avvisi quando si verificano determinati eventi. Ricordate, la natura open source di WordPress lo rende facile da imparare ed estendere. A tal fine, abbiamo molto da esaminare e studiare nell'Envato Market, se siete curiosi.

Quindi rivolgeremo la nostra attenzione per scoprire come possiamo risolvere il problema degli avvisi permanenti affinché non riappaiono quando la pagina viene aggiornata. Implementeremo diversi metodi nel nostro plugin personalizzato per permetterci di fare questo.

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.