{"id":231531,"date":"2022-12-23T11:44:00","date_gmt":"2022-12-23T08:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231531"},"modified":"2022-12-07T10:47:55","modified_gmt":"2022-12-07T07:47:55","slug":"mukautettujen-mallien-sisaellyttaeminen-wordpress-laajennuksiin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/mukautettujen-mallien-sisaellyttaeminen-wordpress-laajennuksiin\/","title":{"rendered":"Mukautettujen mallien sis\u00e4llytt\u00e4minen WordPress-laajennuksiin"},"content":{"rendered":"\n<p>Mielest\u00e4ni yksi aliarvostetuimmista n\u00e4k\u00f6kohdista \u2013 tai ehk\u00e4 yksi harvoin k\u00e4sitellyist\u00e4 mukautettujen laajennusten kehitt\u00e4misen n\u00e4k\u00f6kohdista \u2013 on kyky sis\u00e4llytt\u00e4\u00e4 mukautettuja malleja WordPress-laajennuksiin.<\/p>\n<p>Ja ollakseni rehellinen, ymm\u00e4rr\u00e4n sen: olen aika vankka sen suhteen, mink\u00e4 laajennuksen pit\u00e4isi olla ja mik\u00e4 teema.<\/p>\n<p>Tuo on:<\/p>\n<ul>\n<li>teemat ovat esittely\u00e4 varten,<\/li>\n<li>laajennukset ovat toimintoja.<\/li>\n<\/ul>\n<p>Jos sis\u00e4llyt\u00e4n malleja laajennukseen, enk\u00f6 tee samaa kuin silloin, kun kehitt\u00e4j\u00e4t sis\u00e4llytt\u00e4v\u00e4t toimintoja teemoihinsa?<\/p>\n<p>Kuten monen muunkin kehitysty\u00f6n kohdalla, mielest\u00e4ni se riippuu. Tarkoitan, ett\u00e4 en ole fani, jos lis\u00e4\u00e4t paljon toimintoja, jotka lukitsevat sinut teemaan. Vastaavasti, jos sinulla on laajennus, joka on tarkoitettu esittelem\u00e4\u00e4n tietoja k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 ja joka on teemaagnostikko, se on j\u00e4rkev\u00e4\u00e4.<\/p>\n<p>Joten sinun on oltava harkittuja p\u00e4\u00e4t\u00f6ksiss\u00e4si.<\/p>\n<p>Siit\u00e4 huolimatta voimme k\u00e4ytt\u00e4\u00e4 yleisi\u00e4 vaiheita sis\u00e4llytt\u00e4ess\u00e4mme mukautettuja malleja WordPress-laajennuksiin.<\/p>\n<p>Ja sen t\u00e4m\u00e4 postaus tulee n\u00e4ytt\u00e4m\u00e4\u00e4n.<\/p>\n<p>Jos aiot sis\u00e4llytt\u00e4\u00e4 laajennukseen mukautettuja malleja, oletan, ett\u00e4 k\u00e4yt\u00e4t sek\u00e4 yksitt\u00e4isi\u00e4 ett\u00e4 arkistomalleja. Jos ei, k\u00e4yt\u00e4 vain alla olevia koukkuja ja koodia, joita tarvitset.<\/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=\"Mukautettujen mallien sis\u00e4llytt\u00e4minen WordPress-laajennuksiin\" ><\/a><\/p>\n<p>Molemmille, mutta tied\u00e4 n\u00e4m\u00e4:<\/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\">yksi_malli<\/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\">archive_template<\/a><\/li>\n<\/ul>\n<p>N\u00e4iden koukkujen avulla voit kertoa WordPressille, miss\u00e4 mukautetut mallit ovat laajennuksessasi.<\/p>\n<h3>Mallien j\u00e4rjest\u00e4minen<\/h3>\n<p>Minulla on yleens\u00e4\u00a0 laajennuksessani <strong>mallihakemisto<\/strong>, joka sijaitsee samalla tasolla kuin <strong>omaisuus-, src-<\/strong> ja <strong>toimittajahakemistot<\/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=\"Mukautettujen mallien sis\u00e4llytt\u00e4minen WordPress-laajennuksiin\" ><\/a><\/p>\n<p>T\u00e4m\u00e4n ansiosta on helppo tiet\u00e4\u00e4, miss\u00e4 ne sijaitsevat, ja tarjoaa johdonmukaisen tavan sis\u00e4llytt\u00e4\u00e4 ne kaikkiin rakentamiisi laajennuksiin. Loppujen lopuksi k\u00e4ytt\u00e4miemme k\u00e4yt\u00e4nt\u00f6jen johdonmukaisuudesta on sanottavaa.<\/p>\n<h3>Mallit mukaan lukien<\/h3>\n<p>Olettaen, ett\u00e4 sinulla on <strong>single-acme.php-<\/strong> ja <strong>archive-acme.php-<\/strong> malli, se on helppo sis\u00e4llytt\u00e4\u00e4. Ja vaikka olen enemm\u00e4n olio-ohjelmoinnin fani, n\u00e4yt\u00e4n, ett\u00e4 sis\u00e4llyt\u00e4n n\u00e4m\u00e4 mallit prosessikoodin avulla.<\/p>\n<p>T\u00e4m\u00e4 koodi on helppo muuntaa oliopohjaiseksi koodiksi, jos haluat. Lis\u00e4ksi oletan, ett\u00e4 sis\u00e4llyt\u00e4t t\u00e4m\u00e4n my\u00f6s mukautetuille viestityypeille.<\/p>\n<p>Voit aina j\u00e4tt\u00e4\u00e4 pois ehdollisen muokatun viestityypin, jos haluat yksinkertaisesti sis\u00e4llytt\u00e4\u00e4 n\u00e4m\u00e4 mallit, mutta kokemukseni mukaan on harvinaista, ett\u00e4 n\u00e4iss\u00e4 tilanteissa ei k\u00e4ytet\u00e4 mukautettuja viestityyppej\u00e4, mutta en tied\u00e4 tilannettasi.<\/p>\n<p>Se sanoi, t\u00e4ss\u00e4 on koodi.<\/p>\n<h4>Koukkujen m\u00e4\u00e4rittely<\/h4>\n<p>Ensinn\u00e4kin meid\u00e4n on m\u00e4\u00e4ritett\u00e4v\u00e4 koukut. T\u00e4m\u00e4 on suhteellisen yksinkertaista, koska aiomme k\u00e4ytt\u00e4\u00e4 yll\u00e4 kuvattuja koukkuja.<\/p>\n<p>Ensinn\u00e4kin <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-02-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">yksi malli<\/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>Ja sitten <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-03-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">arkistomalli<\/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>Ja nyt voimme toteuttaa koodin jokaiselle toiminnolle.<\/p>\n<h4>Koodin lis\u00e4\u00e4minen<\/h4>\n<p>Joten ensin tarkastellaan <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-00-acme-single-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">yksitt\u00e4ist\u00e4 mallia<\/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>Ja nyt <a href=\"https:\/\/gist.github.com\/tommcfarlin\/5d555468c2c5b3448e5bb0ed6f666f6f#file-01-acme-archive-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">arkistomalli<\/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>Jos olet kiinnitt\u00e4nyt huomiota koodiin, tied\u00e4t, ett\u00e4 siin\u00e4 on hyvin v\u00e4h\u00e4n eroja. Itse asiassa yleinen prosessi voidaan hahmotella seuraavasti:<\/p>\n<ol>\n<li>m\u00e4\u00e4rittele koukku,<\/li>\n<li>etsi malli,<\/li>\n<li>tarkista mukautettu viestityyppi,<\/li>\n<li>malli on olemassa, k\u00e4yt\u00e4 sit\u00e4<\/li>\n<li>muussa tapauksessa k\u00e4yt\u00e4 oletusmallia<\/li>\n<\/ol>\n<p>T\u00e4m\u00e4 on prosessi sek\u00e4 yksitt\u00e4isille ett\u00e4 arkistomalleille.<\/p>\n<h3>Yhteensopivien mallien kirjoittaminen<\/h3>\n<p>Ja lopuksi, ja t\u00e4m\u00e4 on t\u00e4rke\u00e4\u00e4 varsinkin, jos haluat tehd\u00e4 mallista mahdollisimman agnostisen, yrit\u00e4n k\u00e4ytt\u00e4\u00e4 mahdollisimman monia sis\u00e4\u00e4nrakennettuja WordPress-mallitunnisteita, kun n\u00e4yt\u00e4n laajennukseen liittyv\u00e4\u00e4 sis\u00e4lt\u00f6\u00e4. T\u00e4m\u00e4n ansiosta teeman kehitt\u00e4j\u00e4t voivat helposti muokata sit\u00e4 teemaansa sopivaksi.<\/p>\n<p>Ei, et voi majoittaa jokaista teemaa, mutta sellainen on WordPress-teemojen luonne. Tarkoituksena on tehd\u00e4 mahdollisimman paljon ty\u00f6t\u00e4 tietojen hakemiseen ja hahmontamiseen mallista, jotta k\u00e4ytt\u00f6liittym\u00e4kehitt\u00e4j\u00e4t voivat helposti hallita sit\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voimme k\u00e4ytt\u00e4\u00e4 yleisi\u00e4 vaiheita sis\u00e4llytt\u00e4ess\u00e4mme mukautettuja malleja WordPress-laajennuksiin.<\/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":[719,895,834,843,803,864],"tags":[1166],"class_list":["post-231531","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opas-aloittelijoille","category-opetusohjelmia","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231531"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}