{"id":230893,"date":"2022-12-23T11:45:00","date_gmt":"2022-12-23T08:45:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230893"},"modified":"2022-12-07T10:47:58","modified_gmt":"2022-12-07T07:47:58","slug":"dolaczanie-niestandardowych-szablonow-do-naszych-wtyczek-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/dolaczanie-niestandardowych-szablonow-do-naszych-wtyczek-wordpress\/","title":{"rendered":"Do\u0142\u0105czanie niestandardowych szablon\u00f3w do naszych wtyczek WordPress"},"content":{"rendered":"\n<p>My\u015bl\u0119, \u017ce jednym z bardziej niedocenianych aspekt\u00f3w \u2013 a mo\u017ce jednym z rzadko omawianych aspekt\u00f3w tworzenia niestandardowych wtyczek \u2013 jest mo\u017cliwo\u015b\u0107 do\u0142\u0105czania niestandardowych szablon\u00f3w do naszych wtyczek WordPress.<\/p>\n<p>I, szczerze m\u00f3wi\u0105c, rozumiem: jestem do\u015b\u0107 zagorza\u0142ym zwolennikiem wtyczki i motywu.<\/p>\n<p>To znaczy:<\/p>\n<ul>\n<li>tematy s\u0105 do prezentacji,<\/li>\n<li>wtyczki to funkcjonalno\u015b\u0107.<\/li>\n<\/ul>\n<p>Je\u015bli do\u0142\u0105czam szablony do wtyczki, czy nie robi\u0119 tego samego, co wtedy, gdy programi\u015bci do\u0142\u0105czaj\u0105 funkcjonalno\u015b\u0107 do swoich motyw\u00f3w?<\/p>\n<p>Podobnie jak w przypadku wielu rzeczy w fazie rozwoju, my\u015bl\u0119, \u017ce to zale\u017cy. Mam na my\u015bli, \u017ce dodanie wielu funkcji, kt\u00f3re blokuj\u0105 motyw, jest czym\u015b, czego nie jestem fanem. Podobnie, je\u015bli masz wtyczk\u0119, kt\u00f3ra ma prezentowa\u0107 dane na interfejsie u\u017cytkownika i jest agnostyczna dla motywu, ma to sens.<\/p>\n<p>Musisz wi\u0119c by\u0107 rozs\u0105dny w swoich decyzjach.<\/p>\n<p>Niezale\u017cnie od tego istnieje wsp\u00f3lny zestaw krok\u00f3w, kt\u00f3rych mo\u017cemy u\u017cy\u0107, gdy do\u0142\u0105czamy niestandardowe szablony do naszych wtyczek WordPress.<\/p>\n<p>I to w\u0142a\u015bnie poka\u017ce ten post.<\/p>\n<p>Je\u015bli zamierzasz do\u0142\u0105czy\u0107 niestandardowe szablony do wtyczki, zak\u0142adam, \u017ce u\u017cywasz zar\u00f3wno szablon\u00f3w pojedynczych, jak i archiwalnych. Je\u015bli nie, u\u017cyj tylko tych haczyk\u00f3w i kodu, kt\u00f3rych potrzebujesz.<\/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=\"Do\u0142\u0105czanie niestandardowych szablon\u00f3w do naszych wtyczek WordPress\" ><\/a><\/p>\n<p>Dla obu jednak wiedz, \u017ce:<\/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\">pojedynczy_szablon<\/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\">archiwum_szablon<\/a><\/li>\n<\/ul>\n<p>Korzystaj\u0105c z tych haczyk\u00f3w, mo\u017cesz powiedzie\u0107 WordPressowi, gdzie znajduj\u0105 si\u0119 niestandardowe szablony w Twojej wtyczce.<\/p>\n<h3>Porz\u0105dkowanie szablon\u00f3w<\/h3>\n<p>Dla mnie zwykle mam\u00a0 katalog <strong>szablon\u00f3w<\/strong> w mojej wtyczce, kt\u00f3ry zawiera witryny na tym samym poziomie, co\u00a0 katalogi <strong>asset, src<\/strong> i <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=\"Do\u0142\u0105czanie niestandardowych szablon\u00f3w do naszych wtyczek WordPress\" ><\/a><\/p>\n<p>U\u0142atwia to zorientowanie si\u0119, gdzie si\u0119 znajduj\u0105 i zapewnia sp\u00f3jny spos\u00f3b w\u0142\u0105czania ich do wszystkich utworzonych wtyczek. W ko\u0144cu jest co\u015b do powiedzenia za bycie konsekwentnym w stosowanych przez nas konwencjach.<\/p>\n<h3>W tym szablony<\/h3>\n<p>Zak\u0142adaj\u0105c, \u017ce masz\u00a0 szablon <strong>single-acme.php<\/strong> i szablon <strong>archive-acme.php<\/strong>, \u0142atwo go do\u0142\u0105czy\u0107. I chocia\u017c jestem bardziej fanem programowania obiektowego, poka\u017c\u0119, jak do\u0142\u0105czy\u0107 te szablony za pomoc\u0105 kodu proceduralnego.<\/p>\n<p>Je\u015bli chcesz, mo\u017cesz \u0142atwo przekonwertowa\u0107 ten kod na kod obiektowy. Co wi\u0119cej, zak\u0142adam, \u017ce uwzgl\u0119dniasz to r\u00f3wnie\u017c dla niestandardowych typ\u00f3w post\u00f3w.<\/p>\n<p>Zawsze mo\u017cesz pomin\u0105\u0107 warunek warunkowy dla niestandardowego typu postu, je\u015bli chcesz po prostu do\u0142\u0105czy\u0107 te szablony, ale z mojego do\u015bwiadczenia wynika, \u017ce \u200b\u200brzadko zdarza si\u0119, aby te sytuacje nie u\u017cywa\u0142y niestandardowych typ\u00f3w post\u00f3w, ale nie znam Twojej sytuacji.<\/p>\n<p>To powiedziawszy, oto kod.<\/p>\n<h4>Definiowanie hak\u00f3w<\/h4>\n<p>Najpierw musimy zdefiniowa\u0107 haki. Jest to stosunkowo proste, poniewa\u017c b\u0119dziemy u\u017cywa\u0107 hak\u00f3w opisanych powy\u017cej.<\/p>\n<p>Po pierwsze, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-02-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pojedynczy szablon<\/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>A potem <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-03-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">szablon archiwum<\/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>A teraz mo\u017cemy zaimplementowa\u0107 kod dla ka\u017cdej z funkcji.<\/p>\n<h4>Dodawanie kodu<\/h4>\n<p>Tak wi\u0119c najpierw przyjrzymy <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-00-acme-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">si\u0119 pojedynczemu szablonowi<\/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>A teraz <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-01-acme-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">szablon archiwum<\/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>Je\u015bli zwraca\u0142e\u015b szczeg\u00f3ln\u0105 uwag\u0119 na kod, wiesz, \u017ce niewiele si\u0119 r\u00f3\u017cni. W rzeczywisto\u015bci og\u00f3lny proces mo\u017cna scharakteryzowa\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<ol>\n<li>zdefiniuj hak,<\/li>\n<li>zlokalizuj szablon,<\/li>\n<li>sprawd\u017a niestandardowy typ postu,<\/li>\n<li>szablon istnieje, u\u017cyj go<\/li>\n<li>w przeciwnym razie u\u017cyj domy\u015blnego szablonu<\/li>\n<\/ol>\n<p>I to jest proces zar\u00f3wno dla szablon\u00f3w pojedynczych, jak i archiwalnych.<\/p>\n<h3>Pisanie kompatybilnych szablon\u00f3w<\/h3>\n<p>I na koniec, co jest wa\u017cne, zw\u0142aszcza je\u015bli chcesz, aby szablon by\u0142 jak najbardziej agnostyczny, staram si\u0119 u\u017cywa\u0107 jak najwi\u0119cej wbudowanych tag\u00f3w szablon\u00f3w WordPress podczas wy\u015bwietlania tre\u015bci zwi\u0105zanych z wtyczk\u0105. Pozwala to programistom motyw\u00f3w na \u0142atwe dopasowanie ich do motywu.<\/p>\n<p>Nie, nie b\u0119dziesz w stanie pomie\u015bci\u0107 ka\u017cdego motywu, ale taka jest natura motyw\u00f3w WordPress. Chodzi o to, aby zaj\u0105\u0107 jak najwi\u0119cej pracy zwi\u0105zanej z pobieraniem i renderowaniem danych z szablonu, aby programi\u015bci front-end mogli \u0142atwo nimi zarz\u0105dza\u0107.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Istnieje wsp\u00f3lny zestaw krok\u00f3w, kt\u00f3rych mo\u017cemy u\u017cy\u0107 podczas do\u0142\u0105czania niestandardowych szablon\u00f3w do naszych wtyczek 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":[721,897,805,836,845,866],"tags":[1169],"class_list":["post-230893","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230893"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230893\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}