{"id":230261,"date":"2022-11-16T10:29:00","date_gmt":"2022-11-16T07:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230261"},"modified":"2022-11-16T19:38:27","modified_gmt":"2022-11-16T16:38:27","slug":"modelli-wordpress-per-principianti-html-calling-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/modelli-wordpress-per-principianti-html-calling-php\/","title":{"rendered":"Modelli WordPress per principianti: HTML Calling PHP"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/it\/modelli-wordpress-per-principianti-come\/\" title=\"Ieri\">Ieri<\/a> ho abbozzato come concettualizzare quanti di noi sono probabilmente abituati a lavorare con i modelli di WordPress.<\/p>\n<p>Sebbene la separazione delle preoccupazioni con CSS e JavaScript sia solida, i modelli sono problematici ogni volta che c&#8217;\u00e8 molto PHP mescolato con il nostro markup.<\/p>\n<p>Per essere chiari, non possiamo fare a meno di includere i tag dei modelli perch\u00e9 questa \u00e8 la natura del funzionamento di WordPress e dei sistemi di gestione dei contenuti generali basati su PHP.<\/p>\n<p>Il problema si presenta ogni volta che lavoriamo con modelli che contengono codice che effettua chiamate pi\u00f9 complesse a varie API. Anche se l&#8217;ho dimostrato usando <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a> (e continuer\u00f2 a farlo), non \u00e8 solo quella query.<\/p>\n<p>Comunque, per\u00f2, cosa dovremmo fare con questo?<\/p>\n<h2>Modelli WordPress: quando HTML chiama PHP<\/h2>\n<p>Innanzitutto, \u00e8 importante pensare al motivo per cui mescolare cos\u00ec tanto PHP e markup \u00e8 una cattiva idea.<\/p>\n<p>\u00c8 facile dire che rende pi\u00f9 difficile mantenere il codice <a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ASCIUTTO<\/a> (e c&#8217;\u00e8 del vero), ma cosa succede se usiamo solo una singola query o un singolo blocco di codice una volta? Essere ASCIUTTI \u00e8 davvero cos\u00ec importante allora?<\/p>\n<p>Per essere chiari, s\u00ec, penso che sia importante per mantenere il codice SECCO, ma se useremo una chiamata solo una volta penso ancora che importi se non altro per mantenere il codice del modello pulito come possibile.<\/p>\n<p>Pensala in questo modo: ogni volta che vogliamo visualizzare il titolo, il contenuto e l&#8217;autore del post, tutto ci\u00f2 che dobbiamo chiamare sono tre funzioni:<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/the_title\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il titolo();<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/the_content\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il contenuto();<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/the_author_meta\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_author_meta();<\/a><\/li>\n<\/ul>\n<p>Quindi immagina di adattare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2c02b22272f645076f7f735bd61a4034#file-00-content-container-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il seguente codice<\/a> (che \u00e8 quello che abbiamo visto nel post precedente):<\/p>\n<pre><code>&lt;div id=\"content-container\"&gt;\n\n  &lt;p&gt;\n    Oh! The garbage chute was a really wonderful idea. What an incredible smell you've discovered! Let's get out of here! \n    Get away from there... No! wait! Will you forget it? I already tried it. It's magnetically sealed! Put that \n    thing away! You're going to get us all killed.\n  &lt;\/p&gt;\n\n  &lt;h2&gt;List of Post Titles For Acme Post Type&lt;\/h2&gt;\n  &lt;?php\n  $args = array(\n    'post_status'    =&gt; 'publish',\n    'post_type'      =&gt; 'acme',\n    'posts_per_page' =&gt; '10'\n  );\n  $custom_query = new WP_Query( $args );\n\n  if ($custom_query-&gt;have_posts()) {\n    echo '&lt;ul&gt;';\n    while ($custom_query-&gt;have_posts()) {\n      $custom_query-&gt;the_post();\n      echo '&lt;li&gt;'. get_the_title(). '&lt;\/li&gt;';\n    }\n    echo '&lt;\/ul&gt;';\n    wp_reset_postdata();\n  }\n  ?&gt;\n\n  &lt;p&gt;\n    Absolutely, Your Worship. Look, I had everything under control until you led us down here. You know, it's not \n    going to take them long to figure out what happened to us. It could be worst... It's worst. \n    There's something alive in here! That's your imagination. Something just moves past my leg! \n    Look! Did you see that? What? Help!\n  &lt;\/p&gt;\n\n&lt;\/div&gt;&lt;!-- #content-container --&gt;<\/code><\/pre>\n<p>Per assomigliare a questo:<\/p>\n<pre><code>&lt;div id=\"content-container\"&gt;\n\n  &lt;p&gt;\n    Oh! The garbage chute was a really wonderful idea. What an incredible smell you've discovered! Let's get out of here! \n    Get away from there... No! wait! Will you forget it? I already tried it. It's magnetically sealed! Put that \n    thing away! You're going to get us all killed.\n  &lt;\/p&gt;\n\n  &lt;h2&gt;List of Post Titles For Acme Post Type&lt;\/h2&gt;\n  &lt;?php acme_get_titles(); ?&gt;\n\n  &lt;p&gt;\n    Absolutely, Your Worship. Look, I had everything under control until you led us down here. You know, it's not \n    going to take them long to figure out what happened to us. It could be worst... It's worst. \n    There's something alive in here! That's your imagination. Something just moves past my leg! \n    Look! Did you see that? What? Help!\n  &lt;\/p&gt;\n\n&lt;\/div&gt;&lt;!-- #content-container --&gt;<\/code><\/pre>\n<p>Molto pi\u00f9 pulito, giusto? Ma c&#8217;\u00e8 di pi\u00f9 in quello che vedi oltre a questo. In particolare, se lavoreremo con HTML dietro le quinte, dobbiamo assicurarci di disinfettarlo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2c02b22272f645076f7f735bd61a4034#file-02-acme-get-titles-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">correttamente<\/a> usando qualcosa come <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_kses\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_kses<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Runs a custom query to get the most recent ten published articles of the\n * acme post type and then prints a sanitized list of the the titles.\n *\/\nfunction acme_get_titles()\n{\n\n  $args = array(\n    'post_status'    =&gt; 'publish',\n    'post_type'      =&gt; 'acme',\n    'posts_per_page' =&gt; '10'\n  );\n  $custom_query = new WP_Query( $args );\n\n  if ($custom_query-&gt;have_posts()) {\n    $html = '&lt;ul&gt;';\n    while ($custom_query-&gt;have_posts()) {\n      $custom_query-&gt;the_post();\n      $html .= '&lt;li&gt;'. get_the_title(). '&lt;\/li&gt;';\n    }\n    $html .= '&lt;\/ul&gt;';\n    wp_reset_postdata();\n  }\n\n  echo _acme_sanitize_titles($html);\n}\n\n\/**\n * Uses the WordPress wp_kses() API to sanitize and echo the incoming markup.\n *\n * @param string $html The HTML to sanitize.\n *\/\nfunction _acme_sanitize_titles($html) {\n\n  if(empty($html)) {\n    echo $html;\n  }\n\n  echo wp_kses(\n    $html,\n    array(\n      'ul' =&gt; array(),\n      'li' =&gt; array(),\n    );\n  );\n}<\/code><\/pre>\n<p>Ora, l&#8217;idea di inserire l&#8217;HTML da PHP in un template WordPress \u00e8 considerata un anti-pattern da alcuni sviluppatori. E questo non \u00e8 senza merito.<\/p>\n<p>C&#8217;\u00e8 per\u00f2 un gioco di equilibrio da svolgere nel corso di questa serie: si tratta di introdurre il modo in cui le persone spesso presentano le informazioni e poi ripulirle un po&#8217;.<\/p>\n<p>Per andare un po&#8217; oltre, \u00e8 possibile, e non del tutto una cattiva idea, separare ancora di pi\u00f9 la funzione WP_Query per usare <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_template_part\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_template_part<\/a>. Questo comporta un po&#8217; di codice pi\u00f9 pulito, ma richiede anche che esaminiamo quella funzione in modo approfondito.<\/p>\n<p>Ed \u00e8 qualcosa che non mi interessa fare in questa particolare serie.<\/p>\n<h2>Come dovremmo visualizzarlo?<\/h2>\n<p>Quando si tratta di modelli, possiamo concettualizzare questo in un paio di modi diversi.<\/p>\n<ol>\n<li>In alcuni linguaggi di template, \u00e8 utile pensare al PHP che inserisce le informazioni nel template,<\/li>\n<li>Nell&#8217;esempio sopra, \u00e8 utile pensare al file modello che richiede le informazioni dallo script PHP.<\/li>\n<\/ol>\n<p>Quindi, nell&#8217;esempio sopra, abbiamo una funzione situata, diciamo, in <strong>functions.php<\/strong> e il file modello che la richiama:<\/p>\n<p>Ha senso? Ma il modo in cui ci\u00f2 viene realizzato, in termini di codice dietro quella singola chiamata di funzione, \u00e8 contenuto per un post tutto suo.<\/p>\n<p>Ed \u00e8 quello che cercher\u00f2 nel seguente post.<\/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>Capire come i modelli di WordPress richiamano i file PHP pu\u00f2 aiutarci a scrivere codice DRY, ma anche codice pi\u00f9 facile da leggere e pi\u00f9 semplice da mantenere.<\/p>\n","protected":false},"author":1,"featured_media":223984,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,835,844,865],"tags":[1168],"class_list":["post-230261","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-guida-per-principianti","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230261","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=230261"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230261\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223984"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}