{"id":233537,"date":"2023-02-15T20:00:00","date_gmt":"2023-02-15T17:00:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233537"},"modified":"2022-11-11T00:13:43","modified_gmt":"2022-11-10T21:13:43","slug":"guida-tutto-sugli-hook-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/guida-tutto-sugli-hook-in-wordpress\/","title":{"rendered":"Guida: Tutto sugli Hook in WordPress"},"content":{"rendered":"\n<p>Ti \u00e8 mai stato detto che la soluzione al tuo problema \u00e8 che devi &quot;agganciarti&quot; a qualcosa per fare la tua cosa o usarla <code>add_filter<\/code>senza capire davvero perch\u00e9 incasina le cose? Gli hook costituiscono le fondamenta di WordPress e forniscono temi e plug-in un modo per interagire o modificare il codice In questo post analizzeremo cosa sono gli hook, come funzionano e come possiamo usarli.<\/p>\n<h2>Cosa sono i ganci?<\/h2>\n<p>Mentre WordPress esegue il suo codice (dall&#8217;inizio del caricamento delle classi, del caricamento dei plugin, del caricamento del tema, della query per la richiesta corrente e infine del rendering dell&#8217;HTML), passa attraverso una serie di &quot;punti di controllo&quot;; ganci. Quando viene rilevato un hook, WordPress interrompe ci\u00f2 che sta facendo e controlla se ci sono funzioni (nel tema, nel plug-in o nello stesso WordPress) che sono registrate per essere eseguite su questo hook. Se ci sono, WordPress eseguir\u00e0 tutte queste funzioni e poi continuer\u00e0 da dove era stato interrotto.<\/p>\n<p>Ci\u00f2 consente a plug-in, temi e WordPress stesso di &quot;agganciarsi&quot; a determinati punti per aggiungere, ad esempio, fogli di stile nel <code>&lt;head&gt;<\/code>tag del tema, modificare il modo in cui WordPress interroga i post o semplicemente modificare il contenuto del post, se lo si desidera.<\/p>\n<p>Esistono due tipi di ganci; azioni e filtri. Funzionano in modo abbastanza simile tra loro, ma con un&#8217;eccezione che esamineremo pi\u00f9 da vicino di seguito.<\/p>\n<h2>Azioni e filtri<\/h2>\n<p>Per agganciare un&#8217;azione o un filtro, \u00e8 necessario definire quale hook (in base al suo nome) si desidera utilizzare e definire un callback, che \u00e8 il nome della funzione che si desidera eseguire. Nella maggior parte dei casi gli hook forniscono parametri o variabili rilevanti per l&#8217;hook.<\/p>\n<p>Le azioni sono semplicemente &quot;punti di controllo&quot; nell&#8217;esecuzione di WordPress, dove puoi eseguire un&#8217;attivit\u00e0 o fare eco a qualcosa. In alcuni rari casi \u00e8 possibile modificare un oggetto (fornito nei parametri), in modo che tutte le successive esecuzioni funzionino con quell&#8217;oggetto modificato.<\/p>\n<p>I filtri servono per modificare una variabile o un output. Tutti i filtri hook forniranno la variabile che puoi modificare come primo parametro e ti permetteranno di modificarla o restituire qualcosa di diverso.<\/p>\n<p>WordPress esegue molti hook, ma puoi crearne uno tuo nel tuo plugin o tema. Ci\u00f2 consente agli sviluppatori di estendere e modificare il codice; ad esempio modificando un plug-in tramite un tema o modificando il tema principale tramite il tema figlio.<\/p>\n<p>Molte delle funzioni di WordPress, generalmente utilizzate per stampare i post, sono anche filtri o azioni. Ad esempio la funzione <code>the_title()<\/code>stampa il titolo del post, ma \u00e8 anche un filtro.<\/p>\n<p>Diamo un&#8217;occhiata a come ci agganciamo a questi in pratica.<\/p>\n<h2>Agganciarsi alle azioni<\/h2>\n<p>Per agganciare un&#8217;azione, usi il metodo <code>add_action()<\/code>. Come minimo richiede due parametri; il nome dell&#8217;hook e la richiamata; il nome della funzione che si desidera eseguire. Facoltativamente puoi fornire la priorit\u00e0 come terzo parametro e definire il numero di argomenti che verranno passati alla tua funzione di callback. Esamineremo i due parametri opzionali in seguito, ma per ora, ecco un esempio di <code>add_action<\/code>:<\/p>\n<pre><code>add_action('init', 'my_function_name');\nfunction my_function_name() {\n    \/\/ Do your stuff\n}<\/code><\/pre>\n<p>Il primo parametro to <code>add_action<\/code>\u00e8 il nome dell&#8217;azione; in questo caso <code>init<\/code>, che \u00e8 un hook di WordPress piuttosto comune che si verifica durante l&#8217;inizializzazione. Il secondo parametro \u00e8 la tua callback, in questo caso il nome della funzione che desideriamo eseguire. Quindi tutto ci\u00f2 che devi fare \u00e8 definire una funzione con quel nome e aggiungere il tuo codice al suo interno.<\/p>\n<p>Puoi anche usare funzioni anonime che \u00e8 dove definisci la funzione all&#8217;interno <code>add_action<\/code>invece di fornire un nome di funzione, in questo modo;<\/p>\n<pre><code>add_action('init', function() {\n    \/\/ Do your stuff\n});<\/code><\/pre>\n<p>Molti sviluppatori preferiscono questo metodo in quanto impedisce il rischio di ridefinire una funzione PHP con lo stesso nome.<\/p>\n<p>Se devi eseguire una funzione definita all&#8217;interno di una classe PHP, devi fornire un array come parametro di callback; dove il primo elemento \u00e8 l&#8217;oggetto classe e il secondo elemento \u00e8 il nome della funzione:<\/p>\n<pre><code>class MyClass {\n    public function __construct() {\n        add_action('init', [$this, 'myFunctionName']);\n    }\n\u00a0\n    public function myFunctionName() {\n        \/\/ Do your stuff\n    }\n}<\/code><\/pre>\n<h2>Aggancio ai filtri<\/h2>\n<p>Per agganciare un filtro si usa la funzione <code>add_filter()<\/code>. Analogamente alle azioni precedenti, il primo parametro \u00e8 il nome del filtro e il secondo \u00e8 la richiamata. Facoltativamente puoi fornire la priorit\u00e0 come terzo parametro e il numero di argomenti come quarto. Ecco un esempio di <code>add_filter<\/code>:<\/p>\n<pre><code>add_filter('the_title', 'my_function_name');\nfunction my_function_name($title) {\n    \/\/ Do your stuff\n    return $title;\n}<\/code><\/pre>\n<p>Nell&#8217;esempio sopra ci colleghiamo al filtro <code>the_title<\/code>(che stampa il titolo del post) e diciamo a WordPress di eseguire la nostra funzione. Tutti i filtri forniranno sempre un argomento; la variabile da modificare. Nella mia funzione l&#8217;ho chiamato perch\u00e9 <code>$title<\/code>so che contiene il titolo del post. All&#8217;interno della funzione posso modificarla o sovrascrivere completamente la variabile. \u00c8 importante ricordare che nei filtri devi <strong>sempre restituire la variabile<\/strong>. Se non restituisci qualcosa nella tua funzione di callback, la variabile si svuota. Se ho saltato la dichiarazione di ritorno nell&#8217;esempio sopra, nessun titolo dei post riecheggia mai da nessuna parte.<\/p>\n<p>L&#8217;argomento variabile e la regola di restituire qualcosa nella tua funzione di callback \u00e8 praticamente l&#8217;unica differenza tra filtri e azioni. Tutto il resto funziona allo stesso modo. Puoi seguire gli esempi per le funzioni e le classi anonime mostrate per le azioni sopra per i filtri, cos\u00ec come i parametri facoltativi priorit\u00e0 e numero di argomenti; che vedremo in seguito.<\/p>\n<h2>Priorit\u00e0<\/h2>\n<p>Il terzo parametro (facoltativo) per <code>add_action<\/code>ed <code>add_filter<\/code>\u00e8 un numero intero che definisce la priorit\u00e0 della funzione di callback. Questo \u00e8 utile nei casi in cui ci sono pi\u00f9 funzioni (non necessariamente da te nel tuo tema o plugin, ricorda che WordPress stesso usa i suoi hook) e devi decidere quale eseguire per primo.<\/p>\n<p>Se non viene fornita alcuna priorit\u00e0, il valore predefinito \u00e8 10. Minore \u00e8 la priorit\u00e0, prima viene eseguita e maggiore \u00e8 la priorit\u00e0, pi\u00f9 tardi viene eseguita. Non puoi fornire una priorit\u00e0 negativa.<\/p>\n<p>Immagina pi\u00f9 funzioni di richiamata registrate in <code>init<\/code>. Se non \u00e8 stata fornita alcuna priorit\u00e0 per pi\u00f9 richiamate, WordPress le eseguir\u00e0 nell&#8217;ordine in cui sono state trovate (ad esempio nel <code>functions.php<\/code>codice o nel codice del plug-in).<\/p>\n<pre><code>add_action('init', 'my_function_name');\nadd_action('init', 'my_second_function_name');\nadd_action('init', 'my_third_function_name', 12);\nadd_action('init', 'my_fourth_function_name', 1);<\/code><\/pre>\n<p>Questo sarebbe l&#8217;ordine in cui WordPress eseguir\u00e0 le richiamate di cui sopra:<\/p>\n<ol>\n<li><code>my_fourth_function_name<\/code>(priorit\u00e0 1)<\/li>\n<li><code>my_function_name<\/code>(priorit\u00e0 10)<\/li>\n<li><code>my_second_function_name<\/code>(priorit\u00e0 10, ma appare pi\u00f9 avanti nel codice)<\/li>\n<li><code>my_third_function_name<\/code>(priorit\u00e0 12)<\/li>\n<\/ol>\n<h2>Numero di argomenti<\/h2>\n<p>Di solito gli hook forniscono alcuni dati aggiuntivi che sono rilevanti e utili per le funzioni di callback. Ad esempio l&#8217;azione <code>save_post<\/code>(viene eseguita ogni volta che un post viene aggiornato) fornisce due possibili argomenti; l&#8217;ID del post e l&#8217;oggetto del post. Questi sono utili per le operazioni che devi comunemente eseguire su questo hook (ad esempio se vuoi salvare un meta post, hai bisogno dell&#8217;ID post).<\/p>\n<p>Se non \u00e8 stato fornito alcun numero di argomenti per un&#8217;azione o un filtro, il valore predefinito \u00e8 1. Questo \u00e8 il motivo per cui non \u00e8 necessario definire 1 su <code>add_filter<\/code>per accedere alla variabile a cui \u00e8 agganciato il filtro. Le azioni, tuttavia, non possono passare argomenti anche se il numero di argomenti \u00e8 impostato su 1 come predefinito.<\/p>\n<p>Diamo un&#8217;occhiata a un esempio di definizione del numero di argomenti e di come accediamo ad essi nella nostra funzione di callback:<\/p>\n<pre><code>add_action('save_post', 'my_function_name', 10, 2);\nfunction my_function_name($post_id, $post) {\n    \/\/ Do your stuff\n}<\/code><\/pre>\n<p>Nell&#8217;esempio sopra, diciamo a WordPress di passare due argomenti alla nostra funzione di callback. Ricorda che dobbiamo definire la priorit\u00e0 come terzo parametro, quindi di solito definiamo il valore predefinito, che \u00e8 10. Per quanto riguarda la nostra funzione di callback, ora possiamo definire lo stesso numero di argomenti che abbiamo chiesto, nell&#8217;esempio sopra era 2.<\/p>\n<p>Se nell&#8217;esempio precedente avessimo impostato il numero di argomenti su 1, solo il primo argomento nella nostra funzione di callback sarebbe stato popolato. Il secondo, <code>$post<\/code>, sarebbe indefinito.<\/p>\n<h2>E se avessimo bisogno di dati che non sono stati passati nell&#8217;hook?<\/h2>\n<p>Spetta interamente allo sviluppatore che ha creato l&#8217;hook definire quali argomenti possono essere passati. Ci\u00f2 significa che non puoi semplicemente forzare gli argomenti che desideri o di cui hai bisogno nel tuo <code>add_action<\/code>o <code>add_filter<\/code>. Fortunatamente nella maggior parte dei casi abbiamo alternative per ottenere le variabili di cui abbiamo bisogno. Se stai agganciando un&#8217;azione o un filtro in cui sai che alcune variabili globali dovrebbero essere definite, puoi accedere a queste variabili globali nella tua funzione di callback. Inoltre, WordPress ha <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">un&#8217;intera gamma di tag condizionali<\/a> che puoi utilizzare nelle tue funzioni agganciate (con l&#8217;eccezione dei primissimi hook che si verificano prima che WordPress definisca questi tag condizionali)<\/p>\n<p>Diamo un&#8217;occhiata a un esempio di accesso a variabili globali. Il filtro <code>the_title<\/code>fornisce l&#8217;ID del post come argomento opzionale, a cui possiamo accedere definendolo come argomento accettabile;<\/p>\n<pre><code>add_filter('the_title', 'my_function_name', 10, 2);\nfunction my_function_name($title, $post_id) {\n    if ($post_id == 1) {\n        return 'First post ever!';\n    }\n    return $title;\n}<\/code><\/pre>\n<p>Tuttavia, possiamo ottenere lo stesso risultato;<\/p>\n<pre><code>add_filter('the_title', 'my_function_name');\nfunction my_function_name($title) {\n    global $post;\n    if ($post-&gt;ID == 1) {\n        return 'First post ever!';\n    }\n    return $title;\n}<\/code><\/pre>\n<p>Se sai che una variabile globale \u00e8 definita dal punto in cui viene eseguito l&#8217;hook, puoi definirla come globale nella tua funzione di callback e accedere ai dati da l\u00ec. Ad esempio, la definizione <code>global $wp_query<\/code>nell&#8217;esempio sopra ti darebbe anche accesso all&#8217;oggetto wp_query completo all&#8217;interno della tua funzione di callback.<\/p>\n<p><a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">I tag condizionali di WordPress<\/a> sono estremamente utili. A meno che tu non sia agganciato a un hook che si verifica molto presto nell&#8217;esecuzione di WordPress, sono disponibili. Ci sono tag condizionali per controllare a quale pagina (modello) ti trovi, se ti trovi all&#8217;interno di un menu o di un ciclo di post e molto altro. Ad esempio, quando si modifica la query del post utilizzando l&#8217;hook <code>pre_get_posts<\/code>, \u00e8 molto utile assicurarsi che il codice venga eseguito solo in determinati casi. Per esempio;<\/p>\n<pre><code>add_action('pre_get_posts', 'my_function_name');\nfunction my_function_name($query) {\n    if (!is_admin()) {\n        \/\/ Do your stuff\n    }\n}<\/code><\/pre>\n<p>Poich\u00e9 l&#8217;hook <code>pre_get_posts<\/code>viene eseguito sia in admin che in frontend, possiamo utilizzare un tag condizionale per garantire che il nostro codice influisca solo sulla query frontend.<\/p>\n<h2>Creare i tuoi ganci<\/h2>\n<p>\u00c8 possibile definire le proprie azioni e filtri. Se sei uno sviluppatore di temi o plugin, sei incoraggiato a farlo, in modo da consentire ad altri di modificare il tuo codice senza cambiare il codice sorgente.<\/p>\n<p>Registra un&#8217;azione con <code>do_action()<\/code>e registra un filtro con <code>apply_filters()<\/code>.<\/p>\n<p>Il <code>do_action()<\/code>richiede un minimo di 1 parametro; il nome del gancio. Tieni presente che il nome dell&#8217;hook deve essere univoco (non chiamarlo ad esempio <code>init<\/code>perch\u00e9 si tratta di un hook principale di WordPress). Posiziona il <code>do_action()<\/code>punto dove vuoi che appaia il gancio. Ad esempio, puoi posizionare l&#8217;hook nel tuo tema <code>header.php<\/code>, subito dopo il corpo per definire un hook in cui gli sviluppatori possono produrre script o altro contenuto.<\/p>\n<pre><code>...\n&lt;body&gt;\n    &lt;?php do_action('mytheme_after_body'); ?&gt;<\/code><\/pre>\n<p>Puoi aggiungere tutti i parametri <code>do_action<\/code>che vuoi dopo il nome dell&#8217;hook. Cerca di tenere a mente ci\u00f2 di cui gli sviluppatori di dati avrebbero bisogno nei tuoi hook, che altrimenti non sarebbero facilmente accessibili.<\/p>\n<p>Il <code>apply_filters()<\/code>richiede un minimo di 2 parametri; il nome dell&#8217;hook e la variabile su cui stai registrando il filtro. Ad esempio, il tuo tema pu\u00f2 registrare un filtro attorno ad alcune classi HTML per consentire agli sviluppatori di modificarle o aggiungerle:<\/p>\n<pre><code>&lt;section class=\"&lt;?php echo apply_filters('mytheme_section_classes', 'section default-class'); ?&gt;\"&gt;\n    ...\n&lt;\/section&gt;<\/code><\/pre>\n<p>Come per le azioni, puoi aggiungere tutti i parametri <code>apply_filters<\/code>che desideri dopo i due parametri obbligatori.<\/p>\n<h2>Conclusione e risorse utili<\/h2>\n<p>Con questo spero che tu abbia raggiunto una solida comprensione di come WordPress esegue la maggior parte del suo codice, come puoi modificare il codice e come tu come sviluppatore puoi consentire anche ad altri sviluppatori di apportare modifiche al tuo codice.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aggiungi_azione<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aggiungi_filtro<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tag condizionali di WordPress<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fare_azione<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">applica_filtri<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questa guida per principianti impareremo cosa sono gli hook e i filtri di WordPress, come funzionano e come usarli.<\/p>\n","protected":false},"author":1,"featured_media":153117,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,896,720,835,1110,835,928,720,928,844,844,865,865],"tags":[1168],"class_list":["post-233537","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-guida-per-principianti","category-n-a","category-soggetti","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233537"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233537\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/153117"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}