{"id":233966,"date":"2023-02-25T10:48:00","date_gmt":"2023-02-25T07:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233966"},"modified":"2022-11-11T13:27:55","modified_gmt":"2022-11-11T10:27:55","slug":"wordpress-teeman-opetusohjelma-aloittelijoille-osa-10-lisaeae-malleja","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-teeman-opetusohjelma-aloittelijoille-osa-10-lisaeae-malleja\/","title":{"rendered":"WordPress-teeman opetusohjelma aloittelijoille \u2013 Osa 10: Lis\u00e4\u00e4 malleja"},"content":{"rendered":"\n<p>T\u00e4ll\u00e4 WordPress-teeman opetusohjelman aloittelijoille oppitunnilla sukeltaamme enemm\u00e4n malleihin. Opimme mallin osista ja toteutamme ne uudelleenk\u00e4ytett\u00e4vyytt\u00e4 varten. Ja lis\u00e4\u00e4mme teemaamme lis\u00e4\u00e4 WordPressin oletusmalleja.<\/p>\n<p>Mutta ennen kuin alamme lis\u00e4t\u00e4 mallitiedostoja, meid\u00e4n on tiedett\u00e4v\u00e4, miksi meid\u00e4n pit\u00e4isi vaivautua <strong>mallin osien<\/strong> kanssa .<\/p>\n<h2>Mallin osat: Joustavampia rakennuspalikoita<\/h2>\n<p>Mallin osat toimivat t\u00e4sm\u00e4lleen kuten <code>get_header()<\/code>ja <code>get_footer()<\/code>joista <a href=\"http:\/\/awhitepixel.com\/blog\/wordpress-theme-tutorial-for-beginners-part-2-building-blocks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">opimme osassa 2<\/a>, mutta eiv\u00e4t rajoitu n\u00e4ihin tiedostoihin. Voit k\u00e4ytt\u00e4\u00e4 malliosia mille tahansa tiedostolle!<\/p>\n<p>Teemat k\u00e4ytt\u00e4v\u00e4t yleens\u00e4 malliosaa silmukassa oleville viesteille. Yleens\u00e4 monet mallit, kuten kategoria, arkisto ja hakutulokset, n\u00e4ytt\u00e4v\u00e4t yleens\u00e4 jokaisen viestin silmukassa samalla tavalla. Siksi on eritt\u00e4in hyv\u00e4 idea erottaa post-silmukan tulos yhdeksi tiedostoksi. N\u00e4in sinun ei tarvitse toistaa sit\u00e4 jokaisessa mallissa.<\/p>\n<p>&quot;Muunnetaan&quot; osa olemassa olevasta koodistamme malliosiksi ennen kuin alamme tehd\u00e4 lis\u00e4\u00e4 malleja!<\/p>\n<h2>Postisilmukan malliosan luominen<\/h2>\n<p>Luo uusi tyhj\u00e4 tiedosto teemakansioomme; kutsutaan <code>content-loop.php<\/code>. Voit nimet\u00e4 mallin osia miten haluat. Mutta et voi nimet\u00e4 niit\u00e4 samalla tavalla kuin mit\u00e4\u00e4n <a href=\"https:\/\/codex.wordpress.org\/File:Template_Hierarchy.png#file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressin m\u00e4\u00e4ritt\u00e4mi\u00e4 malleja<\/a>. Etsi artikkelistamme kaikki, mit\u00e4 <code>index.php<\/code>sinulla on silmukan sis\u00e4ll\u00e4, leikkaa se irti ja liit\u00e4 se sis\u00e4\u00e4n <code>content-loop.php<\/code>.<\/p>\n<p>K\u00e4yt\u00e4 nyt tyhj\u00e4n silmukan sis\u00e4ll\u00e4 <code>index.php<\/code>funktiokutsua <code>get_template_part()<\/code>ja m\u00e4\u00e4rit\u00e4 malliosatiedostosi parametriksi (ilman tunnistetta <code>.php<\/code>). T\u00e4lt\u00e4 sen pit\u00e4isi n\u00e4ytt\u00e4\u00e4 molemmissa tiedostoissa:<\/p>\n<pre><code>...\n    while (have_posts()): the_post(); \n        get_template_part('content-loop');\n    endwhile;\n    the_posts_pagination();\n...<\/code><\/pre>\n<pre><code>&lt;article &lt;?php post_class(); ?&gt;&gt;\n    &lt;h2&gt;&lt;a href=\"&lt;?php the_permalink(); ?&gt;\" title=\"&lt;?php the_title(); ?&gt;\"&gt;&lt;?php the_title(); ?&gt;&lt;\/a&gt;&lt;\/h2&gt;\n    &lt;?php if (has_post_thumbnail()) {\n        the_post_thumbnail();\n    } ?&gt;\n    &lt;?php the_excerpt(); ?&gt;\n    &lt;?php the_category(); ?&gt;\n&lt;\/article&gt;<\/code><\/pre>\n<p>Jos p\u00e4ivit\u00e4t etusivusi, sinun ei pit\u00e4isi n\u00e4hd\u00e4 mit\u00e4\u00e4n eroa.<\/p>\n<p>Loistava! Nyt kun mallimme <code>index.php<\/code>on mukava ja puhdas, voimme k\u00e4ytt\u00e4\u00e4 sit\u00e4 pohjana kopioidaksemme uusia malleja. Alla k\u00e4yn l\u00e4pi luokkamallin ja hakutulosmallin lis\u00e4\u00e4misen, mutta kehotan sinua luomaan lis\u00e4\u00e4 malleja, jotta voit paremmin hallita teemasi suunnittelua.<\/p>\n<h2>Luokkamallin lis\u00e4\u00e4minen<\/h2>\n<p>Jos palaat <a href=\"https:\/\/codex.wordpress.org\/File:Template_Hierarchy.png#file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressin mallihierarkiaan<\/a>, voit n\u00e4hd\u00e4, ett\u00e4 WordPress etsii viestiluokista mallia nimelt\u00e4 <code>category.php<\/code>. Luomme sen ensin.<\/p>\n<p>Tee teemakansiossasi kopio <code>index.php<\/code>tiedostosta ja nime\u00e4 kopio uudelleen <code>category.php<\/code>.<\/p>\n<p>Ja.. siin\u00e4 se. Olet periaatteessa valmis\u2026!<\/p>\n<p>Lis\u00e4\u00e4mme kuitenkin yhden yksityiskohdan; haluamme n\u00e4ytt\u00e4\u00e4 otsikon, joka kertoo, ett\u00e4 olemme luokkasivulla X-kategorian viestien luokkasivulla. WordPressiss\u00e4 on t\u00e4t\u00e4 varten toiminto, jota voit k\u00e4ytt\u00e4\u00e4 kaikissa arkistomalleissa (luokka, tagit, p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4-arkistot), <code>the_archive_title<\/code>. Lis\u00e4t\u00e4\u00e4n se ennen silmukkaa <code>&lt;h1&gt;<\/code>tagin sis\u00e4\u00e4n.<\/p>\n<pre><code>&lt;?php get_header(); ?&gt;\n&lt;h1&gt;&lt;?php the_archive_title(); ?&gt;&lt;\/h1&gt;\n&lt;?php\nif (have_posts()) {\n...<\/code><\/pre>\n<p>Jos tarkastelet viestiluokkasivua, sinun pit\u00e4isi n\u00e4hd\u00e4 jotain t\u00e4m\u00e4n kaltaista, ja arkiston otsikko on &quot;Category:&quot;. PS: Jos haluat muuttaa arkiston otsikon tulostetta (esimerkiksi &quot;Category:&quot; ei n\u00e4y), voit lis\u00e4t\u00e4 suodattimen kohtaan <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/get_the_archive_title\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_the_archive_title<\/a>. Dokumentaatiosivulla on loistava esimerkki siit\u00e4, miten se tehd\u00e4\u00e4n.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151635-61e4cd7239f1b.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-151635-61e4cd7239f1b.png\" alt=\"WordPress-teeman opetusohjelma aloittelijoille \u2013 Osa 10: Lis\u00e4\u00e4 malleja\" ><\/a><\/p>\n<p>No se oli helppoa! K\u00e4sitell\u00e4\u00e4n seuraavaksi hakutulosmallia.<\/p>\n<h2>Hakutulosmallin lis\u00e4\u00e4minen<\/h2>\n<p>Menettely on t\u00e4sm\u00e4lleen sama kuin teimme luokkamalleille. Tee t\u00e4ll\u00e4 kertaa kopio <code>category.php<\/code>ja nime\u00e4 kopio uudelleen muotoon <code>search.php<\/code>.<\/p>\n<p>Meid\u00e4n tarvitsee vain korjata otsikko. Arkiston otsikkotoiminto, jota k\u00e4ytimme kategoriamallissa, ei valitettavasti toimi kovin hyvin hakutulosmallissa. Itse asiassa WordPressiss\u00e4 ei ole yksinkertaista toimintoa, joka tuottaa meille otsikon.<\/p>\n<p>Mutta voimme helposti tehd\u00e4 sellaisen itse, ja samalla n\u00e4yt\u00e4n, kuinka dynaaminen muuttuja voidaan tulostaa ja silti pit\u00e4\u00e4 teksti k\u00e4\u00e4nnett\u00e4v\u00e4n\u00e4.<\/p>\n<p>PHP:ss\u00e4 on kaksi hy\u00f6dyllist\u00e4 toimintoa <code>printf()<\/code>ja <code>sprintf()<\/code>. He tekev\u00e4t samoin, paitsi ett\u00e4 <code>printf<\/code>se tulostaa sen (kuten kaiku) ja <code>sprintf<\/code>palauttaa sen, jotta voimme tallentaa sen muuttujaan. Kun teksti on asetettu ensimm\u00e4isiksi parametreiksi, voimme lis\u00e4t\u00e4 argumenteiksi dynaamisia muuttujia, jotka sitten lis\u00e4t\u00e4\u00e4n tekstiin. Niiden sis\u00e4ll\u00e4 voimme k\u00e4ytt\u00e4\u00e4 k\u00e4\u00e4nnett\u00e4v\u00e4n tekstin funktioita <code>__()<\/code>ja <code>_e()<\/code>. Suosittelen, ett\u00e4 luet hieman <a href=\"https:\/\/www.php.net\/manual\/en\/function.printf.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">printf<\/a> :n tai <a href=\"https:\/\/www.php.net\/manual\/en\/function.sprintf.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprintf<\/a> :n toiminnasta, koska en mene t\u00e4ss\u00e4 enemp\u00e4\u00e4 yksityiskohtiin.<\/p>\n<p>WordPress tarjoaa yksinkertaisen toiminnon haetun merkkijonon saamiseksi; <code>get_search_query()<\/code>. T\u00e4m\u00e4n j\u00e4lkeen korvataan arkiston otsikkotoiminto t\u00e4ll\u00e4;<\/p>\n<pre><code>&lt;h1&gt;&lt;?php printf(__('Search: %s', 'wptutorial'), get_search_query()); ?&gt;&lt;\/h1&gt;<\/code><\/pre>\n<p>Yll\u00e4 oleva koodi tekee sis\u00e4lt\u00e4 ulosp\u00e4in; m\u00e4\u00e4ritell\u00e4\u00e4n k\u00e4\u00e4nnett\u00e4v\u00e4 teksti &quot;Haku: %s&quot;, joka laitetaan a:n sis\u00e4\u00e4n, <code>printf<\/code>joka toistaa merkkijonoa ja korvaa merkkijonovakion (<code>%s<\/code>) toisella argumentilla; joka on <code>get_search_query()<\/code>.<\/p>\n<p>T\u00e4m\u00e4n seurauksena saamme seuraavanlaisen otsikon haettaessa &quot;er&quot;:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151635-61e4cd7331b74.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-151635-61e4cd7331b74.png\" alt=\"WordPress-teeman opetusohjelma aloittelijoille \u2013 Osa 10: Lis\u00e4\u00e4 malleja\" ><\/a><\/p>\n<p>Kiva! Toinen malli tehty. Mit\u00e4 tulee t\u00e4m\u00e4n oppitunnin viimeiseen osaan, siirrymme yksitt\u00e4isviestimalliimme ja lis\u00e4\u00e4mme jotain hyvin yleist\u00e4 WordPressiss\u00e4; kommenttimalli.<\/p>\n<h2>Kommenttimallin lis\u00e4\u00e4minen yhteen viestiin<\/h2>\n<p>Viestiartikkelissamme <code>single.php<\/code>haluamme n\u00e4ytt\u00e4\u00e4 kommentteja. Kommenttien tulee tuottaa luettelo aiemmista kommenteista ja lomake uuden kommentin lis\u00e4\u00e4mist\u00e4 varten.<\/p>\n<p>Kommenttimalli on mallitiedosto, jonka voit lis\u00e4t\u00e4 teemaasi, mutta WordPressill\u00e4 on itse asiassa oma oletuskommenttimallitulosteensa. Jos sinulla ei ole <code>comments.php<\/code>teemaa, kommenttimallin pyyt\u00e4minen palauttaa WordPressin oletustulosteen sille. N\u00e4in teemme t\u00e4ss\u00e4 opetusohjelmassa.<\/p>\n<p>Haluamme kutsua kommenttimallia vain, jos viestiss\u00e4 on aktivoituja kommentteja (se on kunkin viestin asetus ja yleinen sivustoasetus). Joten lis\u00e4\u00e4mme if-tarkistuksen tarkistaaksemme, ovatko kommentit sallittuja, <code>comments_open()<\/code>ja jos se palauttaa tosi, pyyd\u00e4mme kommenttimallia <code>comments_template()<\/code>. Muista, ett\u00e4 kaiken t\u00e4m\u00e4n on tapahduttava silmukan sis\u00e4ll\u00e4. Lis\u00e4sin sen lopun j\u00e4lkeen <code>&lt;\/article&gt;<\/code>, juuri ennen silmukan sulkemista.<\/p>\n<pre><code>...\n        &lt;p&gt;&lt;?php _e('Author', 'wptutorial'); ?&gt;: &lt;?php the_author(); ?&gt;&lt;\/p&gt;\n    &lt;\/article&gt;\n    &lt;?php \n    if (comments_open()) {\n        comments_template();\n    }\n    endwhile;\n} else {\n    ?&gt;&lt;p&gt;&lt;?php _e('No posts, sorry.', 'wptutorial'); ?&gt;&lt;\/p&gt;&lt;?php\n...<\/code><\/pre>\n<p>Jos vierailet yksitt\u00e4isess\u00e4 viestiss\u00e4, joka on sallinut kommentit (lis\u00e4sin kommentin vain n\u00e4ytt\u00e4\u00e4kseni sinulle my\u00f6s kommenttiluettelon); saat t\u00e4m\u00e4n kauniin (ahem) oletuskommenttimallin:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151635-61e4cd7412986.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-151635-61e4cd7412986.png\" alt=\"WordPress-teeman opetusohjelma aloittelijoille \u2013 Osa 10: Lis\u00e4\u00e4 malleja\" ><\/a><\/p>\n<p>Nyt voit (ja sit\u00e4 usein suositellaan) luoda omasi <code>comments.php<\/code>teemaasi, joka ohittaa WordPressin oletustulosteen. En kuitenkaan luo t\u00e4ss\u00e4 opetusohjelmassa kommenttimallia, koska WordPressin oletustulostus toimii hienosti, kunhan muotoilet sen oikein. Jos tarkastelet HTML-koodia, k\u00e4ytett\u00e4viss\u00e4 on runsaasti k\u00e4\u00e4reit\u00e4 ja luokkia.<\/p>\n<h2>Dokumentaatio k\u00e4ytetyist\u00e4 menetelmist\u00e4<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_template_part\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_template_part<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/the_archive_title\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">the_archive_title<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_search_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_search_query<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/comments_open\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kommentit_avoin<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/comments_template\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comments_template<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ll\u00e4 oppitunnilla opimme mallin osista ja luomme lis\u00e4\u00e4 malleja WordPress-teemaan. Lis\u00e4\u00e4mme my\u00f6s kommenttimallin yhden postauksen n\u00e4kym\u00e4\u00e4n.<\/p>\n","protected":false},"author":1,"featured_media":223663,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[927,895,719,719,895,917,917,1110,834,843,834,927,843,864,864],"tags":[1166],"class_list":["post-233966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aiheita","category-koodi","category-kehittaejae","category-muut","category-n-a","category-opas-aloittelijoille","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233966","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=233966"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233966\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223663"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}