{"id":231867,"date":"2023-01-01T16:50:00","date_gmt":"2023-01-01T13:50:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231867"},"modified":"2022-11-10T05:30:51","modified_gmt":"2022-11-10T02:30:51","slug":"hae-viestien-metatiedoista-wordpressin-hallinta-alueelta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/hae-viestien-metatiedoista-wordpressin-hallinta-alueelta\/","title":{"rendered":"Hae viestien metatiedoista WordPressin hallinta-alueelta"},"content":{"rendered":"\n<p>Kun olet ty\u00f6skennellyt WordPressin kanssa pidemm\u00e4n aikaa, on todenn\u00e4k\u00f6ist\u00e4, ett\u00e4 olet jossain m\u00e4\u00e4rin ty\u00f6skennellyt julkaisujen metatietojen kanssa. Ehk\u00e4 olet vain lukenut metatietoja tietokannasta tai ehk\u00e4 olet sek\u00e4 kirjoittanut tietokantataulukkoon ett\u00e4 lukenut siit\u00e4.<\/p>\n<p>Se voi olla todella tehokas sovellusliittym\u00e4 aina, kun sinun on liitett\u00e4v\u00e4 tiettyj\u00e4 tietoja viesteihisi (tai, jos haluat abstraktoida asioita viel\u00e4 enemm\u00e4n, malleihisi).<\/p>\n<p>Mit\u00e4 tapahtuu, kun haluat sis\u00e4llytt\u00e4\u00e4 tietoja metatietotaulukosta, mutta sinulla ei ole lis\u00e4osien, kuten <a href=\"https:\/\/searchwp.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">SearchWP<\/a> :n tai <a href=\"https:\/\/www.relevanssi.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Relevanssin<\/a>, mukavuutta ?<\/p>\n<p>Lis\u00e4ksi oletetaan, ett\u00e4 k\u00e4ytt\u00f6tapaus on tarkoitettu vain j\u00e4rjestelm\u00e4nvalvojille ja vain WordPressin hallinta-alueelle. Toisin sanoen haluat etsi\u00e4 viestej\u00e4si <strong>Kaikki viestit<\/strong> -n\u00e4yt\u00f6st\u00e4, mutta haluat my\u00f6s sis\u00e4llytt\u00e4\u00e4 viestien metatiedot hakuehtoihin.<\/p>\n<p>Mit\u00e4 sitten?<\/p>\n<h2>Hae viestin metatiedoista<\/h2>\n<p>Aina kun etsit viestej\u00e4 WordPressin hallinta-alueella, se etsii julkaisun otsikosta, otteen ja postauksen sis\u00e4ll\u00f6st\u00e4 lauseen ja palauttaa sitten kyseiset tulokset.<\/p>\n<p>Laajentaaksemme haun sis\u00e4lt\u00e4m\u00e4\u00e4n my\u00f6s julkaisujen metatiedot, meid\u00e4n on p\u00e4ivitett\u00e4v\u00e4 suoritettu kysely siten, ett\u00e4 se sis\u00e4lt\u00e4\u00e4 julkaisun metatietotaulukot. Mutta siin\u00e4 on muutakin. Erityisesti joustavuuden ja parhaan k\u00e4ytt\u00f6kokemuksen saavuttamiseksi sinun kannattaa:<\/p>\n<ul>\n<li>sis\u00e4llytt\u00e4\u00e4 lauseen osia, jotta se ei vain etsi jotain sanatarkasti artikkelista,<\/li>\n<li>ja tietysti k\u00e4sitell\u00e4 oikein tapausta, jos hakutermi\u00e4 ei anneta, jotta <strong>Kaikki viestit<\/strong> -n\u00e4ytt\u00f6 voidaan edelleen tarkastella sen vakiomuodossa.<\/li>\n<\/ul>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 meid\u00e4n ei tarvitse vain muokata hakukysely\u00e4 sis\u00e4lt\u00e4m\u00e4\u00e4n meta-avainta ja meta-arvoa, vaan meid\u00e4n on v\u00e4ltett\u00e4v\u00e4 kokonaisia \u200b\u200blauseita oikein, jotta voimme k\u00e4ytt\u00e4\u00e4 <code>LIKE<\/code>toimintoa <code>IN<\/code>operaation tai <code>=<\/code>operaation sijaan.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159257-61e6f01916b5c.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-159257-61e6f01916b5c.png\" alt=\"Hae viestien metatiedoista WordPressin hallinta-alueelta\" ><\/a><\/p>\n<p>Jotkut asiat, jotka on t\u00e4rke\u00e4\u00e4 tiet\u00e4\u00e4 ennen t\u00e4m\u00e4n artikkelin loppuosan lukemista, ovat:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Kysely<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/posts_where\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Posts_where<\/a> koukku _<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pre_get_posts<\/a> -koukku _<\/li>\n<li>S\u00e4\u00e4nn\u00f6lliset lausekkeet, joissa on <a href=\"https:\/\/www.php.net\/manual\/en\/function.preg-replace.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_replace<\/a><\/li>\n<li>WordPressin aputoiminnot, nimitt\u00e4in <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/esc_sql\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esc_sql<\/a>.<\/li>\n<\/ul>\n<p>Viime k\u00e4dess\u00e4 meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 kahta koukkua kahdella mukautetulla toiminnolla. Ja koska en voi antaa t\u00e4ydellist\u00e4 esimerkki\u00e4 siit\u00e4, milt\u00e4 t\u00e4m\u00e4 saattaa n\u00e4ytt\u00e4\u00e4 k\u00e4ytt\u00f6tapauksessasi, koodin on oltava hieman yleistetty.<\/p>\n<h3>Hakuihin tarttuminen<\/h3>\n<p>Seuraavassa sis\u00e4ll\u00f6ss\u00e4 n\u00e4et kolme asiaa:<\/p>\n<ol>\n<li>Vahvista, ett\u00e4 k\u00e4ytt\u00e4j\u00e4 on hallinta-alueella ja h\u00e4n on muokkaussivulla.<\/li>\n<li>K\u00e4ytt\u00e4j\u00e4 on tehnyt haun.<\/li>\n<li>Hakulauseke on muunnettu taulukoksi, pakotettu ja lis\u00e4tty WP_Query-esiintym\u00e4n metakyselyominaisuuteen.<\/li>\n<\/ol>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f2fa607bf002f52a7a8d1e08f75d86a#file-00-pre-get-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Katso alla<\/a> :<\/p>\n<pre><code>&lt;?php\nadd_filter('pre_get_posts', function ($query) {\n\n    \/\/ Make sure we're in the admin, an administrator, and on the edit page.\n    if (!is_admin() || !current_user_can('manage_options') || 'edit' !== get_current_screen()-&gt;base) {\n        return;\n    }\n\n    \/\/ Determine if the user is running a search.\n    $search = filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING);\n    if (empty($search)) {\n        return;\n    }\n\n    $query-&gt;set(\n        'meta_query',\n        [\n            [\n                'key'     =&gt; 'headline_notes',\n                'value'   =&gt; esc_sql(preg_replace('\/s+?\/', '%', $search)), \/\/ For flexible search, make sure to replace all white space with % for LIKE.\n                'compare' =&gt; 'LIKE',\n            ],\n        ]\n    );\n});<\/code><\/pre>\n<p>Olettaen, ett\u00e4 kaikki yll\u00e4 olevat pit\u00e4v\u00e4t paikkansa, t\u00e4m\u00e4 p\u00e4ivitt\u00e4\u00e4 WordPress-tietokantaa vastaan \u200b\u200bajetun kyselyn ennen seuraavan sivun hahmontamista siten, ett\u00e4 tulokset sis\u00e4lt\u00e4v\u00e4t metatietotiedot.<\/p>\n<h3>WHERE-lausekkeen p\u00e4ivitt\u00e4minen<\/h3>\n<p>Ennen kuin olemme valmis, meid\u00e4n on kuitenkin my\u00f6s varmistettava, ett\u00e4 olemme p\u00e4ivitt\u00e4neet suoritettavan kyselyn.<\/p>\n<p>Kysely on oletusarvoisesti rakennettu <code>AND<\/code>toiminnolla, joka est\u00e4\u00e4 meit\u00e4 katsomasta oikein viestien otsikoita, otteita, sis\u00e4lt\u00f6\u00e4 ja metatietoja. kysely on kuitenkin p\u00e4ivitett\u00e4v\u00e4, jotta se k\u00e4ytt\u00e4\u00e4 <code>OR<\/code>toimintoa.<\/p>\n<p>Kirjaimellisesti t\u00e4m\u00e4 tarkoittaa, ett\u00e4 se n\u00e4ytt\u00e4\u00e4 otsikossa, sis\u00e4ll\u00f6ss\u00e4, otteessa tai metatiedoissa.<\/p>\n<p>Olen valinnut s\u00e4\u00e4nn\u00f6llisen lausekkeen k\u00e4yt\u00f6n toteutuksessani, mutta toteutus saattaa toimia alimerkkijonojen korvaamisen kanssa. Siten siell\u00e4 on hieman kommentteja, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f2fa607bf002f52a7a8d1e08f75d86a#file-01-posts-where-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jotta saat mahdollisimman paljon joustavuutta<\/a>.<\/p>\n<pre><code>&lt;?php\nadd_filter( 'posts_where', function($where, $query) {\n\n    \/\/ Determine if 'headline_notes' appears in the WHERE clause.\n    $position = strpos($where, 'acme_meta_key');\n    if (false === $position) {\n        return $where;\n    }\n\n    \/\/ Look for the 'AND' clasue and replace it with 'OR' in the WHERE clause.\n    $regularExpress = '\/\/mi'; \/\/ Your regular expression.\n    $replacement = ''; \/\/ Your string to replace.\n\n    return preg_replace(\n        $regularExpression,\n        $replacement,\n        $where\n    );\n}, 10, 2);<\/code><\/pre>\n<p>T\u00e4m\u00e4 p\u00e4ivitt\u00e4\u00e4 <code>WHERE<\/code>lauseen, joka on k\u00e4ynnistetty, jotta artikkelin alkuosassa, johon lis\u00e4\u00e4mme metatietoja, on ty\u00f6sarja.<\/p>\n<h2>On muitakin tapoja<\/h2>\n<p>Huomaa, ett\u00e4 WP_Queryn kanssa on joitakin uskomattoman joustavia tapoja saada tarvitsemasi tulokset. Ja toteutuksesi vaihtelee sen mukaan, mit\u00e4 olet tekem\u00e4ss\u00e4.<\/p>\n<p>Joten harkitse t\u00e4t\u00e4 yhten\u00e4 monista k\u00e4ytt\u00f6tavoista; Muista kuitenkin, ett\u00e4 jos sinulla on:<\/p>\n<ol>\n<li>yksi avain,<\/li>\n<li>arvo (tai arvo, joka voidaan jakaa taulukkoon),<\/li>\n<li>ja haluat etsi\u00e4 metatietoja perinteisen viestisis\u00e4ll\u00f6n rinnalla<\/li>\n<\/ol>\n<p>Sitten t\u00e4m\u00e4 toimii.<\/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>N\u00e4in voit laajentaa hakua sis\u00e4lt\u00e4m\u00e4\u00e4n julkaisun metatiedot. Meid\u00e4n on p\u00e4ivitett\u00e4v\u00e4 suoritettu kysely siten, ett\u00e4 se sis\u00e4lt\u00e4\u00e4 julkaisun metatietotaulukot.<\/p>\n","protected":false},"author":1,"featured_media":236453,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,917,834,843,803,864],"tags":[1166],"class_list":["post-231867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-muut","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\/231867","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=231867"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231867\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236453"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}