{"id":230935,"date":"2022-12-23T11:07:00","date_gmt":"2022-12-23T08:07:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230935"},"modified":"2022-12-07T10:47:59","modified_gmt":"2022-12-07T07:47:59","slug":"inkluderar-anpassade-mallar-i-vaara-wordpress-plugins","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/inkluderar-anpassade-mallar-i-vaara-wordpress-plugins\/","title":{"rendered":"Inkluderar anpassade mallar i v\u00e5ra WordPress-plugins"},"content":{"rendered":"\n<p>Jag tror att en av de mer underskattade aspekterna \u2013 eller kanske en av de s\u00e4llan diskuterade aspekterna av anpassade plugin-utveckling \u2013 \u00e4r m\u00f6jligheten att inkludera anpassade mallar i v\u00e5ra WordPress-plugins.<\/p>\n<p>Och, f\u00f6r att vara \u00e4rlig, jag f\u00f6rst\u00e5r det: jag \u00e4r en som \u00e4r ganska trogen p\u00e5 vad som ska vara ett plugin och vad som ska vara ett tema.<\/p>\n<p>Det \u00e4r:<\/p>\n<ul>\n<li>teman \u00e4r f\u00f6r presentation,<\/li>\n<li>plugins \u00e4r funktionalitet.<\/li>\n<\/ul>\n<p>Om jag inkluderar mallar i ett plugin, g\u00f6r jag inte samma sak som n\u00e4r utvecklare inkluderar funktionalitet i sina teman?<\/p>\n<p>Som med s\u00e5 m\u00e5nga saker under utveckling tror jag att det beror p\u00e5. Jag menar, att l\u00e4gga till mycket funktionalitet som l\u00e5ser in dig i ett tema \u00e4r n\u00e5got som jag inte \u00e4r ett fan av. P\u00e5 samma s\u00e4tt, om du har ett plugin som \u00e4r t\u00e4nkt att visa upp data p\u00e5 front-end och \u00e4r temaagnostisk, d\u00e5 \u00e4r det vettigt.<\/p>\n<p>S\u00e5 du m\u00e5ste vara klok i dina beslut.<\/p>\n<p>Oavsett vilket finns det en vanlig upps\u00e4ttning steg vi kan anv\u00e4nda n\u00e4r vi inkluderar anpassade mallar i v\u00e5ra WordPress-plugins.<\/p>\n<p>Och det \u00e4r vad det h\u00e4r inl\u00e4gget kommer att visa.<\/p>\n<p>Om du ska inkludera anpassade mallar i plugin-programmet, kommer jag att anta att du anv\u00e4nder b\u00e5de enstaka mallar och arkivmallar. Om inte, anv\u00e4nd endast krokarna och koden nedan som du beh\u00f6ver.<\/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=\"Inkluderar anpassade mallar i v\u00e5ra WordPress-plugins\" ><\/a><\/p>\n<p>F\u00f6r b\u00e5da, men vet dessa:<\/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\">single_template<\/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\">arkivmall<\/a><\/li>\n<\/ul>\n<p>Med hj\u00e4lp av dessa krokar kan du ber\u00e4tta f\u00f6r WordPress var de anpassade mallarna finns i ditt plugin.<\/p>\n<h3>Organisera mallar<\/h3>\n<p>F\u00f6r mig har jag vanligtvis en <strong>mallkatalog<\/strong> i mitt plugin som finns p\u00e5 samma niv\u00e5 som <strong>tillg\u00e5ngar, src<\/strong> och <strong>leverant\u00f6rskataloger<\/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=\"Inkluderar anpassade mallar i v\u00e5ra WordPress-plugins\" ><\/a><\/p>\n<p>Detta g\u00f6r det enkelt att veta var de finns och ger ett konsekvent s\u00e4tt att inkludera dem i alla plugins som du byggt. Det finns trots allt n\u00e5got att s\u00e4ga f\u00f6r att vara konsekvent i de konventioner som vi anv\u00e4nder.<\/p>\n<h3>Inklusive mallarna<\/h3>\n<p>F\u00f6rutsatt att du har <strong>single-acme.php-<\/strong> mall och <strong>archive-acme.php-<\/strong> mall, \u00e4r det l\u00e4tt att inkludera det. Och \u00e4ven om jag \u00e4r mer ett fan av att anv\u00e4nda objektorienterad programmering, kommer jag att visa f\u00f6r att inkludera dessa mallar med hj\u00e4lp av procedurkod.<\/p>\n<p>Det \u00e4r l\u00e4tt att konvertera den h\u00e4r koden till objektorienterad kod om du vill. Dessutom kommer jag att anta att du inkluderar detta f\u00f6r anpassade inl\u00e4ggstyper ocks\u00e5.<\/p>\n<p>Du kan alltid utel\u00e4mna ett villkor f\u00f6r en anpassad inl\u00e4ggstyp om du helt enkelt vill inkludera dessa mallar, men enligt min erfarenhet tycker jag att det \u00e4r s\u00e4llsynt att dessa situationer inte anv\u00e4nder anpassade inl\u00e4ggstyper men jag k\u00e4nner inte till din situation.<\/p>\n<p>Som sagt, h\u00e4r \u00e4r koden.<\/p>\n<h4>Definiera krokar<\/h4>\n<p>F\u00f6rst m\u00e5ste vi definiera krokarna. Detta \u00e4r relativt enkelt eftersom vi kommer att anv\u00e4nda krokarna som beskrivs ovan.<\/p>\n<p>F\u00f6rst, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-02-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">den enda mallen<\/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>Och sedan <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-03-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">arkivmallen<\/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>Och nu kan vi implementera koden f\u00f6r var och en av funktionerna.<\/p>\n<h4>L\u00e4gga till koden<\/h4>\n<p>S\u00e5 f\u00f6rst ska vi titta p\u00e5 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-00-acme-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">den enda mallen<\/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>Och nu <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-01-acme-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">arkivmallen<\/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>Om du har \u00e4gnat stor uppm\u00e4rksamhet \u00e5t koden vet du att det \u00e4r v\u00e4ldigt lite som \u00e4r annorlunda. Faktum \u00e4r att den allm\u00e4nna processen kan beskrivas enligt f\u00f6ljande:<\/p>\n<ol>\n<li>definiera kroken,<\/li>\n<li>hitta mallen,<\/li>\n<li>kontrollera den anpassade posttypen,<\/li>\n<li>mallen finns, anv\u00e4nd den<\/li>\n<li>Annars anv\u00e4nder du standardmallen<\/li>\n<\/ol>\n<p>Och detta \u00e4r processen f\u00f6r b\u00e5de enstaka mallar och arkivmallar.<\/p>\n<h3>Skriva kompatibla mallar<\/h3>\n<p>Och slutligen, och detta \u00e4r s\u00e4rskilt viktigt om du vill g\u00f6ra mallen s\u00e5 agnostisk som m\u00f6jligt, jag f\u00f6rs\u00f6ker anv\u00e4nda s\u00e5 m\u00e5nga inbyggda WordPress-malltaggar som m\u00f6jligt n\u00e4r jag visar inneh\u00e5llet relaterat till pluginet. Detta g\u00f6r att temautvecklare enkelt kan styla det s\u00e5 att det passar deras tema.<\/p>\n<p>Nej, du kommer inte att kunna tillgodose alla teman men s\u00e5dan \u00e4r naturen hos WordPress-teman. Po\u00e4ngen \u00e4r att ta s\u00e5 mycket arbete som m\u00f6jligt med att h\u00e4mta och rendera data fr\u00e5n mallen s\u00e5 att front-end-utvecklare enkelt kan hantera det.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det finns en vanlig upps\u00e4ttning steg vi kan anv\u00e4nda n\u00e4r vi inkluderar anpassade mallar i v\u00e5ra WordPress-plugins.<\/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":[838,848,901,807,724,868],"tags":[1173],"class_list":["post-230935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-handledningar","category-koda","category-php-9","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230935"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230935\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/236054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}