{"id":231724,"date":"2022-12-23T11:45:00","date_gmt":"2022-12-23T08:45:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231724"},"modified":"2022-12-07T10:47:57","modified_gmt":"2022-12-07T07:47:57","slug":"includere-modelli-personalizzati-nei-nostri-plugin-per-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/includere-modelli-personalizzati-nei-nostri-plugin-per-wordpress\/","title":{"rendered":"Includere modelli personalizzati nei nostri plugin per WordPress"},"content":{"rendered":"\n<p>Penso che uno degli aspetti pi\u00f9 sottovalutati \u2013 o forse uno degli aspetti raramente discussi dello sviluppo di plugin personalizzati \u2013 sia la possibilit\u00e0 di includere modelli personalizzati nei nostri plugin di WordPress.<\/p>\n<p>E, ad essere onesti, ho capito: sono uno che \u00e8 piuttosto convinto su cosa dovrebbe essere un plugin e cosa dovrebbe essere un tema.<\/p>\n<p>Questo \u00e8:<\/p>\n<ul>\n<li>i temi sono per la presentazione,<\/li>\n<li>i plugin sono funzionalit\u00e0.<\/li>\n<\/ul>\n<p>Se includo modelli in un plug-in, non sto facendo la stessa cosa di quando gli sviluppatori includono funzionalit\u00e0 nei loro temi?<\/p>\n<p>Come per tante cose in fase di sviluppo, penso che dipenda. Voglio dire, aggiungere molte funzionalit\u00e0 che ti bloccano in un tema \u00e8 qualcosa di cui non sono un fan. Allo stesso modo, se hai un plug-in che ha lo scopo di mostrare i dati sul front-end ed \u00e8 indipendente dal tema, allora ha senso.<\/p>\n<p>Quindi devi essere giudizioso nelle tue decisioni.<\/p>\n<p>Indipendentemente da ci\u00f2, esiste una serie comune di passaggi che possiamo utilizzare quando includiamo modelli personalizzati nei nostri plugin di WordPress.<\/p>\n<p>Ed \u00e8 ci\u00f2 che questo post mostrer\u00e0.<\/p>\n<p>Se intendi includere modelli personalizzati nel plug-in, suppongo che utilizzi sia modelli singoli che modelli di archivio. In caso contrario, utilizzare solo gli hook e il codice di seguito di cui si ha bisogno.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160512-61e70bad43f3a.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-160512-61e70bad43f3a.png\" alt=\"Includere modelli personalizzati nei nostri plugin per WordPress\" ><\/a><\/p>\n<p>Per entrambi, per\u00f2, sappi questi:<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/single_template\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">modello_singolo<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/archive_template\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">modello_archivio<\/a><\/li>\n<\/ul>\n<p>Usando questi hook, puoi dire a WordPress dove risiedono i modelli personalizzati nel tuo plug-in.<\/p>\n<h3>Organizzazione dei modelli<\/h3>\n<p>Per me, di solito ho una\u00a0 directory di <strong>modelli<\/strong> nel mio plug-in che si trova allo stesso livello delle\u00a0 directory <strong>asset, src<\/strong> e <strong>vendor<\/strong>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160512-61e70bb112f53.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-160512-61e70bb112f53.png\" alt=\"Includere modelli personalizzati nei nostri plugin per WordPress\" ><\/a><\/p>\n<p>Ci\u00f2 rende facile sapere dove risiedono e fornisce un modo coerente per includerli in tutti i plugin che hai creato. Dopotutto, c&#8217;\u00e8 qualcosa da dire per essere coerenti nelle convenzioni che utilizziamo.<\/p>\n<h3>Compresi i modelli<\/h3>\n<p>Supponendo che tu abbia\u00a0 il modello <strong>single-acme.php<\/strong> e il modello <strong>archive-acme.php<\/strong>, \u00e8 facile includerlo. E anche se sono pi\u00f9 un fan dell&#8217;utilizzo della programmazione orientata agli oggetti, mostrer\u00f2 di includere questi modelli usando il codice procedurale.<\/p>\n<p>\u00c8 facile convertire questo codice in codice orientato agli oggetti, se lo desideri. Inoltre, suppongo che tu lo includa anche per i tipi di post personalizzati.<\/p>\n<p>Puoi sempre omettere un condizionale per un tipo di post personalizzato se vuoi semplicemente includere questi modelli ma, nella mia esperienza, trovo raro che queste situazioni non utilizzino tipi di post personalizzati ma non conosco la tua situazione.<\/p>\n<p>Detto questo, ecco il codice.<\/p>\n<h4>Definire i ganci<\/h4>\n<p>Per prima cosa, dobbiamo definire gli hook. Questo \u00e8 relativamente semplice poich\u00e9 useremo i ganci descritti sopra.<\/p>\n<p>Innanzitutto, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-02-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il modello unico<\/a> :<\/p>\n<pre><code>&lt;?php\n\nadd_action('single_template', 'acmeIncludeSingleTemplate');\n\/**\n * Includes a custom, single template as included in a plugin. If\n * the template is being viewed for a custom post type then use it;\n * otherwise, use the template that's provided by WordPress at runtime.\n *\n * @param  string $originalTemplate the path to the original template\n *\n * @return string the path to the original template or the custom template.\n *\/\nfunction acmeIncludeSingleTemplate($originalTemplate)\n{\n   \/\/ More to come...\n}<\/code><\/pre>\n<p>E poi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-03-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il modello di archivio<\/a> :<\/p>\n<pre><code>&lt;?php\n\nadd_action('archive_template', 'acmeIncludeArchiveTemplate');\n\/**\n * Includes a custom, archive template as included in a plugin. If\n * the template is being viewed for a custom post type then use it;\n * otherwise, use the template that's provided by WordPress at runtime.\n *\n * @param  string $originalArchiveTemplate the path to the original template\n *\n * @return string the path to the original template or the custom template.\n *\/\nfunction acmeIncludeArchiveTemplate($originalArchiveTemplate)\n{\n  \/\/ More to come...\n}<\/code><\/pre>\n<p>E ora possiamo implementare il codice per ciascuna delle funzioni.<\/p>\n<h4>Aggiunta del codice<\/h4>\n<p>Quindi, per prima cosa, esamineremo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-00-acme-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il singolo modello<\/a> :<\/p>\n<pre><code>&lt;?php\n\nadd_action('single_template', 'acmeIncludeSingleTemplate');\n\/**\n * Includes a custom, single template as included in a plugin. If\n * the template is being viewed for a custom post type then use it;\n * otherwise, use the template that's provided by WordPress at runtime.\n *\n * @param  string $originalTemplate the path to the original template\n *\n * @return string the path to the original template or the custom template.\n *\/\nfunction acmeIncludeSingleTemplate($originalTemplate)\n{\n  $singleTemplate = plugin_dir_path(\n    dirname(\n      __DIR__) );\n  $singleTemplate .= '\/templates\/single-acme.php';\n\n  if ('acme-cpt' === get_post_type(get_the_ID())) {\n      if (file_exists($singleTemplate)) {\n          return $singleTemplate;\n      }\n  }\n\n  return $originalTemplate;\n}<\/code><\/pre>\n<p>E ora <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-01-acme-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il modello di archivio<\/a> :<\/p>\n<pre><code>&lt;?php\n\nadd_action('archive_template', 'acmeIncludeArchiveTemplate');\n\/**\n * Includes a custom, archive template as included in a plugin. If\n * the template is being viewed for a custom post type then use it;\n * otherwise, use the template that's provided by WordPress at runtime.\n *\n * @param  string $originalArchiveTemplate the path to the original template\n *\n * @return string the path to the original template or the custom template.\n *\/\nfunction acmeIncludeArchiveTemplate($originalArchiveTemplate)\n{\n  $archiveTemplate = plugin_dir_path(\n    dirname(\n      __DIR__) );\n  $archiveTemplate .= '\/templates\/archive-acme.php';\n\n  if ('acme-cpt' === get_post_type(get_the_ID())) {\n      if (file_exists($archiveTemplate)) {\n          return $archiveTemplate;\n      }\n  }\n\n  return $originalArchiveTemplate;\n}<\/code><\/pre>\n<p>Se hai prestato molta attenzione al codice, sai che c&#8217;\u00e8 ben poco di diverso. In effetti, il processo generale pu\u00f2 essere cos\u00ec delineato:<\/p>\n<ol>\n<li>definire il gancio,<\/li>\n<li>individuare il modello,<\/li>\n<li>controlla il tipo di post personalizzato,<\/li>\n<li>il modello esiste, usalo<\/li>\n<li>in caso contrario, utilizzare il modello predefinito<\/li>\n<\/ol>\n<p>E questo \u00e8 il processo sia per i modelli singoli che per quelli di archivio.<\/p>\n<h3>Scrittura di modelli compatibili<\/h3>\n<p>E infine, e questo \u00e8 importante soprattutto se vuoi rendere il modello il pi\u00f9 agnostico possibile, cerco di utilizzare il maggior numero possibile di tag template WordPress integrati quando mostro il contenuto relativo al plugin. Ci\u00f2 consente agli sviluppatori di temi di modellarlo facilmente per adattarlo al loro tema.<\/p>\n<p>No, non sarai in grado di ospitare tutti i temi, ma questa \u00e8 la natura dei temi di WordPress. Il punto \u00e8 prendere il pi\u00f9 possibile il lavoro di recupero e rendering dei dati dal modello in modo che gli sviluppatori front-end possano gestirlo facilmente.<\/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>C&#8217;\u00e8 una serie comune di passaggi che possiamo utilizzare quando includiamo modelli personalizzati nei nostri plugin di WordPress.<\/p>\n","protected":false},"author":1,"featured_media":236054,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,835,804,720,844,865],"tags":[1168],"class_list":["post-231724","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-guida-per-principianti","category-php-6","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231724","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=231724"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231724\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}