{"id":230941,"date":"2022-12-05T13:18:00","date_gmt":"2022-12-05T10:18:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230941"},"modified":"2022-11-10T00:41:52","modified_gmt":"2022-11-09T21:41:52","slug":"le-basi-degli-hook-dazione-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/le-basi-degli-hook-dazione-in-wordpress\/","title":{"rendered":"Le basi degli hook d&#8217;azione in WordPress"},"content":{"rendered":"\n<p>Ogni volta che si inizia ad entrare in una programmazione pi\u00f9 avanzata, che si tratti di WordPress o di qualsiasi altro framework, libreria, fondamento o linguaggio di programmazione, ci sono momenti in cui i nuovi concetti possono spesso essere pi\u00f9 difficili da capire di altri.<\/p>\n<p>In genere ho scoperto che questo \u00e8 vero ogni volta che una persona ha appreso le basi, ad esempio, della programmazione orientata agli oggetti ma non \u00e8 stata esposta alle sfumature di alcune cose come i modelli di progettazione.<\/p>\n<p>Caso in questione: ho scritto <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">del modello di progettazione guidato dagli eventi<\/a><\/strong> (o del <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">publish-subscribe<\/a><\/strong> o Pub\/Sub come alcuni amano definirlo) <strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">in altri post.<\/a><\/strong><\/p>\n<p>S\u00ec, ci sono alcune differenze in ciascuno di essi, ma l&#8217;idea generale \u00e8 che qualcosa accade e viene generato un evento e qualsiasi cosa che ascolti quell&#8217;evento, o sia iscritto a quell&#8217;evento, risponder\u00e0.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466947738.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466947738.jpg\" alt=\"Le basi degli hook d&#039;azione in WordPress\" ><\/a><\/p>\n<p>Foto di Claus Gr\u00fcnst\u00e4udl su Unsplash<\/p>\n<p>Questo \u00e8 il modello principale utilizzato da WordPress che ci consente di agganciarci letteralmente a determinati punti di esecuzione. Possiamo generalmente concettualizzare questi come action hook in WordPress.<\/p>\n<p>Ad ogni modo, l&#8217;applicazione ci mette a disposizione alcuni punti per aggiungere la nostra funzionalit\u00e0. Una volta registrata quella funzionalit\u00e0, WordPress lascer\u00e0 la sua base di codice, per cos\u00ec dire, salta nella nostra, quindi torner\u00e0 alla nostra.<\/p>\n<p>\u00c8 abbastanza facile da capire, ma cosa succede se si desidera esporre aree nel codice che consentono ad altri di collegarsi al codice?<\/p>\n<h2>Action Hook in WordPress<\/h2>\n<p>Prima di vedere come WordPress implementa questi modelli, \u00e8 importante comprendere le basi di questo modello. Sebbene questo non sia affatto completo, ha lo scopo di aiutare a fornire una comprensione di base del modello in modo che sia possibile leggere e scrivere codice incentrato su WordPress.<\/p>\n<p>Allora, qual \u00e8 un buon modo di pensare al modello Pub\/Sub? <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Wikipedia lo definisce come:<\/a><\/strong><\/p>\n<blockquote>\n<p>Nell&#8217;architettura software, publish\u2013subscribe \u00e8 un modello di messaggistica in cui i mittenti di messaggi, chiamati editori, non programmano i messaggi da inviare direttamente a destinatari specifici, chiamati abbonati, ma classificano invece i messaggi pubblicati in classi senza sapere quali abbonati, se presenti, ci potrebbe essere. Allo stesso modo, gli abbonati esprimono interesse per una o pi\u00f9 classi e ricevono solo messaggi di interesse, senza sapere quali editori, se presenti, ci sono.<\/p>\n<\/blockquote>\n<h3>Capire il modello<\/h3>\n<p>Questo potrebbe essere molto da accettare all&#8217;inizio. Non lo so, ma analizziamolo:<\/p>\n<ol>\n<li>C&#8217;\u00e8 un servizio, nel nostro caso WordPress, che \u00e8 responsabile della pubblicazione di messaggi a chiunque si abboni (non sa necessariamente chi sta ascoltando).<\/li>\n<li>Quando un abbonato \u00e8 in ascolto, interverr\u00e0 ogni volta che sente quell&#8217;azione.<\/li>\n<li>Al termine dell&#8217;esecuzione del codice dell&#8217;abbonato, il programma torner\u00e0 al punto di esecuzione originale (che \u00e8 il punto in cui l&#8217;editore ha inviato il messaggio).<\/li>\n<\/ol>\n<p>Ci sono sfumature in questo come la funzionalit\u00e0 asincrona e cose del genere, ma \u00e8 pi\u00f9 avanzato di quanto preferirei ottenere in questo particolare post. Dopotutto, lo scopo \u00e8 gettare le basi per la comprensione e l&#8217;implementazione della funzionalit\u00e0.<\/p>\n<p>La funzionalit\u00e0 asincrona pu\u00f2 entrare nel threading o Ajax e attraverso questi sono argomenti importanti, questo non \u00e8 quel post.<\/p>\n<h3>Com&#8217;\u00e8 questo aspetto in WordPress?<\/h3>\n<p>Forse il modo pi\u00f9 semplice per descrivere questo particolare modello in WordPress \u00e8 attraverso l&#8217;uso delle chiamate di funzione:<\/p>\n<ul>\n<li>fare_azione<\/li>\n<li>aggiungi_azione<\/li>\n<\/ul>\n<p>A volte, la nomenclatura pu\u00f2 essere fonte di confusione, ma in parole povere, <strong>do_action<\/strong> pubblica e un evento e <strong>aggiungi<\/strong> abbonati a un evento. O forse un modo migliore di pensarci \u00e8<strong>:<\/strong><\/p>\n<p>do_action dice a WordPress di eseguire qualsiasi azione sia stata aggiunta.<\/p>\n<p>A volte \u00e8 utile avere frasi semplici per ricordare come funzionano le cose. Non so se quanto sopra sia la frase pi\u00f9 accattivante o pi\u00f9 memorabile, ma \u00e8 qualcosa, giusto?<\/p>\n<p>Inoltre, tieni presente che <strong>do_action<\/strong> e <strong>add_action<\/strong> sono elementi fondamentali di WordPress e sono disponibili anche per il nostro sviluppo. Prima di andare oltre, diamo un&#8217;occhiata a cosa significa ciascuno:<\/p>\n<p>Per <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fare_azione<\/a> :<\/p>\n<blockquote>\n<p>Questa funzione richiama tutte le funzioni associate all&#8217;action hook <code>$tag<\/code>. E&#8217; possibile creare nuovi action hook semplicemente richiamando questa funzione, specificando il nome del nuovo hook tramite il <code>$tag<\/code>parametro.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466d56bdd.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466d56bdd.png\" alt=\"Le basi degli hook d&#039;azione in WordPress\" ><\/a><\/p>\n<p>O ancora pi\u00f9 semplicemente:<\/p>\n<blockquote>\n<p>Esegui funzioni agganciate a un hook di azione specifico.<\/p>\n<\/blockquote>\n<p>Quando si fa riferimento agli hook, possono essere <strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hook definiti da WordPress<\/a><\/strong> o hook personalizzati specificati nel tema o nel plug-in.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467368f0b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467368f0b.png\" alt=\"Le basi degli hook d&#039;azione in WordPress\" ><\/a><\/p>\n<p>Per quanto riguarda <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_action<\/a> :<\/p>\n<blockquote>\n<p>Le azioni sono gli hook che il core di WordPress lancia in punti specifici durante l&#8217;esecuzione o quando si verificano eventi specifici. I plugin possono specificare che una o pi\u00f9 delle sue funzioni PHP vengono eseguite in questi punti, utilizzando l&#8217;API Action.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467888f17.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467888f17.png\" alt=\"Le basi degli hook d&#039;azione in WordPress\" ><\/a><\/p>\n<p>E, allo stesso modo, pi\u00f9 semplicemente:<\/p>\n<blockquote>\n<p>Aggancia una funzione a un&#8217;azione specifica.<\/p>\n<\/blockquote>\n<p>L&#8217;impostazione pratica \u00e8 leggermente diversa perch\u00e9 generalmente utilizziamo <strong>add_action<\/strong> per aggiungere il nostro codice a WordPress.<\/p>\n<h3>Un esempio pratico<\/h3>\n<p>Ad esempio, forse hai scritto qualcosa del <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/035b213bd632d2ab9fc4a79acffa1342\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">genere:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\nadd_action('wp_insert_post_data', __NAMESPACE__. 'processPermalink');\n\/**\n * Processes the permalink so we can remove any characters that may cause a problem when communicating\n * with the API.\n *\n * @param  array $data The array of information about the post.\n * @return array $data The data without the malformed information in the post name for the URL.\n *\/\npublic function processPermalink($data)\n{\n    if (!in_array($data['post_status'], array('draft', 'pending', 'auto-draft'))) {\n        $data['post_name'] =\n            preg_replace(\n                '\/(%ef%b8%8f|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9)\/',\n                '',\n                $data['post_name']\n            );\n    }\n    return $data;\n}\n<\/code><\/pre>\n<p>In questo caso, da qualche parte nella codebase di WordPress c&#8217;\u00e8 una chiamata <strong>do_action<\/strong> per l&#8217; hook <strong>wp_insert_post_data<\/strong> e accetta una funzione e le passer\u00e0 almeno un singolo parametro.<\/p>\n<h3>Aggiungere i tuoi ganci<\/h3>\n<p>Ma cosa succede se vuoi dare ad altri sviluppatori la possibilit\u00e0 di agganciarsi al tuo plugin o tema? In tal caso, dovresti preoccuparti di usare do_action e la pagina collegata in precedenza in questo documento fornisce tutto ci\u00f2 di cui hai bisogno per configurarlo.<\/p>\n<p>In realt\u00e0 \u00e8 molto pi\u00f9 semplice, secondo me, che lavorare con <strong>add_action<\/strong> perch\u00e9 <strong>add_action<\/strong> prevede che non solo ci colleghiamo a un editore esistente, ma che aggiungiamo la nostra logica personalizzata.<\/p>\n<p><strong>do_action<\/strong> invece richiede di fornire un nome della funzione da eseguire e quindi l&#8217;elenco di argomenti da passare alla funzione che verr\u00e0 eseguita.<\/p>\n<h2>Questo \u00e8 tutto?<\/h2>\n<p>Nel modo pi\u00f9 semplice possibile, s\u00ec. Ci sono alcune sfumature riguardo alla priorit\u00e0, al numero di argomenti e al lavoro con gli spazi dei nomi e la programmazione orientata agli oggetti. Ma, ancora una volta, questo \u00e8 al di fuori dello scopo di questo particolare post. Forse ne parler\u00f2 pi\u00f9 approfonditamente in un altro post.<\/p>\n<p>Per ora, per\u00f2, se non hai familiarit\u00e0 con le basi di:<\/p>\n<ul>\n<li>il modello Pub\/Sub,<\/li>\n<li>fare_azione,<\/li>\n<li>e aggiungi_azione<\/li>\n<\/ul>\n<p>Ora sei abbastanza a tuo agio da leggere il codice con cui stai lavorando, capire come funziona il codice e persino implementare le tue soluzioni quando necessario.<\/p>\n<p>Attualmente sto scrivendo un eBook (insieme a una variet\u00e0 di altri contenuti premium). Se sei interessato, <a href=\"https:\/\/tommcfarlin.com\/registration-info\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">controlla cosa ottieni<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comprendere le basi degli hook di azioni in WordPress \u00e8 importante, ma prima di farlo \u00e8 importante riconoscere il modello di progettazione sottostante.<\/p>\n","protected":false},"author":1,"featured_media":162882,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[865],"tags":[1168],"class_list":["post-230941","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230941","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=230941"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230941\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/162882"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}