{"id":231274,"date":"2022-12-16T10:53:00","date_gmt":"2022-12-16T07:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231274"},"modified":"2022-12-07T11:40:14","modified_gmt":"2022-12-07T08:40:14","slug":"wordpress-sivutus-yksinkertainen-apuohjelma-ja-miksi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-sivutus-yksinkertainen-apuohjelma-ja-miksi\/","title":{"rendered":"WordPress-sivutus: yksinkertainen apuohjelma (ja miksi)"},"content":{"rendered":"\n<p>Kun rakennat malleja WordPressille, sinulla on yleens\u00e4 sivutustoimintoja, jotka tulevat itse sovelluksesta.<\/p>\n<p>N\u00e4ihin kuuluvat mm.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_next_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_next_post()<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_next_post_link\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_next_post_link()<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_previous_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_previous_post()<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_previous_post_link\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_previous_post_link()<\/a><\/li>\n<\/ul>\n<p>Ja on muutamia muita viestej\u00e4, jotka antavat sinulle paremman tarkkuuden taksonomioiden suhteen, kuten <strong><a href=\"https:\/\/tommcfarlin.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_adjacent_post()<\/a><\/strong>.<\/p>\n<p>Suosittelen lukemaan kaikki yll\u00e4 olevat linkit, koska ne ovat hy\u00f6dyllisi\u00e4, jos rakennat teemaa, ty\u00f6skentelet mukautettujen viestityyppien kanssa tai haluat vain ymm\u00e4rt\u00e4\u00e4 joitakin yleisi\u00e4 mallitunnisteita.<\/p>\n<p>Jos kuitenkin etsit helppoa tapaa kirjoittaa WordPress-sivutusapuohjelma (jonka selit\u00e4n perustelut hetkeksi), t\u00e4m\u00e4n viestin loppuosa kattaa juuri sen.<\/p>\n<h2>Mukautettu WordPress-sivutus<\/h2>\n<p>Ensinn\u00e4kin aina, kun rakennat verkkosovellusta jollekin, on varmasti vivahteita, joissa alkuper\u00e4iset WordPress-toiminnot eiv\u00e4t v\u00e4ltt\u00e4m\u00e4tt\u00e4 toimi. Ehk\u00e4 se ei toimi odotetulla tavalla, se ei toimi tarkoitetulla tavalla tai se ei palvele tarpeitasi.<\/p>\n<p>Joka tapauksessa, se ei tarkoita, ettei sivutusta voida rakentaa palvelemaan tavoitteitasi. Loppujen lopuksi sivuttamisen ydin \u2013 varsinkin kun se liittyy yhden postin sivuttamiseen \u2013 on pohjimmiltaan t\u00e4m\u00e4:<\/p>\n<p>Katso nykyisest\u00e4 viestist\u00e4, onko viesti olemassa ennen sit\u00e4 ja onko viesti olemassa sen j\u00e4lkeen. Jos jompikumpi viestityyppi on olemassa, anna linkki siihen; muuten \u00e4l\u00e4.<\/p>\n<p>T\u00e4st\u00e4 voimme p\u00e4\u00e4tell\u00e4, ett\u00e4 tarvitsemme seuraavat ominaisuudet:<\/p>\n<ol>\n<li>tapa m\u00e4\u00e4ritt\u00e4\u00e4, onko nykyisen viestin takana viesti,<\/li>\n<li>tapa m\u00e4\u00e4ritt\u00e4\u00e4, onko viesti olemassa nykyisen viestin j\u00e4lkeen,<\/li>\n<li>tapa hakea tietty viesti,<\/li>\n<li>tapa saada pysyv\u00e4 linkki kyseiseen viestiin.<\/li>\n<\/ol>\n<p>Pyrin kuitenkin olemaan eritt\u00e4in tarkka yll\u00e4 olevan kielen suhteen, koska tietyn postauksen &quot;takana&quot; tai &quot;j\u00e4lkeen&quot; olevalla viestill\u00e4 ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 ole tunnusta, joka on yksi v\u00e4hemm\u00e4n kuin nykyisen viestin tunnus.<\/p>\n<p>Se on yksinkertaisesti ensimm\u00e4inen julkaistu viesti, jonka voi hakea kumpaankin suuntaan, eik\u00f6 niin?<\/p>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 tarvitsemme kaksi kysely\u00e4:<\/p>\n<ul>\n<li>kysely nykyisen viestin takana olevan viestin hakemiseksi,<\/li>\n<li>kysely, jolla haetaan viesti nykyisen viestin j\u00e4lkeen.<\/li>\n<\/ul>\n<p>T\u00e4ss\u00e4 esimerkiss\u00e4 oletan, ett\u00e4 sinulla on p\u00e4\u00e4sy nykyisen viestin tunnukseen <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_the_id\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_the_ID()<\/a><\/strong> &#8211; funktion kautta.<\/p>\n<h3>Hanki postaus nykyisen viestin taakse<\/h3>\n<p>T\u00e4t\u00e4 varten meid\u00e4n on luotava yksinkertainen kysely, joka nappaa yhden julkaistun viestin m\u00e4\u00e4ritetyn viestityypin tietokannasta ja joka liittyy nykyisen viestin sijaintiin.<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-00-previous-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Voimme tehd\u00e4 t\u00e4m\u00e4n<\/a><\/strong> rajoittamalla tulosjoukon yhteen, j\u00e4rjest\u00e4m\u00e4ll\u00e4 tulokset laskevassa j\u00e4rjestyksess\u00e4 ja vertaamalla viestitunnuksen arvoa:<\/p>\n<pre><code>&lt;?php\n\nglobal $wpdb;\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT *\n        FROM $wpdb-&gt;posts\n        WHERE ID &lt; (SELECT ID\n            FROM $wpdb-&gt;posts\n            WHERE ID = %d\n            AND post_type = '%s'\n            AND post_status = '%s'\n            ORDER BY ID DESC) AND post_type = '%s'\n        AND post_status = '%s'\n        ORDER BY ID DESC\n        LIMIT 1\n        \",\n        get_the_ID(),\n        'acme-custom-post-type',\n        'publish',\n        'acme-custom-post-type',\n        'publish') );<\/code><\/pre>\n<p>T\u00e4m\u00e4 palauttaa joukon tuloksia, joita voimme hallita hetkess\u00e4.<\/p>\n<h3>Hanki viesti nykyisen viestin j\u00e4lkeen<\/h3>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-01-next-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Seuraavaa viesti\u00e4<\/a><\/strong> varten kirjoitamme samanlaisen kyselyn. Mutta sen sijaan etsimme seuraavaa arvoa, joka on suurempi ja joka on nykyisen tunnuksen edell\u00e4:<\/p>\n<pre><code>&lt;?php\n\nglobal $wpdb;\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT *\n        FROM $wpdb-&gt;posts\n        WHERE ID &gt; (SELECT ID\n            FROM $wpdb-&gt;posts\n            WHERE ID = %d\n            AND post_type = '%s'\n            AND post_status = '%s'\n            ORDER BY ID ASC) AND post_type = '%s'\n        AND post_status = '%s'\n        ORDER BY ID ASC\n        LIMIT 1\n        \",\n        get_the_ID(),\n        'acme-custom-post-type',\n        'publish',\n        'acme-custom-post-type',\n        'publish') );<\/code><\/pre>\n<p>Tarvitsemme nyt muutamia toimintoja m\u00e4\u00e4ritt\u00e4\u00e4ksemme, onko viestej\u00e4 olemassa. Voimme tehd\u00e4 t\u00e4m\u00e4n palautetulla tulostaulukolla.<\/p>\n<h3>Tarkista, onko viesti\u00e4 olemassa<\/h3>\n<p>Huomaa, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-03-has-previous-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ett\u00e4 seuraavassa esimerkiss\u00e4<\/a><\/strong> funktio hyv\u00e4ksyy tulosjoukon ja yksinkertaisesti palauttaa, jos on edellinen viesti. T\u00e4h\u00e4n funktioon v\u00e4litett\u00e4vien tulosten tulee olla edellisest\u00e4 yll\u00e4 olevasta viestikyselyst\u00e4.<\/p>\n<p>Toiseksi, huomaa, ett\u00e4 se on yksityinen. Haluat ehk\u00e4 tehd\u00e4 omasi julkiseksi riippuen siit\u00e4, miten haluat rakentaa mallisi.<\/p>\n<pre><code>&lt;?php \n\/**\n * @param array $results the results of the query to determined if there are past posts\n *\n * @return bool true if there is a previous post; otherwise, false\n *\/\nprivate function hasPreviousPost($results)\n{\n    return isset($results[0]);\n}<\/code><\/pre>\n<p>Ja sitten <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-04-has-next-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavassa viestiss\u00e4<\/a><\/strong> se n\u00e4ytt\u00e4\u00e4 samalta, mutta muista, ett\u00e4 t\u00e4h\u00e4n toimintoon v\u00e4litetyt tulokset ovat eri kyselyst\u00e4.<\/p>\n<pre><code>&lt;?php\n\/**\n * @param array $results the results of the query to determined if there are future posts\n *\n * @return bool true if there is a next post; otherwise, false\n *\/\nprivate function hasNextPost($results)\n{\n    return isset($results[0]);\n}<\/code><\/pre>\n<p>Ja lopuksi, voimme k\u00e4ytt\u00e4\u00e4 n\u00e4it\u00e4 ehdollisia toimintoja pysyv\u00e4n linkin saamiseksi.<\/p>\n<h3>Hanki linkki<\/h3>\n<p>Muista, ett\u00e4 tapa, jolla k\u00e4yt\u00e4t t\u00e4t\u00e4 toimintoa, voi poiketa tarjoamastani toteutuksesta. Joten jos et tarvitse sit\u00e4 yksityiseksi, muuta sen n\u00e4kyvyytt\u00e4 ja k\u00e4yt\u00e4 sit\u00e4 mallissasi <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-05-get-post-link-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tarpeen<\/a><\/strong> mukaan .<\/p>\n<pre><code>&lt;?php\n\/**\n * @param array $results the results of the array from which to retrieve the post ID\n *\n * @return string the ID of the post to which we're going to link\n *\/\nprivate function getPostLink($results)\n{\n    return get_the_permalink($results[0]-&gt;ID);\n}<\/code><\/pre>\n<p>Huomaa lopuksi, ett\u00e4 t\u00e4m\u00e4 funktio hyv\u00e4ksyy tulokset, jotka annat sille kummasta tahansa kyselyst\u00e4, ja noutaa ID-ominaisuuden tulosten ensimm\u00e4isest\u00e4 hakemistosta.<\/p>\n<p>T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 tulokset rajoittuvat yhteen ja se perustuu ehdollisten funktioiden k\u00e4ytt\u00f6\u00f6n. Eli voit tehd\u00e4 jotain kuten:<\/p>\n<ul>\n<li>jos on seuraava postaus niin hanki seuraavan postauksen linkki<\/li>\n<\/ul>\n<p>Mutta toteutuksesi voi vaihdella.<\/p>\n<h2>Miksi t\u00e4t\u00e4 tarvitaan?<\/h2>\n<p>Sit\u00e4 ei ehk\u00e4 tarvita. Siin\u00e4 on koko juttu: Jos k\u00e4yt\u00e4t WordPressi\u00e4 heti valmiina ja hyvin v\u00e4h\u00e4n mukautettuja tai laajennuksia, etk\u00e4 tarvitse tehd\u00e4 muuta kuin mit\u00e4 se voi tarjota, et ehk\u00e4 tarvitse t\u00e4t\u00e4.<\/p>\n<p>Jos toisaalta etsit tapaa esitell\u00e4 WordPressin sivutustoiminto yhdess\u00e4 viestiss\u00e4, t\u00e4m\u00e4 on tapa tehd\u00e4 se, joka pystyy k\u00e4sittelem\u00e4\u00e4n oikein viestit, jotka ovat tietyntyyppisi\u00e4, mutta eiv\u00e4t t ovat per\u00e4kk\u00e4isi\u00e4 tunnuksia (ja jotka toimivat vain julkaisun tilan kanssa).<\/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>Verkkosovellusta luotaessa on varmasti vivahteita, joissa alkuper\u00e4iset toiminnot eiv\u00e4t v\u00e4ltt\u00e4m\u00e4tt\u00e4 toimi. Saatat tarvita mukautettua WordPress-sivutusta.<\/p>\n","protected":false},"author":1,"featured_media":236123,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,803,864],"tags":[1166],"class_list":["post-231274","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231274","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=231274"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231274\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236123"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}