{"id":231997,"date":"2023-01-04T12:31:00","date_gmt":"2023-01-04T09:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231997"},"modified":"2022-11-10T07:10:04","modified_gmt":"2022-11-10T04:10:04","slug":"toiminnoista-ja-pakollisista-lisaeosista","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/toiminnoista-ja-pakollisista-lisaeosista\/","title":{"rendered":"Toiminnoista ja pakollisista lis\u00e4osista"},"content":{"rendered":"\n<p>Olen ty\u00f6skennellyt pienen projektin parissa, enemm\u00e4n web-sovelluksen kuin sivuston parissa, joka vaatii sek\u00e4 r\u00e4\u00e4t\u00e4l\u00f6idyn teeman ett\u00e4 tiiviisti kytketyn, mutta hyvin spesifisen toiminnallisuuden kehitt\u00e4mist\u00e4.<\/p>\n<p>T\u00e4m\u00e4 on hyvin suppeasti fokusoitu projekti (josta tulen todenn\u00e4k\u00f6isesti puhumaan jossain vaiheessa tulevaisuudessa), mutta sen parissa ty\u00f6skennelless\u00e4ni se pakotti minut palaamaan hieman takaisin WordPress-kehityksen teemakehitykseen.<\/p>\n<p>Ei, en tee mit\u00e4\u00e4n suunnittelua \u2013 onneksi \u2013 mutta minun on ty\u00f6stett\u00e4v\u00e4 teeman mukautuksia toiminnallisesta n\u00e4k\u00f6kulmasta. T\u00e4t\u00e4 tehdess\u00e4ni se on kuitenkin saanut minut tarkastelemaan uudelleen vaadittuja <code>functions.php<\/code>ja joitain n\u00e4k\u00f6kohtia, joita minulla ei ole koskaan ennen ollut.<\/p>\n<p>Lis\u00e4ksi se on saanut minut tarkastelemaan syvemmin niiden k\u00e4ytt\u00f6\u00e4 <code>mu-plugins<\/code>ja kysym\u00e4\u00e4n, milloin ne ovat tarpeellisia ja miksi en ole k\u00e4ytt\u00e4nyt niit\u00e4 enemm\u00e4n aiemmin (tai jopa milloin niit\u00e4 todella tarvittaisiin).<\/p>\n<p>Joten aion vahata sit\u00e4 hieman runollisesti.<\/p>\n<pre><code>TL;DR<\/code><\/pre>\n<p>Kun tein teemakehityst\u00e4, <code>functions.php<\/code>k\u00e4ytettiin kahteen asiaan (joka on sin\u00e4ns\u00e4 ongelmallinen), mutta silti:<\/p>\n<ol>\n<li>ottaa k\u00e4ytt\u00f6\u00f6n tai poistaa k\u00e4yt\u00f6st\u00e4 teemojen ominaisuuksia,<\/li>\n<li>Teemakohtaisen toiminnallisuuden m\u00e4\u00e4rittelemiseksi.<\/li>\n<\/ol>\n<p>Teemankehitt\u00e4j\u00e4n <a href=\"https:\/\/developer.wordpress.org\/themes\/basics\/theme-functions\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">k\u00e4sikirjassa<\/a> lukee:<\/p>\n<blockquote>\n<p>Tiedostossa <code>functions.php<\/code>voit lis\u00e4t\u00e4 ainutlaatuisia ominaisuuksia WordPress-teemaasi. Sit\u00e4 voidaan k\u00e4ytt\u00e4\u00e4 yhdist\u00e4m\u00e4\u00e4n WordPressin ydintoimintoihin, jotta teemastasi tulee modulaarisempi, laajennettavissa oleva ja toimivampi.<\/p>\n<p>Teemafunktiot, Teemankehitt\u00e4j\u00e4n k\u00e4sikirja<\/p>\n<\/blockquote>\n<p>Ja ymm\u00e4rr\u00e4n sen, mutta minun n\u00e4k\u00f6kulmastani ja WordPressin kehittyess\u00e4 mielest\u00e4ni sen <code>functions.php<\/code>pit\u00e4isi olla omistettu teemakohtaisille toiminnallisille asioille, jotka liittyv\u00e4t suoraan ytimeen, kuten:<\/p>\n<ul>\n<li>mukautustoiminto,<\/li>\n<li>valikkotoiminto,<\/li>\n<li>k\u00e4sikirjoituksen ja tyylin rekister\u00f6inti,<\/li>\n<li>ja niin edelleen.<\/li>\n<\/ul>\n<p>Mutta jos jonkin koukun aikana on suoritettava jotain ja se on enemm\u00e4n toimialuekohtaista logiikkaa, se ei <strong>kuulu<\/strong> kyseiseen tiedostoon.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158759-61e6e52f7b3b5.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-158759-61e6e52f7b3b5.png\" alt=\"Toiminnoista ja pakollisista lis\u00e4osista\" ><\/a><\/p>\n<p>T\u00e4m\u00e4 her\u00e4tt\u00e4\u00e4 kuitenkin kysymyksen: Miss\u00e4 toimialuekohtaiset toiminnot sijaitsevat?<\/p>\n<h3>Anna pakolliset lis\u00e4osat<\/h3>\n<p>Tied\u00e4n, ett\u00e4 <code>inc<\/code>hakemistojen kaltaisten asioiden n\u00e4keminen on yleistym\u00e4ss\u00e4, mutta en ole niist\u00e4 huolissani, kun puhun teemakehityksest\u00e4, varsinkin kun teeman kehitt\u00e4minen ei ole minun painopisteeni ja kyseinen hakemistorakenne ei ole minun tyylini.<\/p>\n<p>Joka tapauksessa, kun on kyse pitk\u00e4lle erikoistuneista ratkaisuista (joissa ratkaisu on yhdistelm\u00e4 esityst\u00e4 ja tiukasti kohdistettua toiminnallisuutta), alan miettim\u00e4\u00e4n <code>mu-plugins<\/code>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158759-61e6e536dbfe7.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-158759-61e6e536dbfe7.png\" alt=\"Toiminnoista ja pakollisista lis\u00e4osista\" ><\/a><\/p>\n<p>Ja syy, miksi en ajattele tavallista WordPress-laajennusta, on se, ett\u00e4 ne on yleens\u00e4 suunniteltu toimimaan mink\u00e4 tahansa teeman kanssa ja lis\u00e4\u00e4m\u00e4\u00e4n toimintoja. Ei niin kanssa <code>mu-plugins<\/code>.<\/p>\n<blockquote>\n<p>Must-use plugins (alias mu-plugins) ovat laajennuksia, jotka on asennettu erityiseen hakemistoon sis\u00e4lt\u00f6kansion sis\u00e4ll\u00e4 ja jotka otetaan automaattisesti k\u00e4ytt\u00f6\u00f6n kaikilla asennuksen sivustoilla.<\/p>\n<p><a href=\"https:\/\/wordpress.org\/support\/article\/must-use-plugins\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Must-Use Plugins<\/a>, WordPress.org<\/p>\n<\/blockquote>\n<p>Joten t\u00e4ss\u00e4 on ajatusprosessini:<\/p>\n<ol>\n<li>Teemat ovat esittely\u00e4 varten<\/li>\n<li>Pluginit ovat toiminnallisuutta varten.<\/li>\n<li>Laajennukset on suunniteltu k\u00e4ytett\u00e4viksi teemasta riippumatta ja koko sivuston leveydell\u00e4.<\/li>\n<li>Must-Use Plugins ovat laajennuksia, jotka ovat k\u00e4yt\u00f6ss\u00e4 ja oletuksena k\u00e4yt\u00f6ss\u00e4<\/li>\n<li>Siksi erikoisratkaisun toimialuekohtaisen logiikan tulisi sijaita pakollisessa laajennuksessa.<\/li>\n<\/ol>\n<p>Toki voidaan todeta, ett\u00e4 jotkin teemat saattavat vaatia pakollisia toimintoja, mutta eik\u00f6 se silti sovi ajatukseen, ett\u00e4 toiminnallisuuden pit\u00e4isi sijaita pakollisessa laajennuksessa?<\/p>\n<p>Siit\u00e4 huolimatta l\u00e4hestymistapa, jota olen noudattanut, on t\u00e4m\u00e4:<\/p>\n<ol>\n<li>Toiminto, joka yhdist\u00e4\u00e4 teemaominaisuudet nimenomaan WordPressin ytimeen, menee <code>functions.php<\/code>.<\/li>\n<li>Toimialuelogiikasta, mutta koko ratkaisun toimimista edellytt\u00e4v\u00e4 toiminnallisuus sijaitsee <code>mu-plugin<\/code>.<\/li>\n<\/ol>\n<p>T\u00e4ss\u00e4 vaiheessa <a href=\"https:\/\/tommcfarlin.com\/from-self-employment-to-employment-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">urani<\/a> en tee paljoa ty\u00f6t\u00e4, joka keskittyisi mihink\u00e4\u00e4n muuhun kuin taustaj\u00e4rjestelm\u00e4\u00e4n, mutta niiss\u00e4 harvoissa tilaisuuksissa, joissa minun on laajentaa tekem\u00e4\u00e4ni ty\u00f6t\u00e4, huomaan, ett\u00e4 yrit\u00e4n edelleen olla analyyttisen\u00e4 ja harkitsevana tapaa, jolla rakennan projektia.<\/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>Toiminnot ja Must-Use Plugins ovat molemmat huomionarvoisia asioita varsinkin kun rakennetaan eritt\u00e4in erikoistuneita ratkaisuja.<\/p>\n","protected":false},"author":1,"featured_media":158760,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,917,843,803,864],"tags":[1166],"class_list":["post-231997","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-muut","category-opetusohjelmia","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231997","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=231997"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231997\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/158760"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231997"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231997"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}