{"id":233653,"date":"2023-02-19T15:40:00","date_gmt":"2023-02-19T12:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233653"},"modified":"2022-11-11T03:16:28","modified_gmt":"2022-11-11T00:16:28","slug":"opas-muokkaa-wordpressin-globaalia-kyselyae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/opas-muokkaa-wordpressin-globaalia-kyselyae\/","title":{"rendered":"Opas: Muokkaa WordPressin globaalia kysely\u00e4"},"content":{"rendered":"\n<p>Joissakin tapauksissa saatat joutua muokkaamaan yleist\u00e4 viestikysely\u00e4, jota WordPress suorittaa mill\u00e4 tahansa vierailemallasi sivulla \u2013 sek\u00e4 j\u00e4rjestelm\u00e4nvalvojana ett\u00e4 k\u00e4ytt\u00f6liittym\u00e4ss\u00e4. T\u00e4ss\u00e4 oppaassa tarkastelemme, mit\u00e4 koukkua kannattaa k\u00e4ytt\u00e4\u00e4 ja kuinka muuttaa kyselyn argumentteja mieleiseksesi.<\/p>\n<h2>Mit\u00e4 koukkua k\u00e4ytt\u00e4\u00e4<\/h2>\n<p>Ensin sinun on tiedett\u00e4v\u00e4, mihin koukkuun haluat lis\u00e4t\u00e4 koodisi. Tarvitsemme koukun, joka tapahtuu heti sen j\u00e4lkeen, kun WordPress on asettanut kaikki argumentit, mutta ennen kuin varsinainen kysely suoritetaan. T\u00e4t\u00e4 varten k\u00e4yt\u00e4mme toimintoa <code>pre_get_posts<\/code>.<\/p>\n<p>T\u00e4ss\u00e4 koukussa saat yhden parametrin; joka on <code>WP_Query<\/code>objekti, jonka kanssa WordPress suorittaa kyselyn my\u00f6hemmin. Teet muutoksia objektiin \u2013 mutta sinun ei tarvitse palauttaa sit\u00e4, koska WordPress suorittaa kyselyn muokatun objektin kanssa.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    \/\/ Add your code here\n});<\/code><\/pre>\n<p>Kyselyn muokkaaminen vaatii todenn\u00e4k\u00f6isesti joitain ehdollisia tunnisteita m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n tapaukset, joita haluat muuttaa. Voit esimerkiksi kohdistaa kyselyyn vain hakutuloksissa tai luokkan\u00e4kymiss\u00e4.<\/p>\n<h2>Ehdolliset tunnisteet<\/h2>\n<p>WordPressiss\u00e4 on joukko <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ehdollisia tageja<\/a>, joiden avulla voit m\u00e4\u00e4ritt\u00e4\u00e4, miss\u00e4 tapauksissa haluat lis\u00e4t\u00e4 koodisi. Ehdollinen tagi on yksinkertaisesti funktio, joka palauttaa tosi tai ep\u00e4tosi sen mukaan, miss\u00e4 tilassa WordPress on. Esimerkkej\u00e4 yleisist\u00e4 ehdollisista tunnisteista on <code>is_admin()<\/code>tarkoitus tarkistaa, olemmeko t\u00e4ll\u00e4 hetkell\u00e4 j\u00e4rjestelm\u00e4nvalvojassa vai k\u00e4ytt\u00f6liittym\u00e4ss\u00e4, <code>is_singular()<\/code>olemmeko yhdell\u00e4 viestill\u00e4 tai sivulla k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 ja <code>is_search()<\/code>jos olemme hakutulossivulla.<\/p>\n<p>Muista, ett\u00e4 koukkua <code>pre_get_posts<\/code>k\u00e4ytet\u00e4\u00e4n sek\u00e4 j\u00e4rjestelm\u00e4nvalvojalle ett\u00e4 k\u00e4ytt\u00f6liittym\u00e4lle. Jos haluat vaikuttaa vain yleiseen kyselyyn k\u00e4ytt\u00f6liittym\u00e4ss\u00e4, sinun on k\u00e4\u00e4ritt\u00e4v\u00e4 koodisi ehdollisen tagin if-tarkistuksen sis\u00e4\u00e4n <code>is_admin()<\/code>.<\/p>\n<h3>Huomautus ehdollisista tunnisteista<code>pre_get_posts<\/code><\/h3>\n<p>Ehdolliset tunnisteet ovat loistavia ja kaikki, mutta joitain asioita on pidett\u00e4v\u00e4 mieless\u00e4, kun k\u00e4yt\u00e4t n\u00e4it\u00e4 sis\u00e4ll\u00e4 <code>pre_get_posts<\/code>.<\/p>\n<p>Ensin sinun on tutustuttava tagiin <code>is_main_query()<\/code>. Toiminto <code>pre_get_posts<\/code>suoritetaan itse asiassa useita kertoja jokaisella sivulatauksella. Esimerkiksi <code>pre_get_posts<\/code>suoritetaan luotaessa kutakin valikkoa (mukaan lukien widgetien valikot). Jotta voit muokata varsinaista globaalia kysely\u00e4, esim. luokka-arkiston viestej\u00e4 tai hakutuloksia, sinun on kohdistettava &quot;p\u00e4\u00e4kyselyyn&quot; k\u00e4ytt\u00e4m\u00e4ll\u00e4 <code>is_main_query()<\/code>.<\/p>\n<p>Toiseksi, sinun on oltava tietoinen tapauksista, joissa sinun on tarkistettava ehdolliset tunnisteet tarjotulle objektille sen sijaan, ett\u00e4 kutsuisit funktiota &quot;itsen\u00e4isesti&quot;. Yleens\u00e4 kun k\u00e4yt\u00e4t ehdollisia tunnisteita, kirjoitat sen seuraavasti:<\/p>\n<pre><code>if (is_main_query()) {\n    \/\/ Do stuff\n}<\/code><\/pre>\n<p>Kuitenkin k\u00e4ytett\u00e4ess\u00e4 <code>pre_get_posts<\/code>, objektiin on lis\u00e4tt\u00e4v\u00e4 joitain ehdollisia tunnisteita. Esimerkiksi:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if ($query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<p>Tarkista aina <code>is_main_query()<\/code>kohdassa annettu esine <code>pre_get_posts<\/code>. Lue lis\u00e4\u00e4 <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pre_get_posts-dokumentaatiosta<\/a>.<\/p>\n<p>T\u00e4m\u00e4 on esimerkki tarkistamisesta, jos emme ole j\u00e4rjestelm\u00e4nvalvojassa ja olemmeko p\u00e4\u00e4viestikyselyss\u00e4:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<h2>Argumenttien muuttaminen tai lis\u00e4\u00e4minen<\/h2>\n<p>Koska ty\u00f6skentelemme <code>WP_Query<\/code>objektin kanssa, voit katsoa <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Queryn dokumentaatiosta<\/a>, kuinka voit rakentaa argumentteja viestikyselyn mukauttamiseksi. Muista, ett\u00e4 argumentit on jo t\u00e4ytetty. Siin\u00e4 tapauksessa sinun on liitett\u00e4v\u00e4 tai muutettava olemassa olevia arvoja. Tai poista ne, jotka haluat poistaa.<\/p>\n<p>K\u00e4yt\u00e4t <code>set()<\/code>funktiota <code>WP_Query<\/code>objektiin argumenttien asettamiseen. Menetelm\u00e4 hyv\u00e4ksyy kaksi argumenttia, argumenttiavaimen ja toiseksi arvon. Esimerkiksi <code>posts_per_page<\/code>argumentin asettaminen tapahtuisi n\u00e4in:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        $query-&gt;set('posts_per_page', 20);\n    }\n});<\/code><\/pre>\n<p>Tapauksissa, joissa haluat liitt\u00e4\u00e4 tai muuttaa olemassa olevan argumentin, teet t\u00e4m\u00e4n yleens\u00e4 tallentamalla ensin olemassa olevan argumentin muuttujaan. Voit k\u00e4ytt\u00e4\u00e4 menetelm\u00e4\u00e4 <code>get()<\/code>t\u00e4h\u00e4n. Sitten muokkaat muuttujaa lis\u00e4\u00e4m\u00e4ll\u00e4 tai yhdist\u00e4m\u00e4ll\u00e4 taulukoita tai mit\u00e4 tahansa. Ja lopuksi k\u00e4yt\u00e4t <code>set()<\/code>korvaamaan muokatun muuttujan takaisin kyselyobjektiin. Suosittelen k\u00e4ytt\u00e4m\u00e4\u00e4n <code>var_dump()<\/code>objektia n\u00e4hd\u00e4ksesi, mit\u00e4 se sis\u00e4lt\u00e4\u00e4, ja t\u00e4m\u00e4 on my\u00f6s mukava tapa tarkistaa, ovatko ehdolliset tagit oikein.<\/p>\n<p>T\u00e4ss\u00e4 on nopea esimerkki k\u00e4yt\u00f6st\u00e4 <code>get()<\/code>(tarkistaa vain, onko se tyhj\u00e4), ja jos on, lis\u00e4\u00e4 omat argumenttisi <code>set()<\/code>.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        if (!$query-&gt;get('meta_query')) {\n            $query-&gt;set('meta_query', [\/ your arguments here \/]);\n        }\n    }\n});<\/code><\/pre>\n<h3>Huomautus verokyselyst\u00e4<\/h3>\n<p>WordPressiss\u00e4 on erilliset alaluokat taksonomian (<code>WP_Tax_Query<\/code>) -osan k\u00e4sittelemiseksi sis\u00e4ll\u00e4 <code>WP_Query<\/code>. Jos sinun on teht\u00e4v\u00e4 monimutkaisempia taksonomiakyselyn muutoksia, <code>pre_get_posts<\/code>toiminto saattaa olla liian aikaista. Jotkut arvot voivat olla tyhji\u00e4, koska ne t\u00e4ytet\u00e4\u00e4n my\u00f6hemmin. T\u00e4ss\u00e4 tapauksessa saatat olla parempi k\u00e4ytt\u00e4\u00e4 <code>parse_tax_query<\/code>toimintoa <code>pre_get_posts<\/code>. Lue <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/parse_tax_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4m\u00e4n koukun dokumentaatio<\/a> n\u00e4hd\u00e4ksesi, sopiiko t\u00e4m\u00e4 sinulle.<\/p>\n<h2>Johtop\u00e4\u00e4t\u00f6s<\/h2>\n<p>Lis\u00e4\u00e4m\u00e4si tai muuttamasi argumentit riippuvat t\u00e4ysin siit\u00e4, mit\u00e4 haluat tehd\u00e4, mutta sinulla pit\u00e4isi nyt olla jonkinlainen k\u00e4sitys strategioista, joiden avulla p\u00e4\u00e4set k\u00e4siksi maailmanlaajuiseen kyselyyn. Jos haluat saada jonkinlaista k\u00e4sityst\u00e4 <code>WP_Query<\/code>objektista ja sen argumenttien k\u00e4yt\u00f6st\u00e4, postaukseni <a href=\"http:\/\/awhitepixel.com\/blog\/how-to-query-posts-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">viestien kyselyst\u00e4<\/a> saattaa olla kiinnostava.<\/p>\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\u00e4ss\u00e4 postauksessa opimme muokkaamaan globaalia WordPress-kysely\u00e4, mit\u00e4 koukkua k\u00e4ytt\u00e4\u00e4 ja miten muokata argumentteja mieleisekseen.<\/p>\n","protected":false},"author":1,"featured_media":152576,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[895,895,917,917,1110,834,843,834,843,864,864],"tags":[1166],"class_list":{"0":"post-233653","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koodi","9":"category-muut","11":"category-n-a","12":"category-opas-aloittelijoille","13":"category-opetusohjelmia","16":"category-wordpress-5","18":"tag-affiai-fi"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233653","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=233653"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233653\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/152576"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}