{"id":229667,"date":"2022-11-01T13:30:00","date_gmt":"2022-11-01T10:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229667"},"modified":"2022-11-09T15:51:35","modified_gmt":"2022-11-09T12:51:35","slug":"filtraggio-corretto-dei-contenuti-dei-post-e-comprensione-di-apply_filters","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/filtraggio-corretto-dei-contenuti-dei-post-e-comprensione-di-apply_filters\/","title":{"rendered":"Filtraggio corretto dei contenuti dei post (e comprensione di apply_filters)"},"content":{"rendered":"\n<p>Di tanto in tanto, ogni volta che lavoro con codice sorgente preesistente o eseguo un controllo del codice, vedr\u00f2 altri modificare il contenuto del post di un oggetto post <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-00-my_content-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">come questo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$post-&gt;post_content = $my_content;\n<\/code><\/pre>\n<p>A questo punto, alcuni entreranno e diranno immediatamente che stai sbagliando. Odio quella frase (ed \u00e8 persino disseminata in tutta la base di codice di WordPress, ma sto divagando).<\/p>\n<p>Esistono modi per utilizzare altre funzioni API di WordPress esistenti per disinfettare i dati prima di impostarli su un valore uguale al valore dell&#8217;attributo <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Post\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post_content<\/a>, l&#8217;utilizzo di quelle funzioni non \u00e8 il modo migliore per farlo.<\/p>\n<p>Invece, dovremmo usare tutti apply_filters. Il problema? Alcuni non sanno, alcuni non sanno come funziona e altri non sanno come usarlo. Non \u00e8 chiaro come filtrare correttamente i contenuti dei post.<\/p>\n<p>Contenuto grezzo filtrato da WordPress e poi scritto nel database.<\/p>\n<p>Ma per coloro che possono rientrare in una qualsiasi delle categorie di cui sopra, forse questo pu\u00f2 aiutare.<\/p>\n<h2>Filtrare correttamente i contenuti dei post<\/h2>\n<p>A questo punto, presumo che tu conosca <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Post<\/a>, le sue propriet\u00e0 e come modificarle tramite varie funzioni API.<\/p>\n<p>Il problema principale di cui sto parlando \u00e8 assicurarsi che il contenuto che verr\u00e0 scritto nel database sia formattato nello stesso modo in cui lo farebbe WordPress se dovessi scrivere o aggiornare un post.<\/p>\n<p>E il modo in cui ci\u00f2 accade <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-03-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e8 cos\u00ec<\/a> (e arriveremo presto ai dettagli):<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Assume $contents is an array of information we want to convert into content for a post.\n *\/\n\n$new_content = '';\nforeach ($contents as $line) {\n\n    if (false === strpos( $line, $name)) {\n        $new_content .= $line;\n    }\n}\n\n$post-&gt;post_content = apply_filters( 'the_content', $new_content );\n<\/code><\/pre>\n<p>Ma le domande su cosa fa questa funzione, come funziona e quando usarla rimangono.<\/p>\n<h3>Che cos&#8217;\u00e8 apply_filters?<\/h3>\n<p>Certo, puoi leggere tutto su questo nelle Risorse per gli sviluppatori e d\u00e0 <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questa definizione<\/a> :<\/p>\n<blockquote>\n<p>Chiama le funzioni aggiunte a un hook di filtro.<\/p>\n<\/blockquote>\n<p>Ma questo non sempre aiuta. Voglio dire, possiamo leggere la documentazione e andarcene ancora confusi, giusto?<\/p>\n<p>Pensaci in questo modo:<\/p>\n<ol>\n<li>Un filtro \u00e8 una funzione che accetta input da elaborare.<\/li>\n<li>L&#8217;input viene elaborato in base alla definizione della funzione.<\/li>\n<li>La funzione restituisce quindi il valore elaborato.<\/li>\n<\/ol>\n<p>Quello che fai con il valore restituito dipende da te, ma quando applichi un filtro o chiami <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">apply_filters<\/a> a un&#8217;informazione, stai dicendo a WordPress: &quot;Ho queste informazioni, per favore applica il filtro identificato da questa chiave e consegna il risultato da me&quot;.<\/p>\n<p>Non male, vero?<\/p>\n<h3>Come funziona?<\/h3>\n<p>Ma c&#8217;\u00e8 una parte di quanto sopra che porta a una domanda. Nello specifico, cito che &#8220;\u2026applica il filtro identificato da questa chiave\u2026&quot; e l&#8217;idea di una chiave pu\u00f2 creare confusione soprattutto perch\u00e9 un filtro o un&#8217;azione o, pi\u00f9 in generale, un hook pu\u00f2 essere identificato da quello che viene chiamato tag o a chiave.<\/p>\n<p>Sono sinonimi. Quindi, quando vedi <strong>tag<\/strong> o <strong>chiave<\/strong> nel contesto di un hook, trattali come tali.<\/p>\n<p>Detto questo, ecco come funziona:<\/p>\n<ol>\n<li>La funzione apply_filters accetta due argomenti. Il primo \u00e8 il tag o la chiave (a seconda di come lo vuoi chiamare) associato al filtro (leggi: funzione) che vuoi utilizzare per elaborare il lavoro, il secondo \u00e8 il valore che vuoi elaborare all&#8217;interno di detta funzione.<\/li>\n<li>Il filtro si attiver\u00e0 e restituir\u00e0 un risultato (o, ricorda, la funzione che abbiamo definito).<\/li>\n<li>Quindi prendiamo il valore restituito e lo applichiamo a qualsiasi propriet\u00e0 desideriamo.<\/li>\n<\/ol>\n<p>Quindi, ad esempio, \u00e8 probabile che tu veda qualcosa del <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-01-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">genere<\/a> nel codice di qualcun altro (o forse anche nel tuo):<\/p>\n<pre><code>&lt;?php\n\n$post-&gt;post_content = apply_filters( 'the_content', $my_content );\n<\/code><\/pre>\n<p>E ora che hai un po&#8217; di contesto su come funziona, ti viene l&#8217;idea, giusto?<\/p>\n<h3>Come lo usiamo?<\/h3>\n<p>Questo porta il post al punto di partenza per la domanda iniziale su come possiamo usare apply_filters per post_content ogni volta che abbiamo bisogno di inserire o aggiornare un post.<\/p>\n<p>Quindi supponiamo che tu abbia il contenuto che desideri applicare (o aggiungere) al valore del contenuto di un post. Potresti fare qualcosa del <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-02-dont-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">genere<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Assume $contents is an array of information we want to convert into content for a post.\n *\/\n\n$new_content = '';\nforeach ($contents as $line) {\n\n    if (false === strpos( $line, $name)) {\n        $new_content .= $line;\n    }\n}\n\n$post-&gt;post_content = $new_content;\n<\/code><\/pre>\n<p>Ma \u00e8 una cattiva forma. Invece, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a14b284a07d515fe2b08c62ec48ff8fd#file-03-apply-filters-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fai questo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Assume $contents is an array of information we want to convert into content for a post.\n *\/\n\n$new_content = '';\nforeach ($contents as $line) {\n\n    if (false === strpos( $line, $name)) {\n        $new_content .= $line;\n    }\n}\n\n$post-&gt;post_content = apply_filters( 'the_content', $new_content );\n<\/code><\/pre>\n<p>Ed \u00e8 cos\u00ec che fa WordPress.<\/p>\n<h2>Conclusione<\/h2>\n<p>Quindi, date tutte le informazioni e il codice di cui sopra, dovresti essere ben armato non solo per assicurarti di filtrare correttamente i dati che verranno inseriti nel database, ma hai le conoscenze necessarie per definire i tuoi filtri e applicarli a qualsiasi dato tu ritenga opportuno.<\/p>\n<p>Ma esempi per questo \u00e8 contenuto per un altro post.<\/p>\n<p>Nel frattempo, se stai lavorando con i contenuti dei post, assicurati di filtrare correttamente i dati prima di rilasciarli nel database.<\/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>Se stai inserendo o aggiornando i post in modo programmatico, \u00e8 importante assicurarsi di filtrare correttamente i contenuti dei post.<\/p>\n","protected":false},"author":1,"featured_media":221177,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,804,814,720,865],"tags":[1168],"class_list":["post-229667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-plugin-2","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229667","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=229667"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}