{"id":36856,"date":"2020-05-31T03:15:03","date_gmt":"2020-05-31T10:15:03","guid":{"rendered":"https:\/\/kinsta.com\/?p=72202"},"modified":"2023-03-03T12:56:35","modified_gmt":"2023-03-03T11:56:35","slug":"hook-wordpress","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/","title":{"rendered":"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati"},"content":{"rendered":"<p>Gli Hook di WordPress sono uno degli strumenti pi\u00f9 importanti da avere nell&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/assumere-uno-sviluppatore-wordpress\/\">arsenale di uno sviluppatore WordPress<\/a>. Sono il fondamento dello sviluppo dei plugin e dei temi di WordPress. Potete utilizzare i numerosi hook integrati in WordPress per &#8216;agganciare&#8217; il Core di WordPress al proprio codice personalizzato e <strong>fare<\/strong> o <strong>modificare<\/strong> qualcosa.<\/p>\n<p>Ci sono due tipi di hook in WordPress: <strong>Azioni<\/strong> e <strong>Filtri<\/strong>. Gli hook sono cos\u00ec comuni che anche lo stesso Core di WordPress li utilizza ampiamente. WordPress include anche un modo per definire i propri <strong>hook personalizzati<\/strong>, cos\u00ec che altri sviluppatori possano agganciarsi al vostro codice.<\/p>\n<p>Imparare come funzionano le azioni, i filtri e gli hook personalizzati \u00e8 essenziale per padroneggiare lo sviluppo di WordPress.<\/p>\n<p>La prima met\u00e0 di questo articolo tratta le basi dei hook di WordPress e spiega come funzionano, offrendo molteplici esempi. Nella seconda met\u00e0, imparerete come utilizzare gli hook per personalizzare WordPress, creare i propri hook personalizzati e utilizzarli per costruire i plugin estendibili.<\/p>\n<p>Sembra eccitante? Cominciamo!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2 id=\"what-are-wordpress-hooks\">Cosa Sono gli Hook di WordPress?<\/h2>\n<p>Una <a href=\"https:\/\/kinsta.com\/it\/blog\/duplicare-pagina-post-wordpress\/\">pagina di WordPress<\/a> \u00e8 composta da tonnellate di funzioni e di richieste al database. Il Core, i plugin e il tema di WordPress lavorano insieme per produrre gli elementi della pagina, come il testo, le <a href=\"https:\/\/kinsta.com\/it\/blog\/jpg-e-jpeg\/\">immagini<\/a>, gli script e gli stili. Una volta completamente assemblato, il browser li mette tutti insieme e rende la pagina.<\/p>\n<p>Gli hook di WordPress vi permettono di &#8216;agganciarvi&#8217; a questo processo di costruzione in alcuni punti ed eseguire codice personalizzato. La funzione principale degli hook \u00e8 quella di permettere di modificare o aggiungere funzionalit\u00e0 a WordPress senza toccare i <a href=\"https:\/\/kinsta.com\/it\/docs\/supporto\/ambito-del-supporto\/ambito-del-supporto-wordpress-gestito\/#what-is-wordpress-core\">file del Core<\/a>.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/hooks-aiuterea-estendere-wordpress-codice.png\" alt=\"Gli hook vi aiutano ad estendere WordPress con il vostro codice\" width=\"1100\" height=\"502\"><figcaption class=\"wp-caption-text\">Gli hook vi aiutano ad estendere WordPress con il vostro codice<\/figcaption><\/figure>\n<p>La <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/\">WordPress Plugin API<\/a> offre le funzionalit\u00e0 degli hook di WordPress. Gli hook si utilizzano invocando alcune funzioni di WordPress chiamate <strong>Funzioni di Hook<\/strong> in specifiche istanze durante il processo di runtime di WordPress.<\/p>\n<p>Utilizzando le funzioni di hook, potete raggruppare il codice personalizzato all&#8217;interno di una <strong>funzione di Callback<\/strong> e registrarlo con qualsiasi hook. Una volta registrata, questa callback verr\u00e0 eseguita ovunque si trovi l&#8217;hook, consentendovi di estendere o sostituire le funzioni predefinite di WordPress.<\/p>\n<p>La posizione dell&#8217;hook nel processo di esecuzione del codice \u00e8 un fattore importante. Nelle prossime sezioni vi diremo di pi\u00f9 sul suo significato.<\/p>\n\n<h3>I Due Tipi di Hooks di WordPress: Azioni e Filtri<\/h3>\n<p>WordPress dispone di due tipi di hook chiamati <strong>Azioni<\/strong> e <strong>Filtri<\/strong>. Le azioni consentono di <strong>fare<\/strong> qualcosa in determinati punti predefiniti del runtime di WordPress, mentre i filtri consentono di <strong>modificare<\/strong> i dati elaborati da WordPress e di restituirli con un <strong><code>return<\/code><\/strong>.<\/p>\n<p>Le azioni dono definite nel codice di WordPress come segue:<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [optional_arguments] );<\/code><\/pre>\n<p>La stringa <code><strong>action_name<\/strong><\/code> \u00e8 il nome dell&#8217;azione. Potete specificare la variabile <code><strong>[optional_arguments]<\/strong><\/code> per passare altri argomenti alla funzione di callback. Se questo campo non viene specificato, il suo valore predefinito sar\u00e0 vuoto.<\/p>\n<p><strong>Esempio:<\/strong> L&#8217;azione <code><strong>do_action( 'wp_head' )<\/strong><\/code> pu\u00f2 essere agganciata per eseguire codice personalizzato ogni volta che WordPress elabora l&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/aggiungere-codice-header-footer\/\">header del sito<\/a>. Questa azione non ha altri argomenti.<\/p>\n<p>I filtri sono definiti nel codice di WordPress cos\u00ec:<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_be_filtered', [optional_arguments] );<\/code><\/pre>\n<p>La stringa <code><strong>filter_name<\/strong><\/code> \u00e8 il nome del filtro, la variabile <code><strong>value_to_be_filtered<\/strong><\/code> \u00e8 il valore che deve essere filtrato e restituito, e la variabile <code><strong>[optional_arguments]<\/strong><\/code> pu\u00f2 passare altri argomenti, proprio come avviene con le azioni.<\/p>\n<p><strong>Esempio:<\/strong> Il filtro <code><strong>apply_filters( 'admin_footer_text' , stringa $text )<\/strong><\/code> pu\u00f2 essere agganciato per modificare il testo visualizzato nel footer dell&#8217;area di amministrazione. A partire da <em>WordPress 5.4<\/em>, il suo valore predefinito mostrer\u00e0 la frase <code><em>Grazie per aver creato con <a href=\"https:\/\/wordpress.org\">WordPress<\/a>.<\/em><\/code> nel footer dell&#8217;area di amministrazione.<\/p>\n<p>Di seguito, imparerete come agganciarvi alle azioni e ai filtri con molti esempi dal Core di WordPress.<\/p>\n<p>Una volta agganciati, potete indirizzare il vostro codice da <strong>fare<\/strong> o <strong>personalizzare<\/strong> qualcosa sul vostro sito. Ad esempio, potete utilizzare gli hook per inviare un&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/best-practice-email-marketing\/#email-marketing-platform\">email automatica<\/a> dopo aver pubblicato un post, o caricare <a href=\"https:\/\/kinsta.com\/it\/blog\/child-theme-wordpress\/#the-files-in-a-wordpress-child-theme\">fogli di stile personalizzati<\/a> per cambiare l&#8217;aspetto del vostro sito.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/hooks-wordpress-aiutano-interagire-sito-web-modificarlo-2.png\" alt=\"Gli hook di WordPress vi aiutano a interagire con il vostro sito web o a modificarlo\" width=\"1100\" height=\"600\"><figcaption class=\"wp-caption-text\">Gli hook di WordPress vi aiutano a interagire con il vostro sito web o a modificarlo<\/figcaption><\/figure>\n<p>Il modo pi\u00f9 semplice per capire gli hook \u00e8 immaginare il vostro <a href=\"https:\/\/kinsta.com\/it\/blog\/esempi-siti-wordpress\/\">sito WordPress<\/a> come una casa in costruzione.<\/p>\n<p>Utilizzare gli hook \u00e8 come utilizzare una gru per spostare avanti e indietro gli oggetti da costruzione. Gli oggetti che vengono trasferiti sono le <strong>Funzioni di Callback<\/strong> che contengono il vostro <a href=\"https:\/\/kinsta.com\/it\/blog\/modificare-codice-wordpress\/\">codice personalizzato<\/a>. Questi elementi (o funzioni) possono aiutarvi a costruire o modificare la casa.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/esempio-hook-azione-wp_head-wordpress-1.png\" alt=\"Esempio di hook all'azione 'wp_head' in WordPress\" width=\"1100\" height=\"636\"><figcaption class=\"wp-caption-text\">Esempio di hook all&#8217;azione &#8216;wp_head&#8217; in WordPress<\/figcaption><\/figure>\n<p>Le funzioni di callback possono essere normali funzioni PHP, funzioni WordPress predefinite o funzioni personalizzate da voi definite.<\/p>\n<p>Possiamo trasportare determinati elementi solo su specifici vettori attaccati a particolari hook. Pertanto, le azioni possono essere agganciate solo alle <strong>Funzioni di Azione<\/strong>. Allo stesso modo, i filtri possono essere agganciati solo alle <strong>Funzioni di Filtro<\/strong>.<\/p>\n<p>Mentre \u00e8 noioso cambiare i ganci e i trasportatori su una gru, in WordPress \u00e8 super semplice, dato che dispone di <a href=\"https:\/\/adambrown.info\/p\/wp_hooks\">oltre 2.200 tipi di hooks predefiniti<\/a>.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-5-1-2200-hooks-nativi.png\" alt=\"WordPress 5.1 ha 2200+ hook nativi\" width=\"900\" height=\"357\"><figcaption class=\"wp-caption-text\">WordPress 5.1 ha 2200+ hook nativi (Fonte: Adam Brown)<\/figcaption><\/figure>\n<p>Potete trovare hooks sparsi in tutto il Core di WordPress, e vi permettono di individuare la posizione esatta in cui volete agganciarvi e di eseguire il vostro codice personalizzato.<\/p>\n\n<h2 id=\"hooks-vs-actions-vs-filters\">Hooks, Azioni e Filtri<\/h2>\n<p>Come da <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\">WordPress Plugin Handbook<\/a>:<\/p>\n<blockquote><p>&#8220;<em>Gli hook sono un modo per un blocco di codice di interagire\/modificare un altro blocco di codice&#8230; Ci sono due tipi di hook: Azioni e Filtri. <\/em>\u201d<\/p><\/blockquote>\n<p>C&#8217;\u00e8 una diffusa incoerenza nel modo in cui vengono utilizzati i termini <strong>Hook<\/strong>, <strong>Azione<\/strong> e <strong>Filtro<\/strong>. Alcune guide e tutorial li confondono con le funzioni ad essi associate. Una delle ragioni principali di questa confusione \u00e8 la natura complessa del funzionamento dei hook.<\/p>\n<p>Anche quando si guarda attentamente all&#8217;interno del Core di WordPress, si scopre che non c&#8217;\u00e8 molta differenza tra l&#8217;aggiunta di azioni e filtri. Ecco il <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/plugin.php#L403\">codice sorgente della funzione add_action()<\/a> dal file <strong>wp-includes\/plugin.php<\/strong>:<\/p>\n<pre><code class=\"language-php\">function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {\n    return add_filter( $tag, $function_to_add, $priority, $accepted_args );\n}<\/code><\/pre>\n<p>La funzione <code><strong>add_action()<\/strong><\/code> si limita a richiamare la funzione <code><strong>add_filter()<\/strong><\/code> e ne restituisce il valore. Perch\u00e9? Perch\u00e9 entrambi funzionano fondamentalmente allo stesso modo, tranne che per una differenza.<\/p>\n<p>La funzione <code><strong>apply_filters()<\/strong><\/code> restituisce un valore che pu\u00f2 cambiare i tipi di dati esistenti, mentre la funzione <code><strong>do_action()<\/strong><\/code> non restituisce nulla (<a href=\"https:\/\/www.php.net\/manual\/en\/functions.returning-values.php\">valore NULL in PHP<\/a>).<\/p>\n<p>Se siete ancora confusi, non vi preoccupate! Una volta superata la prima met\u00e0 di questo articolo, tutto sar\u00e0 chiaro. Ci atterremo alla terminologia ufficiale del Codex di WordPress, perch\u00e9 \u00e8 chiara, precisa e universale.<\/p>\n<p>Per ora, familiarizzate con la routine degli hook illustrata di seguito.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/hooks-funzioni-hooks-funzioni-richiamo.png\" alt=\"La routine degli hook: Hook, funzioni di hooks e funzioni di callback\" width=\"1100\" height=\"1161\"><figcaption class=\"wp-caption-text\">La routine degli hook: Hook, funzioni di hooks e funzioni di callback<\/figcaption><\/figure>\n<p>Analizziamo le differenze tra Azioni e Hook.<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"text-align: center\" colspan=\"2\"><strong>Hook di WordPress<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\"><strong>Azioni<\/strong><\/td>\n<td style=\"text-align: center\"><strong>Filtri<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Le azioni vengono utilizzate per eseguire funzioni personalizzate in un punto specifico durante l&#8217;esecuzione del Core di WordPress.<\/td>\n<td>I filtri vengono utilizzati per modificare o personalizzare i dati utilizzati da altre funzioni.<\/td>\n<\/tr>\n<tr>\n<td>Le azioni sono definite\/create dalla funzione <strong><code>do_action( 'action_name' )<\/code><\/strong> nel codice di WordPress.<\/td>\n<td>I filtri sono definiti\/creati dalla funzione <strong><code>apply_filters( 'filter_name', 'value_to_be_filtered' )<\/code><\/strong> nel codice di WordPress.<\/td>\n<\/tr>\n<tr>\n<td>Le azioni sono anche chiamate <strong>Action Hook<\/strong>.<\/td>\n<td>I filtri sono anche chiamati <strong>Filter Hook<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>Le azioni possono essere agganciate solo alle funzioni di Azione. Ad es. <strong><code>add_action()<\/code><\/strong>, <strong><code>remove_action()<\/code><\/strong>.<\/td>\n<td>I filtri possono essere agganciati solo alle funzioni di Filtro. Ad es. <strong><code>add_filter()<\/code><\/strong>, <strong><code>remove_filter()<\/code><\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>Le funzioni di azione non devono passare alcun argomento alle loro funzioni di callback.<\/td>\n<td>Le funzioni di filtro devono passare almeno un argomento alle loro funzioni di callback.<\/td>\n<\/tr>\n<tr>\n<td>Le funzioni di azione possono eseguire qualsiasi tipo di compito, compreso il cambiamento del funzionamento di WordPress.<\/td>\n<td>Le funzioni di filtro esistono solo per modificare i dati trasmessi loro dai filtri.<\/td>\n<\/tr>\n<tr>\n<td>Le funzioni di azione non dovrebbero restituire (<strong><code>return<\/code><\/strong>) nulla. Tuttavia, possono produrre un <strong><code>echo<\/code><\/strong> all&#8217;uscita o interagire con il database.<\/td>\n<td>Le funzioni di filtro devono restituire (<strong><code>return<\/code><\/strong>) le loro modifiche all&#8217;uscita. Anche se una funzione di filtro non cambia nulla, deve comunque restituire l&#8217;input non modificato.<\/td>\n<\/tr>\n<tr>\n<td>Le azioni possono eseguire quasi tutto, purch\u00e9 il codice sia valido.<\/td>\n<td>I filtri dovrebbero funzionare in modo isolato, in modo da non avere effetti indesiderati.<\/td>\n<\/tr>\n<tr>\n<td><strong>Riepilogo:<\/strong> un&#8217;azione interrompe il regolare processo di esecuzione del codice per fare qualcosa con le informazioni che riceve, ma non restituisce nulla, e poi esce.<\/td>\n<td><strong>Riepilogo:<\/strong> un filtro modifica le informazioni che riceve, le restituisce alla funzione di hook chiamante e altre funzioni possono utilizzare il valore che restituisce.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A volte, potete utilizzare un&#8217;azione o un filtro per raggiungere lo stesso obiettivo. Per esempio, se desiderate modificare il testo di un post, potete registrare una funzione di callback con l&#8217;azione <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/publish_post\">publish_post<\/a> e modificare il contenuto del post quando viene salvato nel <a href=\"https:\/\/kinsta.com\/it\/blog\/database-wordpress\/\">database<\/a>.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to change the text\nfunction change_text_callback() { \n    \/\/ add the code to change text here\n}\n\n\/\/ hook in to the 'publish_post' action with the add_action() function\nadd_action( 'publish_post', 'change_text_callback' );<\/code><\/pre>\n<p>Oppure potete registrare un&#8217;altra funzione di callback con il filtro <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\">the_content<\/a> per modificare il contenuto del post prima che venga visualizzato nel browser.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to modify the text\nfunction change_text_another_callback( $content ) { \n    \/\/ add the code to change text here and then return it \n    return $filtered_content;\n}\n\n\/\/ hook in to 'the_content' filter with the add_filter() function\nadd_filter( 'the_content', 'change_text_another_callback');<\/code><\/pre>\n<p>Due approcci diversi con lo stesso risultato. Sapere quando usare l&#8217;uno rispetto all&#8217;altro \u00e8 la chiave per essere un <a href=\"https:\/\/kinsta.com\/it\/blog\/reddito-sviluppatore-wordpress\/\">buon sviluppatore di WordPress<\/a>.<\/p>\n<h2 id=\"how-do-wordpress-hooks-work\">Come Funzionano gli Hook di WordPress?<\/h2>\n<p>L&#8217;esempio della casa era abbastanza semplice per comprendere il funzionamento di base degli hook, ma non coglie la complessit\u00e0 del loro funzionamento. Soprattutto i concetti della posizione e della specificit\u00e0 degli hook.<\/p>\n<p>Un esempio migliore potrebbe essere quello di immaginare di elaborare una pagina di WordPress come l&#8217;assemblaggio di un&#8217;auto. A differenza della produzione di un&#8217;auto, che richiede tempo, l&#8217;assemblaggio di una pagina web \u00e8 quasi istantaneo.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/assemblare-pagina-web-assemblare-auto.png\" alt=\"Assemblare una pagina web \u00e8 come assemblare un'auto\" width=\"1100\" height=\"1223\"><figcaption class=\"wp-caption-text\">Assemblare una pagina web \u00e8 come assemblare un&#8217;auto<\/figcaption><\/figure>\n<p>Proprio come una macchina viene assemblata pezzo per pezzo in una moderna catena di montaggio, una pagina web di WordPress viene assemblata elemento per elemento dal server e dal client.<\/p>\n<p>Il Core di WordPress \u00e8 come il motore dell&#8217;auto, il telaio e altri elementi essenziali, che alimentano la funzionalit\u00e0 &#8220;core&#8221; del sito web.<\/p>\n<p>Potete avere un sito web funzionale con il solo Core di WordPress, ma dov&#8217;\u00e8 il divertimento? \u00c8 necessario aggiungere funzionalit\u00e0 entusiasmanti al sito. \u00c8 qui che entrano in gioco i <a href=\"https:\/\/kinsta.com\/it\/argomenti\/plugin-wordpress\/\">plugin<\/a> e i <a href=\"https:\/\/kinsta.com\/it\/blog\/temi-wordpress-veloci\/\">temi di WordPress<\/a>, che utilizzano entrambi ampiamente gli hook.<\/p>\n<p>Nell&#8217;esempio sopra riportato, ogni stazione numerata \u00e8 come un hook all&#8217;interno del Core di WordPress. Ci sono due tipi di stazioni, come le azioni e i filtri. Ogni stazione include un tipo specifico di slot che accetta solo alcuni strumenti, come le funzioni di azione e le funzioni di filtro.<\/p>\n<p>Tutte le stazioni sono posizionate ad intervalli frequenti per modularit\u00e0 ed efficienza.<\/p>\n<p>In base alla richiesta effettuata in una particolare posizione, possiamo attaccare (o agganciare) l&#8217;utensile pi\u00f9 appropriato per il lavoro in quella specifica stazione. Questi strumenti sono come le funzioni di callback utilizzate per interagire o modificare WordPress.<\/p>\n<p>Alcuni strumenti possono alterare in modo significativo il funzionamento dell&#8217;auto, proprio come callback registrate alle azioni. Altri strumenti sono utilizzati solo per personalizzare l&#8217;aspetto dell&#8217;auto, come le callback registrate ai filtri.<\/p>\n<p>L&#8217;utilizzo degli strumenti giusti nelle stazioni giuste \u00e8 fondamentale per costruire un&#8217;auto di prim&#8217;ordine. Allo stesso modo, gli hook ci aiutano a personalizzare WordPress in base alle nostre specifiche esigenze.<\/p>\n<p>Se si estende questa analogia, i plugin sono come un&#8217;aggiunta di utili elementi dell&#8217;auto come airbag, console di intrattenimento, sistema keyless remoto, ecc. (come quelli utili per <a href=\"https:\/\/kinsta.com\/it\/blog\/plugin-woocommerce\/\">migliorare le funzionalit\u00e0 di WooCommerce<\/a>). I temi sono analoghi alla personalizzazione dell&#8217;estetica dell&#8217;auto, come il design generale, la verniciatura, i cerchioni, ecc. (ecco come <a href=\"https:\/\/kinsta.com\/it\/blog\/come-personalizzare-il-vostro-tema-wordpress\/\">personalizzare il vostro tema WordPress<\/a>).<\/p>\n<h2 id=\"where-to-register-hooks-and-their-functions\">Dove Registrare gli Hook e le Loro Funzioni?<\/h2>\n<p>Sono due le modalit\u00e0 raccomandate per aggiungere hook in WordPress:<\/p>\n<ul>\n<li><strong>Plugin:<\/strong> Create il vostro plugin e aggiungete tutto il vostro codice personalizzato al suo interno.<\/li>\n<li><strong>Child Theme:<\/strong> Registrate gli hook e le funzioni di callback nel <a href=\"https:\/\/kinsta.com\/it\/blog\/child-theme-wordpress\/\">file\u00a0<strong><code>functions.php<\/code><\/strong> del vostro child theme<\/a>.<\/li>\n<\/ul>\n<p>Per questo tutorial, iniziamo creando un plugin. Create una nuova cartella nella vostra directory <code><strong>\/wp-content\/plugins\/<\/strong><\/code>.<\/p>\n<p>Chiamo il mio plugin <code><strong>salhooks<\/strong><\/code>, ma potete chiamarlo come volete. Secondo le linee guida di WordPress, \u00e8 necessario creare un file PHP con lo stesso nome (<code><strong>salhooks.php<\/strong><\/code>) all&#8217;interno della directory del plugin.<\/p>\n<p>Aggiungete i seguenti campi di intestazione al file del vostro plugin per registrarlo in WordPress. Per saperne di pi\u00f9 sui <a href=\"https:\/\/developer.wordpress.org\/plugins\/plugin-basics\/header-requirements\/\">requisiti dell&#8217;intestazione del plugin,<\/a> consultate il Codex di WordPress.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Salhooks\nVersion    :  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.\nAuthor     :  Salman Ravoof\nAuthor URI :  https:\/\/www.salmanravoof.com\/\nLicense    :  GPLv2 or later\nLicense URI:  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  salhooks\n*\/\n\n\/\/=================================================\n\/\/ Security: Abort if this file is called directly\n\/\/=================================================\nif ( !defined('ABSPATH') ) { \n    die;\n}<\/code><\/pre>\n<p>Salvate questo file e poi attivare il plugin nella <a href=\"https:\/\/kinsta.com\/it\/blog\/amministrazione-wordpress\/\">bacheca di WordPress<\/a>. User\u00f2 questo plugin all&#8217;interno di un&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/installare-wordpress-in-locale\/\">installazione locale di WordPress<\/a> per dimostrare come funzionano gli hook.<\/p>\n<p>Come nota a margine, \u00e8 anche possibile modificare direttamente i file del Core di WordPress per registrare gli hook. Tuttavia, non \u00e8 consigliabile, in quanto tutto il codice personalizzato verr\u00e0 sovrascritto ogni volta che <a href=\"https:\/\/kinsta.com\/it\/blog\/aggiornamenti-automatici-di-wordpress\/\">aggiornate WordPress<\/a>. Per lo stesso motivo, non dovreste aggiungere gli hook all&#8217;interno del parent theme.<\/p>\n<h2 id=\"using-wordpress-hooks\">Utilizzare gli Hook WordPress<\/h2>\n<p>Un hook WordPress da solo non fa nulla. Sta solo seduto nel codice, in attesa che qualche funzione di hook lo attivi. Per utilizzare un hook, \u00e8 necessario chiamare almeno altre 2 funzioni.<\/p>\n<p>Per prima cosa, \u00e8 necessario registrare l&#8217;hook con una funzione di hook e fare riferimento ad una funzione di callback al suo interno. E poi bisogna definire la funzione di callback di cui si \u00e8 parlato prima nella funzione di hook. WordPress eseguir\u00e0 questa funzione di callback ogni volta che l&#8217;hook viene attivato.<\/p>\n<p>L&#8217;ordine in cui si definiscono queste funzioni non ha importanza, ma \u00e8 una buona idea metterle vicine.<\/p>\n<p>Le azioni e i filtri hanno funzioni di hook distinte. D&#8217;ora in avanti, indichiamoli come <strong>Funzioni di Azione<\/strong> e <strong>Funzioni di Filtro<\/strong>. Come vedrete, hanno i loro requisiti di sintassi e i loro parametri.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"3\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3 id=\"hooking-an-action\">Agganciare un&#8217;Azione<\/h3>\n<p>Le azioni forniscono un modo per eseguire codice personalizzato in un punto particolare dell&#8217;esecuzione del Core di WordPress, dei plugin o dei temi.<\/p>\n<h4>La Action Function add_action()<\/h4>\n<p>Potete registrare una funzione di callback su un&#8217;azione seguendo questi passaggi:<\/p>\n<ol>\n<li>Definite una <strong>funzione di Callback<\/strong> con il vostro codice al suo interno. Questa funzione di callback verr\u00e0 eseguita quando qualsiasi azione su cui \u00e8 registrata viene eseguita durante l&#8217;esecuzione del codice di WordPress.<\/li>\n<li>Agganciate la funzione di callback all&#8217;azione desiderata con la funzione <code><strong>add_action()<\/strong><\/code>. Come per il codice WordPress, la funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\">add_action()<\/a> deve passare almeno due parametri:\n<ul>\n<li>Nome dell&#8217;azione a cui agganciarsi.<\/li>\n<li>Nome della funzione di callback che verr\u00e0 eseguita quando l&#8217;azione viene attivata.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>La funzione <code><strong>add_action()<\/strong><\/code> accetta anche due parametri opzionali per l&#8217;impostazione della <code><strong>priority<\/strong><\/code> e del <code><strong>numero di\u00a0argomenti<\/strong><\/code>. Li analizzeremo entrambi pi\u00f9 avanti.<\/li>\n<\/ol>\n<p>\u00c8 buona regola nominare i parametri della funzione di callback nel modo pi\u00f9 vicino possibile ai parametri passati dalla funzione di hook.<\/p>\n<p>Vediamo un esempio di utilizzo della funzione <code><strong>add_action()<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function, the arguments are optional\nfunction example_callback( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments\n}\n\n\/\/ hook the callback function to the 'example_action'\nadd_action( 'example_action', 'example_callback', [priority], [no_of_args] );\n\n\/\/ 'priority' and 'number of arguments' are optional parameters<\/code><\/pre>\n<h4>Esempio di Aggancio di un&#8217;Azione<\/h4>\n<p>WordPress dispone di un&#8217;azione nativa chiamata <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/init\/\">init<\/a> che si attiva dopo che WordPress ha finito di caricare e autenticare l&#8217;utente, ma prima che vengano inviati gli header. Molti plugin utilizzano questo hook come punto di partenza per istanziare il loro codice, dato che quasi tutte le principali funzionalit\u00e0 di WordPress hanno finito il caricamento nel momento in cui questa azione viene eseguita da WordPress.<\/p>\n<p>WordPress dispone anche di un&#8217;azione simile chiamata <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_init\/\">admin_init<\/a>. Questa si attiva quando la schermata admin viene inizializzata, mentre l&#8217;azione <code><strong>init<\/strong><\/code> si attiva solo dopo che WordPress ha terminato il caricamento.<\/p>\n<p>Eseguiamo un codice personalizzato per eseguire un <code><strong>echo<\/strong><\/code> di un semplice messaggio durante l&#8217;esecuzione dell&#8217;azione <code><strong>init<\/strong><\/code>. Ecco come fare:<\/p>\n<pre><code class=\"language-php\">function custom_callback_function(){\n\u00a0 \u00a0 \/\/ add your custom code here to do something\n\u00a0 \u00a0 echo 'I will be fired on WordPress initialization';\n}\nadd_action( 'init', 'custom_callback_function' );<\/code><\/pre>\n<p>Potete vedere il messaggio che viene ripetuto nell&#8217;angolo in alto a sinistra della mia <a href=\"https:\/\/kinsta.com\/it\/blog\/installare-wordpress-in-locale\/\">installazione locale di WordPress<\/a>.<\/p>\n<figure id=\"attachment_72244\" aria-describedby=\"caption-attachment-72244\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72244 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2020\/05\/init-Action-Hook-Basic-Example.jpg\" alt=\"Non \u00e8 cos\u00ec bello, ma \u00e8 un ottimo inizio!\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72244\" class=\"wp-caption-text\">Non \u00e8 cos\u00ec bello, ma \u00e8 un ottimo inizio!<\/figcaption><\/figure>\n<h4>Trovare le Azioni Supportate da WordPress<\/h4>\n<p>WordPress prevede azioni ogni volta che fa qualcosa, come l&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/url-login-wordpress\/\">accesso di un utente<\/a> o la <a href=\"https:\/\/kinsta.com\/it\/blog\/programmazione-saltata-wordpress\/\">pubblicazione di un nuovo post<\/a>. Potete trovare un elenco completo di tutte le azioni eseguite da WordPress nella pagina <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\">Plugin API\/Action Reference<\/a>.<\/p>\n<figure id=\"attachment_72247\" aria-describedby=\"caption-attachment-72247\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72247 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/plugin-api-action-reference.png\" alt=\"C'\u00e8 un'azione per quasi tutti gli usi\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72247\" class=\"wp-caption-text\">C&#8217;\u00e8 un&#8217;azione per quasi tutti gli usi<\/figcaption><\/figure>\n<p>Il Codex ha suddiviso tutte le azioni ivi elencate in varie categorie e le ha disposte dalla prima all&#8217;ultima nell&#8217;ordine di esecuzione di WordPress.<\/p>\n<p>Nella maggior parte dei casi, molte di queste azioni non fanno nulla, perch\u00e9 non c&#8217;\u00e8 nulla che vi \u00e8 agganciato. Ma se ne avete bisogno, sono l\u00ec perch\u00e9 possiate utilizzarle.<\/p>\n<p>Vi sentite un po&#8217; sopraffatti da tutte le azioni? \u00c8 naturale. Man mano che si acquisisce maggiore esperienza e si passa attraverso il codice sorgente del Core di WordPress, diventer\u00e0 pi\u00f9 facile trovare l&#8217;hook perfetto per le vostre esigenze. Basta eseguire una ricerca per il termine &#8220;<strong>do_action<\/strong>&#8221; e troverete un sacco di azioni a cui agganciarvi.<\/p>\n<h4>Parametri aggiuntivi per add_action()<\/h4>\n<p>La funzione <code><strong>add_action()<\/strong><\/code> pu\u00f2 accettare altri due parametri: uno per impostare la <code><strong>priority<\/strong><\/code> e l&#8217;altro per impostare il <code><strong>numero di argomenti<\/strong><\/code>. Anche se sono opzionali, se usati correttamente, possono essere super utili.<\/p>\n<h5><strong>Priority<\/strong><\/h5>\n<p>Il primo parametro aggiuntivo supportato dalla funzione <code><strong>add_action()<\/strong><\/code> imposta la <code><strong>priority<\/strong><\/code>. Questo parametro pu\u00f2 essere solo un numero intero positivo. Pi\u00f9 basso \u00e8 il numero di priorit\u00e0, prima la funzione verr\u00e0 eseguita. Se non lo si specifica, il valore predefinito \u00e8 10.<\/p>\n<p>Per vedere come funziona, registriamo tre funzioni di callback all&#8217;azione <code><strong>init<\/strong><\/code>, ma ognuna con priorit\u00e0 diverse.<\/p>\n<pre><code class=\"language-php\">\/\/ priority is set to 9, which is lower than 10, hence it ranks higher\nadd_action( 'init', 'i_am_high_priority', 9 );\n\n\/\/ if no priority is set, the default value of 10 will be used\nadd_action( 'init', 'i_am_default_priority');\n\n\/\/ priority is set to 11, which is higher than 11, hence it ranks lower\nadd_action( 'init', 'i_am_low_priority', 11 );<\/code><\/pre>\n<p>Negli esempi sopra riportati, la funzione di callback con il numero di priorit\u00e0 pi\u00f9 basso sar\u00e0 eseguita per prima e quella con il numero pi\u00f9 alto sar\u00e0 eseguita per ultima. Se le priorit\u00e0 sono le stesse, allora saranno eseguite nell&#8217;ordine in cui le avete registrate.<\/p>\n<p>La priorit\u00e0 gioca un ruolo importante quando pi\u00f9 funzioni di callback sono registrate su un singolo hook. Per evitare risultati inaspettati, potete impostare una priorit\u00e0 per ogni funzione di callback, in modo che si attivino nell&#8217;ordine desiderato.<\/p>\n<h5>Numero di Argomenti<\/h5>\n<p>Di default, qualsiasi funzione di callback registrata tramite la funzione <code><strong>add_action()<\/strong><\/code> accetter\u00e0 un solo argomento. Tuttavia, a volte potrebbe essere necessario passare dati extra alla funzione di callback.<\/p>\n<p>Per questo motivo, la funzione <code><strong>add_action()<\/strong><\/code> accetta un parametro opzionale per l&#8217;impostazione del numero di argomenti.<\/p>\n<p>Un ottimo esempio per dimostrarlo \u00e8 l&#8217;azione <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_post\/\">comment_post<\/a>. Questa azione viene eseguita subito dopo che <a href=\"https:\/\/kinsta.com\/it\/blog\/plugin-commenti-wordpress\/\">WordPress aggiunge un commento al database<\/a>. Se non si imposta il parametro del <code><strong>numero di argomenti<\/strong><\/code>, alla funzione di callback sar\u00e0 passato un singolo valore, che in questo caso sar\u00e0 il <code><strong>comment_ID<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">\/\/ register the hook with 'priority' and 'number of arguments' parameters\nadd_action( 'comment_post', 'show_message_function', 10, 3 );\n\n\/\/ define the callback function\nfunction show_message_function( $comment_ID, $comment_approved, $commentdata ) {\n\u00a0 \u00a0 \/\/ check whether a comment is approved with the second parameter\n\u00a0 \u00a0 if( 1 === $comment_approved ){\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ runs the code only if the comment is approved\n\u00a0 \u00a0 }\n}<\/code><\/pre>\n<p>Se si imposta il parametro del <code><strong>numero di argomenti<\/strong><\/code> a <strong>3<\/strong>, come nell&#8217;esempio precedente, la funzione dell&#8217;azione passer\u00e0 tre valori: <code><strong>comment_ID<\/strong><\/code>, <code><strong>comment_approved<\/strong><\/code> e <code><strong>commentdata<\/strong><\/code>.<\/p>\n<p>WordPress imposta il valore di <code><strong>comment_approved<\/strong><\/code> a <strong>1<\/strong> per i commenti approvati, <strong>0<\/strong> se non approvati e &#8216;<strong>spam<\/strong>&#8216; se il <a href=\"https:\/\/kinsta.com\/it\/blog\/commenti-spam-wordpress\/\">commento \u00e8 contrassegnato come spam<\/a>.<\/p>\n<p>La variabile <code><strong>commentdata<\/strong><\/code> \u00e8 un array che include tutti i dati del commento, come il nome dell&#8217;autore del commento, l&#8217;indirizzo email, il sito web e il contenuto del commento stesso. Potete consultare il Codex di WordPress per trovare tutte le <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_new_comment\/#parameters\">coppie chiave-valore incluse nell&#8217;array &#8216;commentdata&#8217;<\/a>.<\/p>\n<p>Potete avere tutti gli argomenti che volete, ma la funzione callback e la funzione <code><strong>add_action()<\/strong><\/code> devono specificare lo stesso numero di argomenti.<\/p>\n<p>Si pu\u00f2 fare di pi\u00f9 con il proprio codice passando ulteriori parametri alla funzione di callback. Ad esempio, potete verificare se un commento \u00e8 approvato o meno e <a href=\"https:\/\/kinsta.com\/it\/blog\/commenti-spam-wordpress\/#3-enable-comment-moderation\">inviare automaticamente il testo del commento all&#8217;amministratore via email, se questo \u00e8 approvato<\/a>. Non \u00e8 possibile farlo senza specificare gli argomenti aggiuntivi, perch\u00e9 la funzione di callback non avr\u00e0 accesso ai dati del <code><strong>comment_content<\/strong><\/code>.<\/p>\n<p>Se non volete impostare la priorit\u00e0, ma volete solo cambiare il numero di argomenti, dovrete comunque impostare una priorit\u00e0. Basta usare il suo valore predefinito (cio\u00e8 10).<\/p>\n<h4>Come il Core di WordPress Utilizza le Azioni<\/h4>\n<p>Lo stesso Core di WordPress utilizza molte delle sue azioni native per eseguire varie funzioni.<\/p>\n<p>Prendete ad esempio l&#8217;azione <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_head\/\">wp_head<\/a>. Viene attivata quando WordPress emette la sezione di testa delle pagine web (il codice che va tra <code><strong>&lt;head&gt;<\/strong><\/code> e <strong><code>&lt;\/head&gt;<\/code><\/strong>).<\/p>\n<p>La maggior parte delle funzioni di azione del Core di WordPress relative all&#8217;hook\u00a0<code><strong>wp_head<\/strong><\/code> si trovano nel file <strong><code>wp-includes\/default-filters.php<\/code>. <\/strong>Ho <a href=\"https:\/\/github.com\/WordPress\/WordPress\/blob\/master\/wp-includes\/default-filters.php\">esaminato il codice<\/a> e ho compilato una lista di tutte le funzioni <code><strong>add_action()<\/strong><\/code> che richiamano l&#8217;azione <code><strong>wp_head<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );\nadd_action( 'wp_head', '_wp_render_title_tag', 1 );\nadd_action( 'wp_head', 'wp_enqueue_scripts', 1 );\nadd_action( 'wp_head', 'wp_resource_hints', 2 );\nadd_action( 'wp_head', 'feed_links', 2 );\nadd_action( 'wp_head', 'feed_links_extra', 3 );\nadd_action( 'wp_head', 'rsd_link' );\nadd_action( 'wp_head', 'wlwmanifest_link' );\nadd_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );\nadd_action( 'wp_head', 'locale_stylesheet' );\nadd_action( 'wp_head', 'noindex', 1 );\nadd_action( 'wp_head', 'print_emoji_detection_script', 7 );\nadd_action( 'wp_head', 'wp_print_styles', 8 );\nadd_action( 'wp_head', 'wp_print_head_scripts', 9 );\nadd_action( 'wp_head', 'wp_generator' );\nadd_action( 'wp_head', 'rel_canonical' );\nadd_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );\nadd_action( 'wp_head', 'wp_custom_css_cb', 101 );\nadd_action( 'wp_head', 'wp_site_icon', 99 );\nadd_action( 'wp_head', 'wp_no_robots' );<\/code><\/pre>\n<p>Sono un sacco di funzioni di callback agganciate ad una sola azione. Impostare la <code><strong>priority<\/strong><\/code> in questo caso \u00e8 fondamentale per assicurarsi che le pi\u00f9 importanti funzioni agganciate funzionino per prime.<\/p>\n<p>Nell&#8217;esempio precedente, il caricamento degli script con la funzione di callback <code><strong>wp_enqueue_scripts()<\/strong><\/code> \u00e8 pi\u00f9 importante (priority = 1) che caricare i meta tag delle icone del sito con la funzione di callback <code><strong>wp_site_icon()<\/strong><\/code> (priority = 99).<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Tutte le funzioni di callback utilizzate nell&#8217;esempio precedente sono funzioni di WordPress. Potete utilizzarle in qualsiasi vostro codice. Per ulteriori informazioni, visitate la <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\">pagina di riferimento delle funzioni nel Codex di WordPress<\/a>.<\/p>\n<\/aside>\n\n<h4>Altre Action Function<\/h4>\n<p>Se <code><strong>add_action()<\/strong><\/code> \u00e8 la action function pi\u00f9 utilizzata, ce ne sono molte altre che sono ugualmente utili. Vediamo come funzionano.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_action\">has_action()<\/a><\/li>\n<\/ul>\n<p>Questa action function controlla se un&#8217;azione \u00e8 stata agganciata. Accetta due parametri. Il primo \u00e8 il nome dell&#8217;azione. Il secondo parametro \u00e8 opzionale ed \u00e8 il nome della funzione di callback.<\/p>\n<pre><code class=\"language-php\">has_action( 'action_name', 'function_to_check' );<\/code><\/pre>\n<p>Se si specifica solo il primo parametro, esso restituisce <code><strong>true<\/strong><\/code> se<em> una qualsiasi<\/em> funzione \u00e8 agganciata al parametro <code><strong>action_name<\/strong><\/code>.<\/p>\n<p>Ma se si specifica anche il secondo parametro, questo restituir\u00e0 <code><strong>false<\/strong><\/code>\u00a0se la funzione di callback specificata non \u00e8 registrata all&#8217;azione menzionata.<\/p>\n<p>Se per\u00f2 trova la funzione di callback collegata all&#8217;action hook, restituir\u00e0 la <code><strong>priority<\/strong><\/code> (un numero intero) impostata per quella funzione su questo action hook.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\">do_action()<\/a><\/li>\n<\/ul>\n<p>Abbiamo gi\u00e0 incontrato questa action function in passato. WordPress la utilizza per definire tutte le sue azioni predefinite, consentendo ad altre funzioni di agganciarvisi. Proprio come WordPress, anche voi potete utilizzare la funzione <strong><code>do_action()<\/code><\/strong> per creare una nuova azione personalizzata specificando come parametro il nome di una nuova azione.<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [argument1], [argument2] );<\/code><\/pre>\n<p>La sola dichiarazione di questa funzione non servir\u00e0 a nulla da sola. Ma rimarr\u00e0 nel codice, in attesa che venga attivata da altre action function. Il passaggio di qualsiasi argomento aggiuntivo \u00e8 opzionale, ma \u00e8 importante se si desidera che le funzioni di callback le utilizzino.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/do_action_ref_array\">do_action_ref_array()<\/a><\/li>\n<\/ul>\n<p>Questa action function \u00e8 identica a <code><strong>do_action()<\/strong><\/code>, tranne che per una differenza. Qualsiasi parametro passato tramite la funzione deve essere un array. Quando si hanno molti argomenti da passare o i propri argomenti sono gi\u00e0 in un array, questa funzione \u00e8 super utile.<\/p>\n<pre><code class=\"language-php\">\/\/ here's an example array\n$arguments_array = array( 'arg_1', 'foo', true, 'arg_4' );\n\ndo_action_ref_array( 'example_action', $arguments_array );<\/code><\/pre>\n<p>Dato che gli array PHP sono una mappa ordinata, assicuratevi che gli argomenti che passate siano nel giusto ordine.<\/p>\n<p>Un esempio dell&#8217;utilizzo di questa action function \u00e8 l&#8217;azione <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_bar_menu\/\">admin_bar_menu<\/a>. Pu\u00f2 essere agganciata per aggiungere, manipolare o rimuovere i vari elementi della barra di amministrazione. Tutti gli elementi della barra di amministrazione sono definiti come elementi di un array.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/did_action\">did_action()<\/a><\/li>\n<\/ul>\n<p>Si pu\u00f2 invocare questa action function se si vuole contare il numero di volte che un&#8217;azione viene attivata.<\/p>\n<pre><code class=\"language-php\">did_action( 'action_name' );<\/code><\/pre>\n<p>Questa funzione restituisce un valore intero.<\/p>\n<p>La funzione <code><strong>did_action()<\/strong><\/code> \u00e8 estremamente utile quando si vuole eseguire una funzione di callback solo la prima volta che un&#8217;azione viene eseguita e mai pi\u00f9.<\/p>\n<pre><code class=\"language-php\">function example_callback_function() {\n    if( did_action( 'example_action' ) === 1 ) {\n    \/\/ checks if the 'example_action' hook is fired once, and only runs then, and never again!\n    }\n}\nadd_action('example_action', 'example_callback_function');<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_action\">remove_action()<\/a><\/li>\n<\/ul>\n<p>Questa action function rimuove una funzione di callback agganciata all&#8217;azione specificata. Ad esempio, potete utilizzare questa funzione per rimuovere le funzioni predefinite di WordPress agganciate alle azioni native e sostituirle con le vostre.<\/p>\n<pre><code class=\"language-php\">remove_action( 'action_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>Ci sono alcuni prerequisiti per chiamare la funzione <code><strong>remove_action()<\/strong><\/code>:<\/p>\n<ol>\n<li>I parametri <code><strong>function_to_be_removed<\/strong><\/code> e <strong><code>priority<\/code><\/strong> devono essere gli stessi utilizzati originariamente nella funzione <code><strong>add_action()<\/strong><\/code>.<\/li>\n<li>Non \u00e8 possibile richiamare direttamente la funzione <code><strong>remove_action()<\/strong><\/code>. \u00c8 necessario chiamarla dall&#8217;interno di un&#8217;altra funzione.<\/li>\n<li>Se la funzione di callback \u00e8 registrata da una <em>classe<\/em>, la sua rimozione ha altri requisiti. Per maggiori informazioni, potete consultare la documentazione del Codex di WordPress.<\/li>\n<li>Non \u00e8 possibile rimuovere la funzione di callback prima che sia registrata o dopo che sia stata eseguita.<\/li>\n<\/ol>\n<p>Ecco un esempio di come <a href=\"https:\/\/kinsta.com\/it\/blog\/tutorial-woocommerce\/\">WooCommerce<\/a> utilizza questa action function per rimuovere la miniatura predefinita del prodotto nella pagina principale del negozio.<\/p>\n<pre><code class=\"language-php\">remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_actions\">remove_all_actions()<\/a><\/li>\n<\/ul>\n<p>Questa action function rimuove tutto ci\u00f2 che \u00e8 agganciato ad un&#8217;azione. Il parametro priority \u00e8 opzionale.<\/p>\n<pre><code class=\"language-php\">remove_all_actions( 'action_name', [priority] );<\/code><\/pre>\n<p>Ricordate che questa funzione non pu\u00f2 essere richiamata dall&#8217;azione da cui volete cancellare le funzioni di callback. Ci\u00f2 causerebbe un loop infinito. Per eseguire questa funzione senza errori, potete agganciarvi ad un&#8217;azione che \u00e8 stata attivata in precedenza.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_action\/\">doing_action()<\/a><\/li>\n<\/ul>\n<p>Questa action function controlla se l&#8217;azione specificata viene eseguita o meno. Essa restituisce un valore booleano (<code><strong>true<\/strong><\/code> o <code><strong>false<\/strong><\/code>).<\/p>\n<pre><code class=\"language-php\">\/\/ check whether the 'action_name' action is being executed\nif ( doing_action( 'action_name' ) ) {\n\u00a0 \u00a0 \/\/ execute your code here\n}<\/code><\/pre>\n<p>Potete lasciare vuoto il parametro <code><strong>action_name<\/strong><\/code> per verificare se <em>una qualsiasi<\/em> azione viene attivata. In questo caso, restituir\u00e0 <code><strong>true<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">\/\/ check if any action is running and do something\nif ( doing_action() ) {\n  \u00a0 \/\/ the code here is run when any action is fired\n}<\/code><\/pre>\n<h4>Esempio di Azione 1: Mostrare un Messaggio di Manutenzione ai Visitatori del Sito<\/h4>\n<p>A volte, \u00e8 meglio mettere il sito offline e metter su una <a href=\"https:\/\/kinsta.com\/it\/blog\/modalita-manutenzione-wordpress\/\">pagina in manutenzione<\/a>. Fortunatamente, WordPress fornisce un modo semplice per farlo.<\/p>\n<pre><code class=\"language-php\">\/\/ show a maintenance message for all your site visitors\nadd_action( 'get_header', 'maintenance_message' );\nfunction maintenance_message() {\n    if (current_user_can( 'edit_posts' )) return;\n    wp_die( '&lt;h1&gt;Stay Pawsitive!&lt;\/h1&gt;&lt;br&gt;Sorry, we\\'re temporarily down for maintenance right meow.' );\n}<\/code><\/pre>\n<p>Analizziamo il codice ad ogni passaggio:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/get_header\/\">get_header<\/a> \u00e8 un&#8217;azione che viene attivata prima che venga caricato il template file dell&#8217;header del sito. \u00c8 un&#8217;azione perfetta a cui agganciarsi se si vuole interrompere il caricamento del sito principale.<\/li>\n<li>Ci agganciamo all&#8217;azione <code><strong>get_header<\/strong><\/code> utilizzando la funzione <code><strong>add_action()<\/strong><\/code> con la funzione di callback <code><strong>maintenance_message()<\/strong><\/code>.<\/li>\n<li>Definiamo la funzione di callback <code><strong>maintenance_message()<\/strong><\/code>.<\/li>\n<li><code><strong>current_user_can( 'edit_posts' )<\/strong><\/code> \u00e8 una <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/current_user_can\/\">funzione di test delle capacit\u00e0 dell&#8217;utente<\/a> che controlla se l&#8217;utente corrente \u00e8 registrato e <a href=\"https:\/\/wordpress.org\/support\/article\/roles-and-capabilities\/#edit_posts\">pu\u00f2 modificare i messaggi<\/a>. <a href=\"https:\/\/kinsta.com\/it\/blog\/plugin-registrazione-utenti-wordpress\/\">Ogni utente registrato su un sito WordPress<\/a>, ad eccezione di quelli con ruoli di Subscriber, ha la possibilit\u00e0 di modificare i messaggi. Ci sono altri modi efficaci per eseguire questo controllo, ma qui ci atterremo a questo semplice metodo.<\/li>\n<li>Utilizziamo la funzione predefinita <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_die\/\">wp_die()<\/a> per interrompere correttamente l&#8217;esecuzione di WordPress e visualizzare una pagina HTML con un messaggio di errore. Potete utilizzare la sintassi HTML nel parametro del messaggio di errore per formattarlo.<\/li>\n<\/ul>\n<p>Dopo aver salvato il codice nel mio plugin personalizzato, ho caricato la mia installazione locale di WordPress in modalit\u00e0 di navigazione anonima. La pagina <strong>Under Maintenance<\/strong> \u00e8 stata caricata con successo!<\/p>\n<figure id=\"attachment_72274\" aria-describedby=\"caption-attachment-72274\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72274 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/mostrare-messaggio-errore-visitatori-sito.png\" alt=\"Mostrare un messaggio di errore ai visitatori del sito\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72274\" class=\"wp-caption-text\">Mostrare un messaggio di errore ai visitatori del sito<\/figcaption><\/figure>\n<p>Se ho effettuato l&#8217;accesso, il sito si carica regolarmente non appena si supera il test di capacit\u00e0 dell&#8217;utente. Ora \u00e8 possibile continuare a lavorare per sistemare il sito mentre ai visitatori regolari viene mostrata questa pagina.<\/p>\n<h4>Esempio di Azione 2: Nascondere le Voci del Menu della Bacheca per gli Utenti non Amministratori<\/h4>\n<p>Se si gestisce un <a href=\"https:\/\/kinsta.com\/it\/blog\/come-cambiare-autore-wordpress\/\">blog con pi\u00f9 autori<\/a> o si <a href=\"https:\/\/kinsta.com\/it\/blog\/manutenzione-wordpress\/\">gestisce un sito per i propri clienti<\/a>, potrebbe essere necessario nascondere alcuni menu di amministrazione dalla <a href=\"https:\/\/kinsta.com\/it\/blog\/amministrazione-wordpress\/\">bacheca di WordPress<\/a> per gli utenti non amministratori. \u00c8 possibile farlo agganciandosi all&#8217;azione <code><strong>admin_menu<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">\/\/ remove specific dashboard menus for non-admin users\nadd_action( 'admin_menu', 'hide_admin_menus' );\nfunction hide_admin_menus() {\n    if (current_user_can( 'create_users' )) return;\n    if (wp_get_current_user()-&gt;display_name == \"Salman\") return; \n    remove_menu_page( 'plugins.php' ); \n    remove_menu_page( 'themes.php' ); \n    remove_menu_page( 'tools.php' ); \n    remove_menu_page( 'users.php' ); \n    remove_menu_page( 'edit.php?post_type=page' ); \n    remove_menu_page( 'options-general.php' );\n}<\/code><\/pre>\n<p>Ecco una spiegazione passo passo del frammento di codice qui sopra:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_menu\/\">admin_menu<\/a> \u00e8 un&#8217;azione che si attiva prima che il menu admin si carichi nell&#8217;area di amministrazione di WordPress.<\/li>\n<li>Ci agganciamo all&#8217;azione <code><strong>admin_menu<\/strong><\/code> utilizzando la funzione <code><strong>add_action()<\/strong><\/code> con la funzione di callback <code><strong>hide_admin_menus()<\/strong><\/code>.<\/li>\n<li>La funzione di callback <code><strong>hide_admin_menus()<\/strong><\/code> definisce la logica del codice. Viene eseguita ogni volta che l&#8217;azione <code><strong>admin_menu<\/strong><\/code> si attiva.<\/li>\n<li>All&#8217;interno della funzione di callback, la funzione <code><strong>current_user_can( 'create_users' )<\/strong><\/code> controlla se l&#8217;utente registrato \u00e8 un amministratore. Poich\u00e9 solo gli amministratori del sito hanno la capadit\u00e0 <code><strong>create_user<\/strong><\/code>, la funzione termina con una dichiarazione <code><strong>return<\/strong><\/code> se l&#8217;utente \u00e8 un amministratore.<\/li>\n<li>La funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_current_user\/\">wp_get_current_user()<\/a> di WordPress recupera l&#8217;oggetto utente corrente. Con questa funzione, possiamo verificare se l&#8217;utente registrato ha un particolare <code><strong>display_name<\/strong><\/code>. Questa \u00e8 una linea opzionale, nel caso in cui vogliate evitare che alcuni utenti non admin vengano bloccati a causa di questa funzione di callback.<\/li>\n<li>La funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_menu_page\/\">remove_menu_page()<\/a> di WordPress rimuove i menu di amministrazione di primo livello. Nel codice dell&#8217;esempio di cui sopra, vengono rimossi i seguenti menu di amministrazione: Plugin, Temi, Strumenti, Utenti, Pagine e Opzioni.<\/li>\n<\/ul>\n<p>Dopo aver salvato il file del plugin, ecco un&#8217;istantanea del cruscotto di WordPress con un amministratore connesso.<\/p>\n<figure id=\"attachment_72251\" aria-describedby=\"caption-attachment-72251\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72251 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/cruscotto-amministrazione-wordpress-default.png\" alt=\"Il cruscotto di amministrazione predefinito di WordPress\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72251\" class=\"wp-caption-text\">Il cruscotto di amministrazione predefinito di WordPress<\/figcaption><\/figure>\n<p>Ed ecco una schermata del cruscotto di WordPress con un utente non amministratore connesso.<\/p>\n<figure id=\"attachment_72249\" aria-describedby=\"caption-attachment-72249\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72249 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/nascondere-sensibili-menu-amministrazione-utenti-amministratori.png\" alt=\"Nascondere le voci sensibili del menu di amministrazione agli utenti non amministratori\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72249\" class=\"wp-caption-text\">Nascondere le voci sensibili del menu di amministrazione agli utenti non amministratori<\/figcaption><\/figure>\n<p>Questa soluzione nasconde dalla bacheca di WordPress solo le voci del menu di amministrazione specificate. Tutti gli utenti possono comunque accedervi inserendo gli URL dei menu nel loro browser.<\/p>\n<p>Per impedire ad alcuni <a href=\"https:\/\/kinsta.com\/it\/blog\/ruoli-utente-wordpress\/\">ruoli utente<\/a> di accedere a menu specifici, \u00e8 necessario modificare le loro capacit\u00e0.<\/p>\n<h3 id=\"hooking-a-filter\">Agganciare un Filtro<\/h3>\n<p>I filtri offrono un modo per modificare i dati utilizzati da altre funzioni di WordPress attraverso vostro codice personalizzato. A differenza delle azioni, le funzioni agganciate ai filtri devono restituire un valore.<\/p>\n<h4>La Funzione Filtro add_filter()<\/h4>\n<p>Potete agganciare una funzione di callback ad un filtro seguendo questi passaggi:<\/p>\n<ol>\n<li>Definire una <strong>funzione di Callback<\/strong> che venga eseguita quando WordPress attiva il filtro. Le funzioni di callback per i filtri devono avere specificato almeno un argomento, in quanto tutti i filtri passano almeno un valore alle loro funzioni di callback.<\/li>\n<li>Registrare la funzione di calback su un filtro con la funzione <code><strong>add_filter()<\/strong><\/code>. Il filtro si occuper\u00e0 di invocare la funzione callback. Come per riportato nel Codex di WordPress, la funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\">add_filter()<\/a> richiede che vengano passati almeno due parametri:\n<ul>\n<li>Nome del filtro da agganciare.<\/li>\n<li>Nome della funzione di callback che verr\u00e0 eseguita all&#8217;attivazione del filtro.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>La funzione <code><strong>add_filter()<\/strong><\/code> accetta anche due ulteriori parametri opzionali per l&#8217;impostazione della <code><strong>priorit\u00e0<\/strong><\/code> e del <code><strong>niumero di argomenti<\/strong><\/code>. Questi parametri funzionano allo stesso modo della funzione <code><strong>add_action()<\/strong><\/code>.<\/li>\n<\/ol>\n<p>Ecco un esempio di come utilizzare la funzione <code><strong>add_filter()<\/strong><\/code> per agganciare una funzione di callback ad un filtro.<\/p>\n<pre><code class=\"language-php\">\/\/ define the filter callback function with at least one argument passed\n\/\/ the number of arguments that you can pass depends on how the filter is defined\nfunction filter_callback_function( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments and return something\n\u00a0 \u00a0 return $something;\n}\n\n\/\/ now hook the callback function to the 'example_filter'\nadd_filter( 'example_filter', 'filter_callback_function', [priority], [no_of_args] );\n\n\/\/ '10' is the default priority set for the callback function\n\/\/ and '1' is the default number of arguments passed<\/code><\/pre>\n<h4>Esempio di Aggancio di un Filtro<\/h4>\n<p>WordPress dispone di un filtro chiamato <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/login_message\">login_message<\/a> che permette di filtrare il messaggio visualizzato nella pagina di login al di sopra del modulo di accesso. Il valore restituito da questo filtro pu\u00f2 avere un <a href=\"https:\/\/kinsta.com\/it\/blog\/editor-html-gratuiti\/\">markup HTML<\/a>.<\/p>\n<p>Agganciamoci al filtro <code><strong>login_message<\/strong><\/code> e modifichiamo il messaggio visualizzato nella schermata di login.<\/p>\n<pre><code class=\"language-php\">\/\/ show a custom login message above the login form\nfunction custom_login_message( $message ) {\n\u00a0 \u00a0 if ( empty( $message ) ) {\n\u00a0 \u00a0 \u00a0 \u00a0 return \"&lt;h2&gt;Welcome to Let's Develop by Salman Ravoof! Please log in to start learning.&lt;\/h2&gt;\";\n\u00a0 \u00a0 } \n    else {\n\u00a0 \u00a0 \u00a0 \u00a0 return $message;\n\u00a0 \u00a0 }\n}\nadd_filter( 'login_message', 'custom_login_message' );<\/code><\/pre>\n<p>La dichiarazione <code><strong>if-else<\/strong><\/code> presente nella funzione di callback controlla se il messaggio di login \u00e8 gi\u00e0 impostato, per lo pi\u00f9 da un altro plugin o da un tema. In questi casi, la funzione di callback restituisce il valore originale senza modifiche. Questo \u00e8 un modo per evitare conflitti con altri temi o plugin.<\/p>\n<p>Il messaggio viene visualizzato sopra il modulo di login nella <a href=\"https:\/\/kinsta.com\/it\/blog\/url-login-wordpress\/\">pagina di login di WordPress<\/a>.<\/p>\n<figure id=\"attachment_72252\" aria-describedby=\"caption-attachment-72252\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72252 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/visualizzazione-messaggio-login-personalizzato-modulo-login.png\" alt=\"Visualizzazione di un messaggio di login personalizzato sopra il modulo di accesso\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72252\" class=\"wp-caption-text\">Visualizzazione di un messaggio di login personalizzato sopra il modulo di accesso<\/figcaption><\/figure>\n<p>\u00c8 possibile personalizzare l&#8217;aspetto di tutti gli elementi della pagina di login, inserendo fogli di stile personalizzati. In questo modo potrete personalizzare completamente la vostra pagina di accesso predefinita di WordPress.<\/p>\n<p>Imparerete come caricare fogli di stile personalizzati utilizzando le azioni descritte nella sezione &#8220;Personalizzare la Pagina di Accesso di WordPress con gli Hook&#8221;.<\/p>\n<h4>Trovare i Filtri Supportati da WordPress<\/h4>\n<p>Ovunque WordPress elabori o modifichi dati, \u00e8 quasi certamente possibile trovare un filtro cui agganciarsi per modificarli. Pensate ai filtri come a un&#8217;interfaccia tra il <a href=\"https:\/\/kinsta.com\/it\/blog\/riparare-il-database-di-wordpress\/\">database di WordPress<\/a> e il browser.<\/p>\n<p>Un elenco esaustivo di tutti i filtri supportati da WordPress \u00e8 disponibile nella pagina <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\">Plugin API\/Filter Reference<\/a>.<\/p>\n<figure id=\"attachment_72258\" aria-describedby=\"caption-attachment-72258\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72258 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-fornisce-varieta-filtri-hook.png\" alt=\"WordPress fornisce una variet\u00e0 di filtri cui agganciarsi\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72258\" class=\"wp-caption-text\">WordPress fornisce una variet\u00e0 di filtri cui agganciarsi<\/figcaption><\/figure>\n<p>Tutti i filtri elencati sono suddivisi in pi\u00f9 categorie e disposti dall&#8217;alto verso il basso nell&#8217;ordine di esecuzione di WordPress.<\/p>\n<p>Se volete trovare dei filtri cui agganciarvi nel codice sorgente di WordPress, effettuate una ricerca del termine &#8220;<strong>apply_filters<\/strong>&#8221; e otterrete tonnellate di risultati. Anche la <a href=\"https:\/\/developer.wordpress.org\/reference\/\">WordPress Code Reference<\/a> \u00e8 un ottimo posto per cercare tutto ci\u00f2 che \u00e8 incluso in WordPress, tra cui le azioni e i filtri.<\/p>\n<h4>Come il Core di WordPress Utilizza i Filtri<\/h4>\n<p>Lo stesso Core di WordPress utilizza molti dei suoi filtri incorporati per modificare i dati utilizzati dalle sue varie funzioni.<\/p>\n<p>Si consideri ad esempio il filtro <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\">the_content<\/a>. Questo filtra i contenuti dopo che sono stati recuperati dal database e prima che vengano visualizzati dal browser.<\/p>\n<p>Proprio come avviene per le azioni, potete trovare la maggior parte delle filter function del Core di WordPress relative all&#8217;hook\u00a0<code><strong>the_content<\/strong><\/code> nel file <strong><code>wp-includes\/default-filters.php<\/code>.<\/strong><\/p>\n<p>Ecco un elenco di tutte le funzioni <code><strong>add_filter()<\/strong><\/code> del Core che si agganciano al filtro <strong><code>the_content<\/code><\/strong>:<\/p>\n<pre><code class=\"language-php\">add_filter( 'the_content', 'do_blocks', 9 );\nadd_filter( 'the_content', 'wptexturize' );\nadd_filter( 'the_content', 'convert_smilies', 20 );\nadd_filter( 'the_content', 'wpautop' );\nadd_filter( 'the_content', 'shortcode_unautop' );\nadd_filter( 'the_content', 'prepend_attachment' );\nadd_filter( 'the_content', 'wp_make_content_images_responsive' );\nadd_filter( 'the_content', 'do_shortcode', 11 ); \/\/ AFTER wpautop().\u00a0<\/code><\/pre>\n<p>Si noti la priority specificata per alcune funzioni di callback.<\/p>\n<p>Ad esempio, la funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_blocks\/\">do_blocks()<\/a> analizza qualsiasi blocco dinamico nel contenuto del post e lo visualizza nuovamente per renderlo compatibile con il <a href=\"https:\/\/kinsta.com\/it\/blog\/gutenberg-editor-wordpress\/\">nuovo editor di blocchi di WordPress<\/a>. Viene specificata una priority pi\u00f9 alta rispetto a quella predefinita (10) per assicurarsi che il contenuto sia pronto per il blocco prima che altre funzioni vengano eseguite.<\/p>\n<p>La funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/convert_smilies\/\">convert_smilies()<\/a> \u00e8 impostata per funzionare con una priority inferiore, dato che il suo compito \u00e8 quello di convertire gli smileys di testo in sprite di immagini. Ha senso, quindi, che venga eseguita alla fine, dopo aver filtrato tutto il contenuto del post.<\/p>\n<p>Fatto curioso: gli shortcode sono un sottoinsieme di filtri. Prendono l&#8217;input dal codice dello shortcode, lo elaborano e poi vi restituiscono l&#8217;output. Potete saperne di pi\u00f9 sugli shortcode in questa <a href=\"https:\/\/kinsta.com\/it\/blog\/shortcode-wordpress\/\">guida agli shortcode di WordPress<\/a>.<\/p>\n<h4>Altre Filter Function<\/h4>\n<p>Mentre <code><strong>add_filter()<\/strong><\/code> \u00e8 la filter function pi\u00f9 utilizzata, ci sono molte altre utili funzioni filtro. Analizziamole tutte in modo approfondito.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_filter\">has_filter()<\/a><\/li>\n<\/ul>\n<p>Questa funzione controlla se il filtro specificato \u00e8 agganciato da una qualsiasi funzione. Accetta due parametri. Il primo parametro \u00e8 per l&#8217;inserimento del nome del filtro. Il secondo parametro \u00e8 opzionale e serve per inserire il nome della funzione di callback.<\/p>\n<pre><code class=\"language-php\">has_filter( 'filter_name', 'function_to_check' );<\/code><\/pre>\n<p>Se si specifica solo il primo parametro, questo restituir\u00e0 <code><strong>true<\/strong><\/code> se il <code><strong>filter_name<\/strong><\/code> \u00e8 agganciato a una <em>qualsiasi<\/em> funzione.<\/p>\n<p>Tuttavia, se si specificano entrambi i parametri, allora restituir\u00e0 <code><strong>false<\/strong><\/code> se la funzione di calback specificata non \u00e8 registrata sul filtro dato. Se trova la funzione di callback registrata sul filtro, allora restituir\u00e0 la <code><strong>priority<\/strong><\/code> (un numero intero) impostata per quella funzione su questo filtro.<\/p>\n<p>Una possibile applicazione della funzione <code><strong>has_filter()<\/strong><\/code> \u00e8 quella di verificare se un filtro \u00e8 gi\u00e0 stato agganciato e, in base a questo, procedere con l&#8217;esecuzione del codice.<\/p>\n<pre><code class=\"language-php\">\/\/ check to see if 'the_content' filter has been hooked\nif ( ! has_filter( 'the_content' ) {\n\u00a0 \u00a0 \/\/ hook the filter if and only if it hasn't been hooked before\n\u00a0 \u00a0 add_filter( 'the_content', 'modify_the_content' );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\">apply_filters()<\/a><\/li>\n<\/ul>\n<p>Questa filter function \u00e8 come la action function <code><strong>do_action()<\/strong><\/code>. Qualsiasi funzione di callback agganciata a questo filtro verr\u00e0 eseguita ovunque questa funzione si trovi nel codice di WordPress.<\/p>\n<p>Potete anche utilizzare questa funzione per creare un nuovo filtro personalizzato specificando il nome e il valore del filtro come parametri.<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_filter', [argument1], [argument2] );<\/code><\/pre>\n<p>Non dimenticate di specificare eventuali argomenti aggiuntivi se volete trasmetterli alle vostre funzioni di callback. La maggior parte dei filtri utilizza un solo argomento, quindi \u00e8 facile perdere l&#8217;occasione di definire gli argomenti aggiuntivi.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/apply_filters_ref_array\">apply_filters_ref_array()<\/a><\/li>\n<\/ul>\n<p>Questa funzione \u00e8 come la funzione <code><strong>apply_filters()<\/strong><\/code>, tranne per il fatto che tutti gli argomenti che accetta sono raggruppati in un array.<\/p>\n<pre><code class=\"language-php\">\/\/ an example array\n$arguments_array = array( 'some_value', 'foo', false, 'another_value' );\n\napply_filters_ref_array( 'example_filter', $arguments_array );<\/code><\/pre>\n<p>Questa filter function pu\u00f2 essere utile quando si hanno molti argomenti da passare o se tutti sono gi\u00e0 in un array. Assicuratevi che gli argomenti all&#8217;interno dell&#8217;array siano nel giusto ordine.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/current_filter\">current_filter()<\/a><\/li>\n<\/ul>\n<p>Questa funzione filtro recupera il nome del filtro o dell&#8217;azione in esecuzione. Non \u00e8 necessario specificare alcun parametro poich\u00e9 viene eseguito all&#8217;interno della funzione di callback.<\/p>\n<p>Ecco un esempio del suo utilizzo:<\/p>\n<pre><code class=\"language-php\">function example_callback() {\n\u00a0 \u00a0 echo current_filter(); \/\/ 'the_title' will be echoed\n\u00a0 \u00a0 return\n}\nadd_filter( 'the_title', 'example_callback' );<\/code><\/pre>\n<p>Nonostante il suo nome, questa funzione pu\u00f2 recuperare il nome sia delle azioni che dei filtri.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/\">remove_filter()<\/a><\/li>\n<\/ul>\n<p>Questa funzione rimuove la funzione di callback collegata al filtro specificato. Funziona esattamente come la funzione <code><strong>remove_action()<\/strong><\/code>. Si pu\u00f2 utilizzare per cancellare le funzioni predefinite di WordPress registrate su un filtro specifico e, se necessario, sostituirle con le proprie funzioni.<\/p>\n<pre><code class=\"language-php\">remove_filter( 'filter_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>Per sganciare una funzione di callback agganciata ad un filtro, i parametri di <strong><code>function_to_be_removed<\/code><\/strong>\u00a0e di <code><strong>priority<\/strong><\/code> devono essere identici agli argomenti utilizzati quando si aggancia la funzione di callback.<\/p>\n<p>Se il filtro \u00e8 stato aggiunto dall&#8217;interno di una classe, cosa che di solito avviene quando vengono aggiunti dai plugin, allora \u00e8 necessario <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/#comment-613\">accedere alla variabile della classe per rimuovere il filtro<\/a>.<\/p>\n<pre><code class=\"language-php\">\/\/ access the class variable first, and then remove the filter through it\nglobal $some_class;\n\nremove_filter( 'the_content', array($some_class, 'class_filter_callback') );<\/code><\/pre>\n<p>Vediamo un ottimo esempio di <code><strong>remove_filter()<\/strong><\/code> in azione.<\/p>\n<p>Il <a href=\"https:\/\/kinsta.com\/it\/blog\/plugin-wordpress-ecommerce\/#woocommerce\">plugin WooCommerce<\/a> utilizza la funzione di chiamata <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#13-39\">wc_lostpassword_url()<\/a> agganciata al suo filtro <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#41\">lostpassword_url<\/a> per reindirizzare i tentativi &#8220;<em>Lost Your Password? <\/em>&#8221; degli utenti.<\/p>\n<p>Basta un clic su quel link per accedere a una pagina del frontend personalizzata con l&#8217;URL <code><strong>\/my-account\/lost-password<\/strong><\/code>. Senza questo filtro, gli utenti sarebbero indirizzati all&#8217;URL standard di login di WordPress all&#8217;indirizzo <strong><code>\/wp-login.php<\/code><\/strong>.<\/p>\n<p>Supponete di voler ripristinare questa funzionalit\u00e0 e inviare i vostri utenti alla <a href=\"https:\/\/kinsta.com\/it\/blog\/cambiare-password-wordpress\/\">pagina di recupero password predefinita<\/a> o ad una pagina diversa. Potete rimuovere questa funzione di callback in questo modo:<\/p>\n<pre><code class=\"language-php\">remove_filter( 'lostpassword_url', 'wc_lostpassword_url', 10 );\u00a0<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_filters\">remove_all_filters()<\/a><\/li>\n<\/ul>\n<p>Questa funzione filtro rimuove tutte le funzioni di callback registrate su un filtro.<\/p>\n<pre><code class=\"language-php\">remove_all_filters( 'filter_name', [priority] );<\/code><\/pre>\n<p>\u00c8 simile alla funzione <code><strong>remove_all_actions()<\/strong><\/code>.<\/p>\n<p>Il popolare <a href=\"https:\/\/github.com\/KimcoBlogSC\/Blog\/blob\/master\/wp-content\/plugins\/advanced-excerpt\/functions\/functions.php\">plugin Advanced Excerpts<\/a> utilizza questa funzione per rimuovere tutte le funzioni predefinite agganciate ai filtri <code><strong>the_excerpt<\/strong><\/code> e <strong><code>get_the_excerpt<\/code><\/strong>. Dopo aver fatto questo, aggancia la propria funzione di callback al filtro.<\/p>\n<pre><code class=\"language-php\">\/\/ Ensure our filter is hooked, regardless of the page type \nif ( ! has_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) ) ) {\n    remove_all_filters( 'get_the_excerpt' ); \n    remove_all_filters( 'the_excerpt' ); \n    add_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_filter\/\">doing_filter()<\/a><\/li>\n<\/ul>\n<p>Questa funzione controlla se il filtro specificato viene eseguito in quel momento.<\/p>\n<pre><code class=\"language-php\">if ( doing_filter( 'save_post' ) ) {\n  \u00a0 \/\/ run your code here\n}<\/code><\/pre>\n<p>Restituisce un valore booleano (<code><strong>true<\/strong><\/code> o <code><strong>false<\/strong><\/code>).<\/p>\n<p>Si dovrebbe notare la differenza tra questa funzione e la funzione <code><strong>current_filter()<\/strong><\/code>, che restituisce il nome del filtro o dell&#8217;azione in esecuzione (una stringa).<\/p>\n<h4>Esempio di Filtro 1: Aggiungere un Filtro delle Volgarit\u00e0 per i Commenti<\/h4>\n<p>La gestione di tutti i <a href=\"https:\/\/kinsta.com\/it\/blog\/plugin-commenti-wordpress\/\">commenti sul vostro sito WordPress<\/a> pu\u00f2 essere un procedura macchinoso. Il filtro <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\">comment_text<\/a> consente di impostare delle regole per modificare i commenti prima che vengano stampati sul display.<\/p>\n<figure id=\"attachment_72268\" aria-describedby=\"caption-attachment-72268\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72268 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/commenti-filtrati-bestemmie-fantoccio-contrassegnati.png\" alt=\"Commenti non filtrati con volgarit\u00e0 evidenziate\" width=\"1100\" height=\"563\"><figcaption id=\"caption-attachment-72268\" class=\"wp-caption-text\">Commenti non filtrati con volgarit\u00e0 evidenziate<\/figcaption><\/figure>\n<p>Potete istruire WordPress in modo che rimuova automaticamente eventuali imprecazioni prima che vengano visualizzate ai visitatori del sito. Diamoci da fare.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into the 'comment_text' filter with the callback function\nadd_filter( 'comment_text', 'the_profanity_filter' );\n\n\/\/ define a callback function to filter profanities in comments \nfunction the_profanity_filter( $comment_text ) {\n    \/\/ define an array of profane words and count how many are there \n    $profaneWords = array('fudge', 'darn', 'pickles', 'blows', 'dangit');\n    $profaneWordsCount = sizeof($profaneWords);\n    \n    \/\/ loop through the profanities in $comment_text and replace them with '*'\n    for($i=0; $i &lt; $profaneWordsCount; $i++) {\n        $comment_text = str_ireplace( $profaneWords[$i], str_repeat('*', strlen( $profaneWords[$i]) ), $comment_text );\n    } \n    \n    return $comment_text;\n}<\/code><\/pre>\n<p>Ecco un&#8217;analisi del codice riga per riga:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\">comment_text<\/a> \u00e8 un filtro che permette di modificare il testo di un commento prima che il browser lo visualizzi. Potete registrare la vostra funzione di callback per filtrarne l&#8217;output.<\/li>\n<li>La funzione <code><strong>add_filter()<\/strong><\/code> permette di agganciarsi al filtro <code><strong>comment_text<\/strong><\/code> e di collegarvi una funzione di callback.<\/li>\n<li><code><strong>the_profanity_filter()<\/strong><\/code> \u00e8 il nome della funzione di callback. Accetta solo un parametro, che \u00e8 una stringa contenente il testo del commento. Definite questa funzione personalizzata con la logica di codice appropriata.<\/li>\n<li>Memorizza tutte le parole volgari in un array PHP chiamato <code><strong>profaneWords<\/strong><\/code>. A questo array si possono aggiungere tutte le parole che desiderate. Memorizzo la dimensione di questo array nella variabile <code><strong>profaneWordsCount<\/strong><\/code> con l&#8217;aiuto della <a href=\"https:\/\/www.php.net\/manual\/en\/function.sizeof.php\">funzione PHP sizeof()<\/a>.<\/li>\n<li>Esamina tutte le parole volgari e utilizza la <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-ireplace.php\">funzione str_ireplace()<\/a> predefinita di PHP per sostituire qualsiasi parola volgare corrispondente con i simboli <code><strong>*<\/strong><\/code>. Dato che si tratta di una funzione di sostituzione delle stringhe che non distingue tra maiuscole e minuscole, non vi dovete preoccupare della capitalizzazione. Scopri i Diversi Modi per Eseguire un &#8220;<a href=\"https:\/\/kinsta.com\/it\/blog\/cerca-e-sostituisci-in-wordpress\/\">Ricerca e Sostituzione<\/a>&#8220;.<\/li>\n<li><code><strong>return<\/strong><\/code> restituisce il testo del commento filtrato.<\/li>\n<\/ul>\n<p>Salvate le modifiche nel file del vostro plugin personalizzato e ricaricate qualsiasi post con i commenti. Tutte le parole che avete incluso nell&#8217;array <code><strong>profaneWords<\/strong><\/code> dovrebbero ora essere sostituite con i simboli &#8216;<strong>*<\/strong>&#8216;.<\/p>\n<figure id=\"attachment_72256\" aria-describedby=\"caption-attachment-72256\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72256 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/censurare-bestemmie-commenti-simboli.png\" alt=\"Sostituire le parole volgari nei commenti con i simboli '*'.\" width=\"1100\" height=\"563\"><figcaption id=\"caption-attachment-72256\" class=\"wp-caption-text\">Sostituire le parole volgari nei commenti con i simboli &#8216;*&#8217;.<\/figcaption><\/figure>\n<p>I commenti originali saranno ancora disponibili cos\u00ec come sono nel database. Questo filtro modifica il testo del commento solo prima che venga inviato al frontend.<\/p>\n<figure id=\"attachment_72263\" aria-describedby=\"caption-attachment-72263\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72263 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/commento-originale-backend-sito.png\" alt=\"Il commento originale sul backend del sito\" width=\"1100\" height=\"498\"><figcaption id=\"caption-attachment-72263\" class=\"wp-caption-text\">Il commento originale sul backend del sito<\/figcaption><\/figure>\n<p>Una volta agganciati al filtro giusto, potete fare un sacco di cose interessanti.<\/p>\n<p>Ad esempio, potete anche utilizzare il filtro <code><strong>comment_text<\/strong><\/code> per rimuovere eventuali URL da tutti i commenti (assicuratevi di leggere questa guida approfondita su <a href=\"https:\/\/kinsta.com\/it\/blog\/commenti-spam-wordpress\/\">come bloccare i commenti spam in WordPress<\/a>).<\/p>\n<p>Oppure potete agganciarvi al filtro <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_comment_approved\/\">pre_comment_approved<\/a> e contrassegnare i commenti come approvati, spam o thrash in base a criteri predefiniti.<\/p>\n<h4>Esempio di Filtro 2: Inserire Contenuto Dopo un Post<\/h4>\n<p>Avete gi\u00e0 visto come WordPress utilizza il filtro <code><strong>the_content<\/strong><\/code> per modificare i contenuti dei post e delle pagine. Utilizziamo lo stesso filtro per aggiungere qualcosa alla fine di ogni post.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into 'the_content' filter with a callback function\nadd_filter( 'the_content', 'insert_content_below' );\n\n\/\/ define the callback function to insert something below the post\nfunction insert_content_below( $content ) {\n    \/\/ check to see if we're inside the main loop in a single post\n    if ( is_single() && in_the_loop() && is_main_query() ) {\n  \u00a0     return $content . \"&lt;h3 style=\\\"text-align: center;\\\"&gt;Let me insert myself here&lt;\/h3&gt;&lt;p style=\\\"text-align: center;border: 3px solid #5333ed;\\\"&gt;I'll appear after the post. You can insert anything here. Even HTML. Headers, links, images, scripts, I'll take them all and append it to the end of the post content. You can also give me a class, so you can style me easily with CSS style sheets.&lt;\/p&gt;\" ;\n    } \n    \n    return $content;\n}<\/code><\/pre>\n<p>Capiamo la logica del codice dell&#8217;esempio precedente:<\/p>\n<ul>\n<li>Il filter hook\u00a0\u00a0<strong><code>the_content<\/code><\/strong>\u00a0permette di afferrare il contenuto del post corrente e personalizzarlo.<\/li>\n<li>Utilizza la funzione <code><strong>add_filter()<\/strong><\/code> per agganciarsi al filtro the_content con la funzione di callback <code><strong>insert_content_below()<\/strong><\/code>.<\/li>\n<li>Definisce la funzione di callback passando il contenuto del post corrente come parametro (<code><strong>$content<\/strong><\/code>).<\/li>\n<li>All&#8217;interno della funzione di callback, verificate di filtrare solo il contenuto della query principale, che in questo caso \u00e8 il contenuto del post. Se non si verifica questo, a volte il codice filtra inavvertitamente il contenuto di altri elementi, come le barre laterali e i footer.<\/li>\n<li>Le condizioni <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_main_query\/\">is_main_query()<\/a> e <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/in_the_loop\/#comment-1364\">in_the_loop()<\/a> stabiliscono se la query \u00e8 una query principale e avviene all&#8217;interno del Loop principale di WordPress.<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_single\/\">is_single()<\/a> verifica se la query \u00e8 per un singolo post.<\/li>\n<li>Utilizza l&#8217;<a href=\"https:\/\/www.php.net\/manual\/en\/language.operators.string.php\">operatore di concatenazione di stringhe<\/a> di PHP (<code><strong>$content . \"your additions\"<\/strong><\/code>) per aggiungere roba extra al contenuto della pagina.<\/li>\n<li><code><strong>resturn<\/strong><\/code> restituisce\u00a0il contenuto filtrato se tutte le condizioni di cui sopra sono state verificate. Se non lo sono, allora restituisce il contenuto senza modifiche.<\/li>\n<\/ul>\n<p>Salvate il file del vostro plugin, caricate qualsiasi post sul vostro sito e scorrete fino alla fine.<\/p>\n<figure id=\"attachment_72261\" aria-describedby=\"caption-attachment-72261\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72261 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2020\/05\/Insert-Content-After-Post-Guide.png\" alt=\"Inserire qualcosa alla fine del contenuto del post\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72261\" class=\"wp-caption-text\">Inserire qualcosa alla fine del contenuto del post<\/figcaption><\/figure>\n<p>Potete seguire la stessa logica per aggiungere qualcosa all&#8217;inizio di tutti i vostri post invertendo la posizione dei parametri di concatenazione delle stringhe (<code><strong>\"your additions\" . $content<\/strong><\/code>).<\/p>\n<h3 id=\"customize-the-wordpress-login-page-with-hooks\">Personalizzare la Pagina di Login di WordPress con gli Hook<\/h3>\n<p>Utilizziamo sia le azioni che i filtri per personalizzare la <a href=\"https:\/\/kinsta.com\/it\/blog\/url-login-wordpress\/\">pagina di login di default di WordPress<\/a>. Per farlo, creer\u00f2 un nuovo plugin chiamato <strong>Sal Custom Login Page<\/strong>. Potete trovare il codice sorgente completo di questo plugin alla fine di questa sezione.<\/p>\n<figure id=\"attachment_72243\" aria-describedby=\"caption-attachment-72243\" style=\"width: 1110px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72243 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/schermata-accesso-finale-personalizzata-wordpress.jpg\" alt=\"La schermata di accesso personalizzata di WordPress\" width=\"1110\" height=\"700\"><figcaption id=\"caption-attachment-72243\" class=\"wp-caption-text\">La schermata di accesso personalizzata di WordPress<\/figcaption><\/figure>\n<p>Iniziamo aggiungendo i campi di intestazione standard del plugin e registrandolo con WordPress.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Sal Custom Login Page\nVersion:  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) by customizing the WordPress login page.\nAuthor:  Salman Ravoof\nAuthor URI:  https:\/\/www.salmanravoof.com\/License: GPLv2 or later\nLicense URI: https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  sal-custom-login-page\n*\/\n\n\/\/ enqueueing the custom style sheet on WordPress login page\nadd_action( 'login_enqueue_scripts', 'salhooks_login_stylesheet');\nfunction salhooks_login_stylesheet() {\n    \/\/ Load the style sheet from the plugin folder\n    wp_enqueue_style( 'sal-custom-login-page', plugin_dir_url( __FILE__ ).'sal-custom-login-page-styles.css' );\n}<\/code><\/pre>\n<p>Per prima cosa, agganciatevi all&#8217;azione <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_enqueue_scripts\/\">login_enque_scripts<\/a> per accodare il vostro foglio di stile personalizzato. Tutti gli script o gli stili che avete inserito qui sono inclusi nella sezione di testa della vostra pagina di login.<\/p>\n<p>Se volete caricare script e fogli di stile personalizzati sul frontend del vostro sito (piuttosto che sul backend di amministrazione o nell&#8217;area di login), allora \u00e8 necessario agganciarsi all&#8217;azione <code><strong>wp_enqueue_scripts<\/strong><\/code>. Potete saperne di pi\u00f9 nel <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_enqueue_scripts\/\">Codex di WordPress<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/wp-enqueue-scripts\/\">nell&#8217;articolo di Kinsta su come utilizzare wp_enqueue_scripts<\/a>.<\/p>\n<p>All&#8217;interno della funzione di callback <code><strong>salhooks_login_stylesheet()<\/strong><\/code>, usate la funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\">wp_enqueue_style()<\/a> per caricare il foglio di stile personalizzato (<code><strong>sal-custom-login-page-styles.css<\/strong><\/code>) posto nella directory del plugin stesso. La funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/plugin_dir_url\/\">plugin_dir_url( __FILE__ )<\/a> integrata in WordPress rende facile ottenere il percorso dell&#8217;URL (con una barra finale) della directory del plugin corrente.<\/p>\n<p>Non vi spiegher\u00f2 gli <a href=\"https:\/\/kinsta.com\/it\/blog\/wordpress-css\/#wordpress-and-css\">stili CSS<\/a> applicati qui, ma li potete trovare tutti nel codice sorgente collegato alla fine di questa sezione.<\/p>\n<pre><code class=\"language-php\">\/\/ Custom login ERROR message to keep the site more secure\nadd_filter( 'login_errors', 'salhooks_remove_login_errors', 10 );\nfunction salhooks_remove_login_errors() {\n    return 'Incorrect credentials. Please try again!';\n}<\/code><\/pre>\n<p>Successivamente, agganciatevi al filtro <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_errors\/\">login_errors<\/a> per modificare il messaggio di errore mostrato quando qualcuno inserisce credenziali errate. Il filtro del messaggio di errore impedir\u00e0 agli aggressori di indovinare facilmente il vostro nome utente.<\/p>\n<pre><code class=\"language-php\">\/\/ Remove the login form box shake animation for incorrect credentials\nadd_action( 'login_head', 'remove_login_error_shake' );\nfunction remove_login_error_shake() {\n    remove_action( 'login_head', 'wp_shake_js', 12 );\n}<\/code><\/pre>\n<p>Ogni volta che qualcuno inserisce credenziali di accesso errate, la casella del modulo di accesso trema in modo aggressivo. Questo \u00e8 un passaggio facoltativo, ma l&#8217;ho incluso per mostrare che \u00e8 anche possibile rimuovere alcune funzionalit\u00e0 dalla pagina di login.<\/p>\n<p>Per saperne di pi\u00f9 sulle funzioni <code><strong>remove_action()<\/strong><\/code> e <code><strong>remove_filter()<\/strong><\/code>, andate alla sezione finale di questo articolo.<\/p>\n<pre><code class=\"language-php\">\/\/ Change the logo and header link above the login form\nadd_filter( 'login_headerurl', 'salhooks_login_headerurl');\nfunction salhooks_login_headerurl( $url ) {\n    $url = 'https:\/\/salmanravoof.com';\n    return $url;\n}\n\nadd_filter( 'login_headertext', 'salhooks_login_headertext');\nfunction salhooks_login_headertext( $text ) {\n    $text = 'Salman Ravoof';\n    return $text;\n}<\/code><\/pre>\n<p>L&#8217;ultimo passaggio consiste nel modificare l&#8217;URL e il testo dell&#8217;intestazione del login. \u00c8 possibile agganciarsi ai filtri <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headerurl\/\">login_headerurl<\/a> e <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headertext\/\">login_headertext<\/a> per modificarli entrambi.<\/p>\n<p>Se volete costruire su questo plugin e sperimentare ulteriormente, potete <a href=\"https:\/\/github.com\/SalmanRavoof\/sal-custom-login-page\">scaricare il codice sorgente del plugin<\/a> e iniziare il lavoro.<\/p>\n<h2 id=\"wordpress-hooks-list-and-resources\">Elenco e Risorse sugli Hook di WordPress<\/h2>\n<p>\u00c8 difficile memorizzare tutti i vari hook di WordPress. Ci sono migliaia di azioni e filtri incorporati cui agganciarsi. Quindi, trovare un hook appropriato pu\u00f2 a volte sembrare una caccia al tesoro.<\/p>\n<p>Per fortuna, ci sono molte risorse che potete utilizzare per identificare l&#8217;hook perfetto per le vostre esigenze.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\">WordPress Plugin Handbook \u2014 Hooks<\/a><\/li>\n<\/ul>\n<p>Il primo posto per familiarizzare con gli hook \u00e8 il Codex di WordPress, in particolare la sua sezione Hooks nel Plugin Handbook. Qui si possono trovare informazioni essenziali sugli hook e link per una documentazione completa su tutte le azioni e i filtri.<\/p>\n<figure id=\"attachment_72272\" aria-describedby=\"caption-attachment-72272\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72272 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/iniziate-imparare-hook-manuale-plugin-wordpress.png\" alt=\"Iniziate a lavorare con gli hook con il Manuale dei Plugin di WordPress\" width=\"1100\" height=\"539\"><figcaption id=\"caption-attachment-72272\" class=\"wp-caption-text\">Iniziate a lavorare con gli hook con il Manuale dei Plugin di WordPress<\/figcaption><\/figure>\n<p>Aggiungete ai preferiti questi utili link del Manuale del Plugin per velocizzare la vostra ricerca:<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API#Function_Reference\">Plugin API \u2014 Hooks Function Reference<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\">Plugin API \u2014 Action Reference<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\">Plugin API \u2014 Filter Reference<\/a><\/li>\n<\/ul>\n<p>Sia il riferimento alle azioni che le pagine di riferimento ai filtri vi forniranno un elenco di tutti i hook che vengono eseguiti durante una specifica richiesta a WordPress.<\/p>\n<p>Ad esempio, potete trovare tutti gli hooks attivati quando si accede a una pagina di amministrazione, quando si ha a che fare con gli allegati alle pagine dei post o con le <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-una-tassonomia\/\">categorie<\/a>.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/\">WordPress Code Reference<\/a><\/li>\n<\/ul>\n<p>Il Codex di WordPress comprende anche un pratico strumento di ricerca per trovare tutte le funzioni, gli hooks, i metodi e le classi. Questa pagina elenca anche i componenti nuovi e aggiornati nella versione pi\u00f9 recente di WordPress. Se volete scoprire cosa sta succedendo all&#8217;interno di WordPress, cominciate da qui.<\/p>\n<figure id=\"attachment_72271\" aria-describedby=\"caption-attachment-72271\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72271 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/cerca-qualcosa-interno-wordpress.png\" alt=\"Cercare qualcosa all'interno di WordPress\" width=\"1100\" height=\"381\"><figcaption id=\"caption-attachment-72271\" class=\"wp-caption-text\">Cercare qualcosa all&#8217;interno di WordPress<\/figcaption><\/figure>\n<ul>\n<li><a href=\"https:\/\/adambrown.info\/p\/wp_hooks\/hook\"> Indice degli hook di WordPress di Adam R Brown<\/a><\/li>\n<\/ul>\n<p>Questo indice degli hook di WordPress ordina tutti gli hook per tipo, versione di WordPress in cui hanno debuttato, e se sono deprecati.<\/p>\n<figure id=\"attachment_72248\" aria-describedby=\"caption-attachment-72248\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72248 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/indice-hooks-wordpress-adam-r-brown.png\" alt=\"Indice degli hook di WordPress di Adam R Brown\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72248\" class=\"wp-caption-text\">Indice degli hook di WordPress di Adam R Brown<\/figcaption><\/figure>\n<p>Ordinando gli hook in ordine di apparizione, vedrete che i pi\u00f9 vecchi hook di WordPress sono ancora i pi\u00f9 utilizzati. Se siete <a href=\"https:\/\/kinsta.com\/it\/blog\/tutorial-php\/\">nuovi nello sviluppo di WordPress<\/a>, familiarizzare con queste azioni e con questi filtri di uso frequente \u00e8 il modo pi\u00f9 veloce per recuperare il ritardo.<\/p>\n<p>Anche se questo indice non \u00e8 stato aggiornato dai tempi di WordPress 5.1, \u00e8 comunque utile sfogliare tutti i principali hook.<\/p>\n<p>Avete ancora difficolt\u00e0 a trovare l&#8217;hook che vi serve? Una ricerca online con la parola chiave giusta \u00e8 sempre un buon modo per iniziare. Se tutto il resto fallisce, potete sempre scavare nel Codex di WordPress.<\/p>\n<h2 id=\"finding-hooks-registered-on-a-wordpress-page\">Trovare gli Hook Registrati su una Pagina di WordPress<\/h2>\n<p>Come abbiamo visto, WordPress dispone di un sacco di hook, ma non tutti gli hook si attivano su ogni pagina. Se riuscite a trovare le azioni e i filtri cui potete agganciarvi in una determinata pagina, allora siete gi\u00e0 alla met\u00e0 dell&#8217;opera.<\/p>\n<p>Anche se potete utilizzare strumenti avanzati di debug PHP come <a href=\"https:\/\/xdebug.org\/\">xdebug<\/a> e <a href=\"https:\/\/github.com\/squizlabs\/PHP_CodeSniffer\">PHPCS<\/a>, ci sono strumenti di sviluppo pi\u00f9 semplici come Debug Bar e Query Monitor che possono essere eseguiti all&#8217;interno di WordPress.<\/p>\n<h3>Debug Bar con l&#8217;Add-On delle Actions and Filters<\/h3>\n<p><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\">Debug Bar<\/a> \u00e8 un plugin ufficiale di WordPress che aggiunge un menu di <strong>debug<\/strong> alla barra di amministrazione. Mostra avvisi e notifiche di PHP, richieste di cache, <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-mysql\/\">query MySQL<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/wordpress-debug\/\">altre informazioni utili per il debug<\/a>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Questo plugin non \u00e8 stato aggiornato di recente, n\u00e9 \u00e8 stato testato con le ultime versioni principali di WordPress. Lo citiamo in quanto \u00e8 un comodo plugin per scoprire di pi\u00f9 sugli hook di WordPress. Usatelo in <a href=\"https:\/\/kinsta.com\/it\/docs\/hosting-wordpress\/ambienti-di-staging\/\">ambiente di staging<\/a>.<\/p>\n<\/aside>\n\n<figure id=\"attachment_72542\" aria-describedby=\"caption-attachment-72542\" style=\"width: 1500px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/plugin-wordpress-debug-bar-wordpress.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72542 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/plugin-wordpress-debug-bar-wordpress.jpg\" alt=\"Il plugin WordPress Debug Bar\" width=\"1500\" height=\"500\"><\/a><figcaption id=\"caption-attachment-72542\" class=\"wp-caption-text\">Il plugin WordPress Debug Bar<\/figcaption><\/figure>\n<p>Dopo aver installato il plugin, dovrete aggiungere il frammento di codice riportato qui sotto al file <code><strong>wp-config.php<\/strong><\/code> del sito, in modo da abilitare le funzionalit\u00e0 di debug.<\/p>\n<pre><code class=\"language-php\">define( 'WP_DEBUG', true ); \/\/ tracks PHP Warnings and Notices\ndefine( 'SAVEQUERIES', true ); \/\/ tracks and displays MySQL queries<\/code><\/pre>\n<p>Ora nella barra di amministrazione dovrebbe apparire l&#8217;opzione di menu <strong>Debug<\/strong>. Facendo clic qui si accede alla sua dashboard dove si possono vedere varie query e cache allegate alla pagina da cui siete passati per accedere.<\/p>\n<figure id=\"attachment_72273\" aria-describedby=\"caption-attachment-72273\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72273 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/menu-debug-barra-amministrazione-wordpress.png\" alt=\"Il menu 'Debug' nella barra di amministrazione di WordPress\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72273\" class=\"wp-caption-text\">Il menu &#8216;Debug&#8217; nella barra di amministrazione di WordPress<\/figcaption><\/figure>\n<p>Successivamente, dovete installare il plugin <a href=\"https:\/\/wordpress.org\/plugins\/debug-bar-actions-and-filters-addon\/\">Debug Bar Actions and Filters Addon<\/a>. \u00c8 una comoda estensione che aggiunger\u00e0 altre due schede alla dashboard di Debug Bar che permettono di visualizzare le azioni e i filtri attivati sulla richiesta corrente.<\/p>\n<figure id=\"attachment_72253\" aria-describedby=\"caption-attachment-72253\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72253 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/azioni-elencate-ordine-caricamento-pagina-corrente.png\" alt=\"Azioni elencate nel loro ordine di caricamento per la pagina corrente\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72253\" class=\"wp-caption-text\">Azioni elencate nel loro ordine di caricamento per la pagina corrente<\/figcaption><\/figure>\n<p>Elencher\u00e0 anche tutte le funzioni ad esse collegate con la loro priorit\u00e0.<\/p>\n<figure id=\"attachment_72254\" aria-describedby=\"caption-attachment-72254\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72254 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/filtri-elencati-priority-funzioni-richiamata-registrate.png\" alt=\"Filtri elencati con la rispettiva priority e le funzioni di callback registrate\" width=\"1100\" height=\"509\"><figcaption id=\"caption-attachment-72254\" class=\"wp-caption-text\">Filtri elencati con la rispettiva priority e le funzioni di callback registrate<\/figcaption><\/figure>\n<p>Potete cliccare sul menu <strong>Debug<\/strong> da qualsiasi pagina del vostro sito per conoscere tutte le azioni e i filtri a cui potete agganciarvi in quella pagina.<\/p>\n<h3>Query Monitor<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/it\/blog\/query-monitor\/\">Query Monitor<\/a> \u00e8 un potente pannello di strumenti di sviluppo per WordPress. Potete utilizzarlo per scavare negli hook disponibili su una pagina e nel loro ordine di caricamento.<\/p>\n<figure id=\"attachment_72543\" aria-describedby=\"caption-attachment-72543\" style=\"width: 1500px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/query-monitor-plugin.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72543 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/query-monitor-plugin.jpg\" alt=\"Il plugin WordPress Query Monitor\" width=\"1500\" height=\"500\"><\/a><figcaption id=\"caption-attachment-72543\" class=\"wp-caption-text\">Il plugin WordPress Query Monitor<\/figcaption><\/figure>\n<p>A differenza di Debug Bar, non \u00e8 necessario installare alcun add-on per vedere le azioni e i filtri attivati su una certa pagina.<\/p>\n<figure id=\"attachment_72267\" aria-describedby=\"caption-attachment-72267\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72267 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/possibile-accedere-query-monitor-barra-amministrazione.png\" alt=\"\u00c8 possibile accedere a Query Monitor dalla barra di amministrazione\" width=\"1100\" height=\"438\"><figcaption id=\"caption-attachment-72267\" class=\"wp-caption-text\">\u00c8 possibile accedere a Query Monitor dalla barra di amministrazione<\/figcaption><\/figure>\n<p>Query Monitor fornisce anche maggiori informazioni su dove viene attivato esattamente un hook.<\/p>\n<figure id=\"attachment_72266\" aria-describedby=\"caption-attachment-72266\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72266 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/pannello-hooks-actions-query-monitor.png\" alt=\"Il pannello Hooks &#038; Actions in Query Monitor\" width=\"1100\" height=\"642\"><figcaption id=\"caption-attachment-72266\" class=\"wp-caption-text\">Il pannello Hooks &#038; Actions in Query Monitor<\/figcaption><\/figure>\n<p>Nella colonna dei componenti, potete vedere che la maggior parte degli hook \u00e8 registrata dal Core. Ma alcuni hook sono registrati da un tema o da un plugin. Alcuni possono essere registrati da pi\u00f9 di un componente.<\/p>\n<p>\u00c8 possibile utilizzare i <a href=\"https:\/\/kinsta.com\/it\/blog\/menu-a-tendina-wordpress\/\">menu a discesa<\/a> degli hook e dei componenti per visualizzare solo gli hook necessari.<\/p>\n<p><strong>Nota:<\/strong> Query Monitor usa &#8220;Hooks&#8221; come termine generale sia per le azioni che per i filtri, ma chiama le funzioni di callback registrate come &#8220;Actions&#8221;. Questa \u00e8 una definizione tecnicamente sbagliata e pu\u00f2 confondervi, quindi tenetelo a mente.<\/p>\n<p>Con Query Monitor potete fare molto di pi\u00f9 che controllare tutte le query e le richieste. Dispone anche di funzioni avanzate come stili di elenchi, script, <a href=\"https:\/\/kinsta.com\/it\/blog\/wordpress-multilingua\/\">lingue<\/a>, <a href=\"https:\/\/kinsta.com\/it\/blog\/admin-ajax-php\/\">chiamate Ajax<\/a>, controlli delle capacit\u00e0 dell&#8217;utente e <a href=\"https:\/\/kinsta.com\/it\/blog\/rest-api-wordpress\/\">chiamate alla REST API<\/a>.<\/p>\n<h2 id=\"the-all-hook\">L&#8217;Hook &#8220;all&#8221;<\/h2>\n<p>WordPress ha <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/advanced-topics\/#debugging-with-the-all-hook\">un hook speciale chiamato &#8216;all&#8217;<\/a> cui potete agganciarvi per eseguire una funzione di callback per ogni singolo hook, indipendentemente dal fatto che sia registrato con tutti. \u00c8 utile per eseguire <a href=\"https:\/\/kinsta.com\/it\/blog\/wordpress-debug\/\">il debug dei crash delle pagine<\/a> o se volete sapere quando un particolare evento sta accadendo.<\/p>\n<p>Ad esempio, potete utilizzare l&#8217;hook <code><strong>all<\/strong><\/code> come nell&#8217;esempio qui sotto per fare l&#8217;<code><strong>echo<\/strong><\/code> di tutte le azioni in corso.<\/p>\n<pre><code class=\"language-php\">\/\/ echo all the actions being run\nfunction debug_helper_function(){\n\u00a0 \u00a0 echo '&lt;p&gt;' . current_action() . '&lt;\/p&gt;';\n}\nadd_action( 'all', 'debug_helper_function' );<\/code><\/pre>\n<p>La <code><strong>debug_helper_function()<\/strong><\/code> definita sopra verr\u00e0 eseguita quando si attiva una qualsiasi azione. Sapere quale \u00e8 stata l&#8217;ultima azione eseguita vi dar\u00e0 un&#8217;idea migliore di dove dovete guardare.<\/p>\n<h2 id=\"where-are-wordpress-hooks-stored\">Dove Sono Memorizzati gli Hook di WordPress?<\/h2>\n<p>Per implementare il funzionamento degli hook, WordPress utilizza la classe <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_hook\/\">WP_Hook<\/a>. Questa classe del Core \u00e8 utilizzata per gestire tutte le azioni e i filtri incorporati in WordPress. Trovate quasi tutto il codice relativo a questa classe nel file <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/class-wp-hook.php\">wp-includes\/class-wp-hook.php.<\/a><\/p>\n<p>Tecnicamente, la classe <code><strong>WP_Hook<\/strong><\/code> \u00e8 un array di oggetti che comprende propriet\u00e0 come callback, iterations, current_priority, nesting_level e doing_action. Definisce anche molte utili hook function che possono essere invocate utilizzando i <a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/class-wp-hook.php\/\">metodi di WP_Hook<\/a>.<\/p>\n<p>La maggior parte degli sviluppatori di WordPress non deve preoccuparsi molto di dove WordPress memorizza gli hook, purch\u00e9 si attengano alle linee guida delle API dei Plugin.<\/p>\n\n<h2 id=\"how-to-create-your-custom-wordpress-hooks\">Come Creare i Vostri Hook di WordPress Personalizzati<\/h2>\n<p>Avete visto i vari hooks forniti da WordPress attraverso la Plugin API. Avete anche visto come utilizzare gli hook predefiniti per iniettare il vostro codice nella runtime di WordPress.<\/p>\n<p>Se siete <a href=\"https:\/\/kinsta.com\/it\/blog\/reddito-sviluppatore-wordpress\/\">sviluppatori di temi o di plugin<\/a>, \u00e8 buona pratica fornire allo stesso modo ad altri sviluppatori un modo per interagire con il vostro codice. Gli hook personalizzati consentono di fare esattamente questo. Permettono ad altri sviluppatori di estendere e modificare le funzionalit\u00e0 dei vostri temi e plugin.<\/p>\n<p>Creare le proprie azioni e i propri filtri \u00e8 abbastanza semplice. Si utilizzano le stesse funzioni che il Core di WordPress utilizza per creare gli hook. Vediamo alcuni esempi.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3 id=\"how-to-create-custom-actions-in-wordpress\">Come Creare Azioni Personalizzate in WordPress<\/h3>\n<p>Per creare un hook personalizzato per le azioni, utilizzate la funzione <code><strong>do_action()<\/strong><\/code>. Ecco come si fa:<\/p>\n<pre><code class=\"language-php\">\/\/ the position where you insert your action is where it'll run when called\ndo_action( ' my_unique_custom_action' );\n\/\/ continue with the rest of your code<\/code><\/pre>\n<p>Ora, altri sviluppatori possono agganciarsi al vostro plugin o al vostro tema senza modificare il codice sorgente. Tutto quello che devono fare \u00e8 registrare le loro funzioni di callback all&#8217;azione personalizzata del vostro plugin utilizzando la funzione <code><strong>add_action()<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">add_action( 'my_unique_custom_action', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above action function\nsome_callback_function() {\n     \/\/ this code will run wherever your custom action hook is \n}<\/code><\/pre>\n<p>Assicuratevi di <strong>documentare<\/strong> accuratamente i vostri hook personalizzati, spiegando in dettaglio ci\u00f2 che fanno. Dopo tutto, lo scopo principale della creazione di hook personalizzati \u00e8 quello di aiutare <a href=\"https:\/\/kinsta.com\/it\/blog\/retribuzione-web-developer\/\">gli altri sviluppatori<\/a> ad interagire con il vostro codice.<\/p>\n<h3 id=\"how-to-create-a-custom-filter-in-wordpress\">Come Creare un Filtro Personalizzato in WordPress<\/h3>\n<p>Usate la funzione <code><strong>apply_filters()<\/strong><\/code> per creare un filtro personalizzato. Ecco come fare:<\/p>\n<pre><code class=\"language-php\">$value_to_filter = \"I'm a string, but this can be any PHP data type\";\n\n\/\/ filters modify a value and are typically tied to a predefined variable\napply_filters( 'my_custom_filter', $value_to_filter );<\/code><\/pre>\n<p>I parametri del vostro filtro personalizzato dovrebbero includere un identificatore univoco e un valore da filtrare. Altri sviluppatori possono agganciarsi al vostro filtro personalizzato con la funzione <code><strong>add_filter()<\/strong><\/code> e modificare il valore passato.<\/p>\n<pre><code class=\"language-php\">add_filter( 'my_custom_filter', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above filter function\nfunction some_callback_function( $value_to_filter ) {\n    \/\/ modify the passed value (or not) \n    return $value_to_filter; \/\/ returning a value is a must for filters\n}<\/code><\/pre>\n<p>Quando si definisce il filtro personalizzato, assicuratevi che non sia posizionato prima della definizione del valore che si suppone debba filtrare. Se non si posiziona correttamente il filtro, il valore filtrato verr\u00e0 in seguito sovrascritto dal valore di default.<\/p>\n<h3 id=\"custom-hooks-naming-convention\">Convenzione per la Denominazione degli Hook Personalizzati<\/h3>\n<p>\u00c8 importante scegliere un nome univoco per tutti gli hook personalizzati. Dal momento che qualsiasi plugin o tema pu\u00f2 avere i propri hook personalizzati, avere nomi di hook identici pu\u00f2 causare conflitti di codice con risultati inaspettati.<\/p>\n<p>Per esempio, se si assegna un nome alla propria azione <code><strong>send_email<\/strong><\/code>, \u00e8 molto probabile che anche altri sviluppatori di plugin possano scegliere lo stesso termine, in quanto non \u00e8 abbastanza univoco. Se un sito web installa sia il vostro plugin che quello dell&#8217;altro sviluppatore, pu\u00f2 <a href=\"https:\/\/kinsta.com\/it\/blog\/errori-wordpress\/\">causare errori che saranno difficili da rintracciare<\/a>.<\/p>\n<p>Potete applicare un prefisso a tutti i vostri hook personalizzati con un identificatore comune per mantenerli semplici e unici. Cos\u00ec, invece di <code><strong>send_email<\/strong><\/code>, potete assegnargli il nome <code><strong>plugin_name_send_email<\/strong><\/code> (il <code><strong>plugin_name_<\/strong><\/code> \u00e8 il prefisso univoco).<\/p>\n<h3 id=\"custom-hooks-demo-with-an-extensible-plugin\">Demo di Hook Personalizzati con un Plugin Estendibile<\/h3>\n<p>Creiamo un plugin estendibile (o un plugin pluggable) che permetta ad altri sviluppatori di interagire con esso utilizzando i suoi hook personalizzati.<\/p>\n<p>Chiamer\u00f2 questo plugin <strong>Custom Hooks Demo<\/strong>. La sua funzione principale \u00e8 quella di emettere un box di citazione ovunque si inserisca uno shortcode. Includer\u00e0 azioni e filtri personalizzati nelle posizioni giuste per consentire ad altri sviluppatori di modificare o estendere le sue funzionalit\u00e0.<\/p>\n<p>Potete consultare la mia <a href=\"https:\/\/kinsta.com\/it\/blog\/shortcode-wordpress\/\">guida agli shortcode di WordPress<\/a> per saperne di pi\u00f9 sul loro funzionamento.<\/p>\n<p>Iniziamo con il plugin estendibile.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo\nDescription :  Demonstrating how to create an extensible WordPress plugin using custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo\n*\/\n\n\/** \n * the [custom_hooks_demo] shortcode returns the HTML code for a quote box.\n * @return string HTML code for a quote box\n*\/\nadd_shortcode( 'custom_hooks_demo', 'my_shortcode_callback' );\n\nfunction my_shortcode_callback ( $arguments ) {\n    ob_start(); \/\/ start object buffering to collect all output before sending it to the browser\n    \n    \/\/ set an action hook to run before you output anything\n    do_action( 'the_topmost_custom_action' );\n    \n    \/\/ define your variables which you want to allow to be filtered\n    $quote_content = \"Z.E.R.O. That's the number of people who'd like to have any website autoplay music on their browsers.\";\n    $quote_author = \"John Doenuts\";\n    \n    \/\/ create your custom filters after you've set the variables\n    $quote_content = apply_filters( 'custom_quote_content', $quote_content );\n    $quote_author = apply_filters( 'custom_quote_author', $quote_author );\n    \n    \/\/ build the shortcode output template\n    echo \"&lt;div style=\\\"border:3px solid #5333ed;\\\"&gt;&lt;blockquote style=\\\"margin:20px;border-color:#5333ed;\\\"&gt;\";\n    echo $quote_content;\n    echo \"&lt;br&gt;&lt;br&gt;\";\n    echo \"\u2015 &lt;strong&gt;\" . $quote_author . \"&lt;\/strong&gt;\";\n    echo \"&lt;\/blockquote&gt;&lt;\/div&gt;\";\n    \n    \/\/ set an action hook to run after you output everything\n    do_action( 'the_ending_custom_action' );\n    \n    return ob_get_clean(); \/\/ get buffer contents, delete the buffer, and then stop buffering\n}<\/code><\/pre>\n<ul>\n<li>La funzione <code><strong>add_shortcode()<\/strong><\/code> viene utilizzata per creare lo shortcode personalizzato. Poi si definisce la funzione di callback dello shortcode con tutte le funzionalit\u00e0 di questo plugin.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-start.php\">ob_start()<\/a> \u00e8 una funzione PHP che abilita il buffering dell&#8217;output. \u00c8 una funzione molto comoda che istruisce PHP a mantenere qualsiasi output nella memoria buffer del server, invece di emetterlo subito. Potete utilizzarla per costruire codice HTML complesso e leggibile in PHP.<\/li>\n<li><code><strong>do_action( 'the_topmost_custom_action' )<\/strong><\/code> definisce la prima azione personalizzata. Per renderla utile, \u00e8 necessario definirla prima che il plugin emetta qualcosa. Altri sviluppatori possono agganciarsi a questa azione personalizzata per eseguire il loro codice prima che questo shortcode personalizzato stampi qualcosa.<\/li>\n<li>Crea le variabili che si desidera filtrare. In questo plugin, queste variabili sono <code><strong>$quote_content<\/strong> e <strong>$quote_author<\/strong><\/code>. In questo esempio sono entrambe stringhe, ma possono essere qualsiasi tipo di dato PHP (p.e. intero, booleano, array).<\/li>\n<li>Usa la funzione <code><strong>apply_filters()<\/strong><\/code> per creare i filtri personalizzati. Dato che tutti i filtri restituiscono un valore, potete assegnare le variabili definite in precedenza al valore restituito da questo filtro. Altri sviluppatori possono ora agganciarsi a questo filtro per modificare i valori di default delle variabili predefinite.<\/li>\n<li>Utilizza le istruzioni <code><strong>echo<\/strong><\/code> per costruire il vostro shortcode di uscita riga per riga. Dal momento che abbiamo abilitato il buffering dell&#8217;output, nessun output raggiunger\u00e0 subito il browser.<\/li>\n<li><code><strong>do_action( 'the_ending_custom_action' )<\/strong><\/code> definisce la vostra ultima azione personalizzata. \u00c8 necessario definirla alla fine, ma prima di restituire tutti i contenuti del buffer.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-get-clean.php\">ob_get_clean()<\/a> \u00e8 una funzione PHP predefinita 3-in-1. Recupera il contenuto del buffer, elimina tutti i dati del buffer e poi arresta il buffering in uscita. La funzione restituisce con <code><strong>return<\/strong><\/code> il contenuto del buffer raccolto come singola stringa concatenata.<\/li>\n<\/ul>\n<p>Una volta salvato e attivato il plugin, aggiungendo lo shortcode <code><strong>[custom_hooks_demo]<\/strong><\/code> al contenuto del vostro post, verr\u00e0 visualizzato un riquadro di citazione con i valori predefiniti.<\/p>\n<figure id=\"attachment_72264\" aria-describedby=\"caption-attachment-72264\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72264 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/casella-citazione-originale-utilizzando-plugin-demo-custom-hooks.png\" alt=\"Il riquadro di citazione originale ottenuto utilizzando il plugin demo Custom Hooks\" width=\"1100\" height=\"530\"><figcaption id=\"caption-attachment-72264\" class=\"wp-caption-text\">Il riquadro di citazione originale ottenuto utilizzando il plugin demo Custom Hooks<\/figcaption><\/figure>\n<p>Ora, creiamo un altro plugin chiamato <strong>Custom Hooks Demo Extension<\/strong>. Si aggancer\u00e0 a tutti gli hook personalizzati creati dal plugin precedente e far\u00e0 o modificher\u00e0 qualcosa.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo Extension\nDescription :  Demonstrating how you can extend WordPress plugin functionality with its custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo-extension\n*\/\n\n\/**\n * replace the quote content by hooking into the 'custom_quote_content' filter\n*\/\nadd_filter( 'custom_quote_content', 'new_quote_content_callback' );\nfunction new_quote_content_callback( $content ) {\n    $content = \"There are no bugs in programming. Only unexpected features.\";\n    return $content;\n}\n\n\/**\n * replace the quote author by hooking into the 'custom_quote_author'\n*\/\nadd_filter( 'custom_quote_author', 'new_quote_author_callback' );\nfunction new_quote_author_callback( $author ) {\n    $author = \"Jane Doodle\";\n    return $author;\n}\n\n\/**\n * add an image to the top of the shortcode output by hooking into the 'the_topmost_custom_action'\n*\/\nadd_action( 'the_topmost_custom_action', 'quote_image_callback' );\nfunction quote_image_callback() {\n    $url = \"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/f\/f9\/Quote-right-cs.svg\/75px-Quote-right-cs.svg.png\";\n    echo '&lt;div&gt;&lt;img class=\"aligncenter\" src=\"'.$url.'\"&gt;&lt;\/div&gt;';\n}\n\n\/**\n * add a button below the shortcut output by hooking into the 'the_ending_custom_action'\n*\/\nadd_action( 'the_ending_custom_action', 'add_button_callback' );\nfunction add_button_callback() {\n    echo '&lt;div style=\"text-align:center;\"&gt;&lt;button name=\"nice\"&gt;Nice Quote!&lt;\/button&gt;&lt;\/div&gt;';\n}<\/code><\/pre>\n<p>Come potete vedere, questo plugin di estensione non contiene altro che action e filter function che si agganciano al plugin originale nei punti giusti per apportare modifiche.<\/p>\n<p>Utilizza le funzioni <code><strong>add_action()<\/strong><\/code> e <code><strong>add_filter()<\/strong><\/code> per registrare le sue funzioni di callback sulle azioni e sui filtri personalizzati creati dal plugin originale (p.e. <code><strong>the_topmost_custom_action<\/strong><\/code>, <code><strong>custom_quote_author<\/strong><\/code>).<\/p>\n<figure id=\"attachment_72262\" aria-describedby=\"caption-attachment-72262\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72262 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/plugin-estensione-modifica-casella-quotazione-originale.png\" alt=\"Il plugin di estensione modifica il riquadro della citazione originale\" width=\"1100\" height=\"682\"><figcaption id=\"caption-attachment-72262\" class=\"wp-caption-text\">Il plugin di estensione modifica il riquadro della citazione originale<\/figcaption><\/figure>\n<p>Gli action hook personalizzati consentono di interporre il codice agli intervalli giusti nel plugin originale ed eseguire i propri script. Qui <a href=\"https:\/\/kinsta.com\/it\/blog\/visual-content\/\">aggiungiamo un&#8217;immagine<\/a> in alto e un pulsante in basso.<\/p>\n<p>Allo stesso modo, i filtri personalizzati consentono di modificare i valori del contenuto della citazione e il nome dell&#8217;autore. Il risultato finale \u00e8 un plugin che \u00e8 completamente estendibile da chiunque senza che sia necessario apportare modifiche al suo codice sorgente.<\/p>\n<h3 id=\"working-with-custom-hooks-from-thirdparty-developers\">Lavorare con Hook Personalizzati di Sviluppatori di Terze Parti<\/h3>\n<p>Gli hook personalizzati consentono ai singoli <a href=\"https:\/\/kinsta.com\/it\/argomenti\/plugin-wordpress\/\">plugin<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/temi-wordpress-veloci\/\">temi<\/a> di WordPress di avere un ricco ecosistema di plugin estendibili. Considerate il plugin WooCommerce. Aggiunge funzionalit\u00e0 di ecommerce a WordPress, ma include anche <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/hook-docs.html\">un sacco di hook all&#8217;interno del suo codice<\/a>.<\/p>\n<figure id=\"attachment_72270\" aria-describedby=\"caption-attachment-72270\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72270 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/woocommerce-azione-riferimento-hook-filtro.png\" alt=\"WooCommerce Action and Filter Hook Reference\" width=\"1100\" height=\"562\"><figcaption id=\"caption-attachment-72270\" class=\"wp-caption-text\">WooCommerce Action and Filter Hook Reference<\/figcaption><\/figure>\n<p><a href=\"https:\/\/kinsta.com\/it\/blog\/plugin-wordpress-ecommerce\/\">WooCommerce ha centinaia di estensioni<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/plugin-woocommerce\/\">plugin<\/a> che utilizzano i suoi hook per migliorare ulteriormente le sue funzionalit\u00e0 di base.<\/p>\n<p>Potete utilizzare queste estensioni per integrare WooCommerce con Stripe, MailChimp, Salesforce, Zapier e molto altro.<\/p>\n<figure id=\"attachment_72269\" aria-describedby=\"caption-attachment-72269\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72269 size-full\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/estensioni-estendono-funzionalita-woocommerce.png\" alt=\"Le estensioni estendono le funzionalit\u00e0 di WooCommerce\" width=\"1100\" height=\"728\"><figcaption id=\"caption-attachment-72269\" class=\"wp-caption-text\">Le estensioni estendono le funzionalit\u00e0 di WooCommerce<\/figcaption><\/figure>\n<p>Una buona pratica \u00e8 quella di controllare la sezione della documentazione dei popolari plugin di WordPress per vedere come implementano gli hook personalizzati. Tra quelli che considermo migliori, suggerisco <a href=\"https:\/\/docs.easydigitaldownloads.com\/article\/559-developers-intro-to-easy-digital-downloads\">Easy Digital Downloads<\/a>, <a href=\"https:\/\/codex.buddypress.org\/developer\/buddypress-hooks-actions-filters\/\">BuddyPress<\/a>, <a href=\"https:\/\/quizandsurveymaster.com\/docs\/developer\/hooks-and-filters\/\">Quiz and Survey Master<\/a> e <a href=\"https:\/\/docs.gravityforms.com\/category\/developers\/hooks\/\">Gravity Forms<\/a>.<\/p>\n<h3 id=\"when-to-use-custom-hooks\">Quando Utilizzare gli Hook Personalizzati?<\/h3>\n<p>A seconda del <a href=\"https:\/\/kinsta.com\/blog\/themeforest-pros-cons\/\">tema<\/a> o del <a href=\"https:\/\/kinsta.com\/blog\/publish-plugin-wordpress-plugin-directory\/\">plugin<\/a> che si sta creando e a chi \u00e8 destinato, ci si pu\u00f2 chiedere se sia necessario aggiungere degli hook personalizzati.<\/p>\n<p>Una buona regola empirica quando si decide se aggiungere o meno hook personalizzati \u00e8 quella di verificare se offrono vantaggi di estendibilit\u00e0 ad altri sviluppatori. In caso contrario, \u00e8 meglio aspettare fino a quando gli altri sviluppatori non vi chiederanno di aggiungerli.<\/p>\n<p>\u00c8 necessario essere molto sicuri se aggiungere hook personalizzati al plugin o al tema. Una volta rilasciato, e se altri sviluppatori lo hanno gi\u00e0 utilizzato, non si pu\u00f2 mai cambiare senza rompere la compatibilit\u00e0 a ritroso.<\/p>\n<h2 id=\"removing-callback-functions-from-wordpress-hooks\">Rimuovere le Funzioni di Callback dagli Hook di WordPress<\/h2>\n<p>Avete gi\u00e0 visto come rimuovere le funzioni di callback registrate su alcuni hooks. Queste callback potrebbero essere registrate da plugin, temi o anche dallo stesso Core di WordPress. Vediamo come rimuovere le funzioni di callback ad aggancio con altri esempi.<\/p>\n<p>Per rimuovere una funzione di callback da un hook, a seconda che sia registrata ad un&#8217;azione o ad un filtro, \u00e8 necessario utilizzare le funzioni <code><strong>remove_action()<\/strong><\/code> e <code><strong>remove_filter()<\/strong><\/code>.<\/p>\n<p>Un avvertimento \u00e8 che \u00e8 necessario invocare queste funzioni con gli identici parametri utilizzati per registrarle. Fondamentalmente, copiate-incollate i parametri dalle loro funzioni <code><strong>add_action()<\/strong><\/code> e <code><strong>add_filter()<\/strong><\/code>.<\/p>\n<p>Inoltre, \u00e8 possibile rimuovere le funzioni di callback solo dopo che sono state registrate. Se tentate di rimuoverle prima che siano registrate, la rimozione fallir\u00e0. \u00c8 necessario avere l&#8217;ordine di esecuzione degli hook giusto.<\/p>\n<p>Supponiamo che vogliate rimuovere una funzione di callback registrata da un tema che appesantisce il vostro sito (<a href=\"https:\/\/kinsta.com\/it\/impara\/velocizzare-wordpress\/\">volete un sito veloce<\/a>, non \u00e8 vero?).<\/p>\n<pre><code class=\"language-php\">function wp_bloated_callback_function() {\u00a0 \u00a0 \n\/\/ some code that adds a lot of bloat to the site\n}\nadd_action( 'template_redirect', 'wp_bloated_callback_function', 5 );<\/code><\/pre>\n<p>Ad esempio, la funzione di callback qui sopra potrebbe caricare molti script e fogli di stile non necessari. La sua rimozione darebbe al vostro sito un enorme <a href=\"https:\/\/kinsta.com\/it\/impara\/velocita-pagina\/\">aumento delle prestazioni<\/a>.<\/p>\n<p>Tuttavia, \u00e8 necessario assicurarsi che la funzione <strong><code>remove_action()<\/code><\/strong> venga eseguita solo dopo l&#8217;azione <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/template_redirect\/\">template_redirect<\/a>. Un modo per farlo \u00e8 quello di agganciarsi all&#8217;azione <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/after_setup_theme\/\">after_setup_theme<\/a>, in quanto questa viene attivata dopo l&#8217;azione <code><strong>template_redirect<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">function wp_remove_bloat() {\n    \/\/ ensure all parameters are identical to the original add_action() function\n  \u00a0 remove_action( 'template_redirect', 'wp_bloated_callback_function', 5 );\n}\n\n\/\/ ensure that remove_action() is called only after add_action()\nadd_action( 'after_setup_theme', 'wp_remove_bloat' );<\/code><\/pre>\n<p>La funzione <code><strong>wp_bloated_callback_function()<\/strong><\/code> ora sar\u00e0 sganciata dall&#8217;azione <code><strong>template_redirect<\/strong><\/code>.<\/p>\n<h3>Casi Speciali per la Rimozione delle Funzioni di Callback<\/h3>\n<p>La rimozione delle funzioni di callback non si limita a disabilitarle del tutto. A volte potrebbe essere necessario rimuoverle temporaneamente, eseguire il codice e poi aggiungerle di nuovo.<\/p>\n<p>Ad esempio, l&#8217;azione <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/save_post\/\">save_post<\/a> viene attivata ogni volta che vengono richiamate le funzioni <code><strong>wp_insert_post()<\/strong><\/code> e <code><strong>wp_publish_post()<\/strong><\/code>. Potete <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/post.php#L4135\">trovare la definizione di entrambe<\/a> nel file <strong><code>wp-includes\/post.php<\/code>.<\/strong><\/p>\n<p>Quindi, se avete una funzione di callback agganciata all&#8217;azione <code><strong>save_post<\/strong><\/code>, e se invocate le funzioni <code><strong>wp_insert_post()<\/strong><\/code> o <strong><code>wp_publish_post()<\/code><\/strong> all&#8217;interno della vostra funzione di callback, l&#8217;azione <code><strong>save_post<\/strong><\/code> si attiver\u00e0 pi\u00f9 volte.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n  \u00a0 wp_insert_post( [some_array] ); \/\/ this function also calls the 'save_post' action\n\u00a0 \u00a0 \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>Una funzione che chiama l&#8217;azione che la chiama pu\u00f2 anche creare risultati inaspettati. Un modo per aggirare questo problema \u00e8 usare la funzione <strong><code>remove_action()<\/code><\/strong> all&#8217;interno della funzione di callback prima di invocare <code><strong>wp_insert_post()<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n\u00a0 \u00a0 \n    \/\/ remove the callback function from the \u2018save_post\u2019 action\n\u00a0 \u00a0 remove_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ now run the wp_insert_post() function\n    wp_insert_post( [some_array] );\n\u00a0 \u00a0 \n    \/\/ add the callback function back to the \u2018save_post\u2019 action\n\u00a0 \u00a0 add_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>Questo \u00e8 un altro uso pratico delle funzioni <code><strong>remove_action()<\/strong><\/code> e <code><strong>remove_filter()<\/strong><\/code>. Scavando pi\u00f9 a fondo nel Core di WordPress potrete capire meglio come evitare queste situazioni.<\/p>\n<h2 id=\"bonus-wordpress-hooks-tutorials\">Tutorial Bonus sugli Hook di WordPress<\/h2>\n<ul>\n<li><a href=\"https:\/\/kinsta.com\/it\/blog\/aggiungere-codice-header-footer\/#how-to-manually-add-code-to-wordpress-header-and-footer\">Aggiungere manualmente il codice all\u2019header o al footer di WordPress<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/it\/blog\/libreria-media-wordpress\/\">Guida Completa alla Libreria Media di WordPress<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/it\/blog\/cron-job-wordpress\/\">Come Creare e Modificare un Cron Job di WordPress<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/it\/blog\/child-theme-wordpress\/#create\">Come Creare un Child Theme in WordPress<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/it\/blog\/disabilitare-plugin-wordpress\/\">Come Disattivare i Plugin di WordPress su Post e Pagine Specifici<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/it\/blog\/disabilitare-emoji-in-wordpress\/#2-disable-emojis-in-wordpress-with-code\">Come Disabilitare gli Emoji in WordPress con il Codice<\/a><\/li>\n<\/ul>\n\n<h2>Riepilogo<\/h2>\n<p>Se siete <a href=\"https:\/\/kinsta.com\/it\/blog\/assumere-uno-sviluppatore-wordpress\/\">sviluppatori WordPress<\/a>, Utilizzare gli hook di\u00a0WordPress vi offre molteplici vantaggi.<\/p>\n<p>Non solo gli hook consentono di modificare o estendere le funzionalit\u00e0 di base di WordPress, ma \u00e8 anche possibile utilizzarli per modificare plugin, temi, e lasciare che altri sviluppatori interagiscano con i vostri temi e plugin.<\/p>\n<p>\u00c8 ora di agganciarsi agli hook di WordPress!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gli Hook di WordPress sono uno degli strumenti pi\u00f9 importanti da avere nell&#8217;arsenale di uno sviluppatore WordPress. Sono il fondamento dello sviluppo dei plugin e dei &#8230;<\/p>\n","protected":false},"author":117,"featured_media":36900,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[67,21926],"topic":[26187,25873],"class_list":["post-36856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-webdev","tag-wordpress-hooks","topic-funzione-php","topic-sviluppo-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati<\/title>\n<meta name=\"description\" content=\"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati\" \/>\n<meta property=\"og:description\" content=\"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-31T10:15:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-03T11:56:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"59 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati\",\"datePublished\":\"2020-05-31T10:15:03+00:00\",\"dateModified\":\"2023-03-03T11:56:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/\"},\"wordCount\":10085,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg\",\"keywords\":[\"webdev\",\"WordPress Hooks\"],\"articleSection\":[\"Sviluppo WordPress\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/\",\"name\":\"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg\",\"datePublished\":\"2020-05-31T10:15:03+00:00\",\"dateModified\":\"2023-03-03T11:56:35+00:00\",\"description\":\"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg\",\"width\":1024,\"height\":512,\"caption\":\"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sviluppo di WordPress\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/sviluppo-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati","description":"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/","og_locale":"it_IT","og_type":"article","og_title":"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati","og_description":"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!","og_url":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2020-05-31T10:15:03+00:00","article_modified_time":"2023-03-03T11:56:35+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg","type":"image\/jpeg"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Salman Ravoof","Tempo di lettura stimato":"59 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati","datePublished":"2020-05-31T10:15:03+00:00","dateModified":"2023-03-03T11:56:35+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/"},"wordCount":10085,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg","keywords":["webdev","WordPress Hooks"],"articleSection":["Sviluppo WordPress"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/","url":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/","name":"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg","datePublished":"2020-05-31T10:15:03+00:00","dateModified":"2023-03-03T11:56:35+00:00","description":"Scopri cosa sono gli hook di WordPress. Padroneggia Azioni, Filtri e Hook personalizzati creando il tuo plugin estendibile. Migliora subito le tue capacit\u00e0 di sviluppo di WordPress!","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2020\/05\/wordpress-hooks.jpg","width":1024,"height":512,"caption":"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/hook-wordpress\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Sviluppo di WordPress","item":"https:\/\/kinsta.com\/it\/argomenti\/sviluppo-wordpress\/"},{"@type":"ListItem","position":3,"name":"Il Bootcamp degli Hook di WordPress: Come Utilizzare Azioni, Filtri e Hook Personalizzati"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/36856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=36856"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/36856\/revisions"}],"predecessor-version":[{"id":66273,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/36856\/revisions\/66273"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/translations\/se"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/36856\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/36900"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=36856"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=36856"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=36856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}