{"id":229069,"date":"2022-11-06T10:58:00","date_gmt":"2022-11-06T07:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229069"},"modified":"2022-11-09T05:25:01","modified_gmt":"2022-11-09T02:25:01","slug":"wordpressi-paeringud-in-klauslitega-kes-teadis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-paeringud-in-klauslitega-kes-teadis\/","title":{"rendered":"WordPressi p\u00e4ringud IN-klauslitega (kes teadis)?"},"content":{"rendered":"\n<p>Veidi rohkem kui aasta tagasi kirjutasin postituse selle kohta, kuidas kasutada <strong><a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Meta_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Meta_Query&#8217;t<\/a><\/strong>, kui teil on <a href=\"https:\/\/tommcfarlin.com\/wp_query-and-multiple-meta-keys\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00f5tmete komplekt,<\/a> mida soovite kasutada teabe andmebaasist v\u00e4ljav\u00f5tmiseks.<\/p>\n<p>Mis saab aga juhul, kui teil on palju erinevaid v\u00f5tmeid, mille tulemuseks oleks <strong>WP_Meta_Query<\/strong> klassi jaoks v\u00e4ga pikk massiiv? N\u00e4iteks mis siis, kui peaksite enne p\u00e4ringu seadistamist andmekogu l\u00e4bi vaatama?<\/p>\n<p>Mingil tasandil v\u00f5ib tunduda, et loomulik asi, mida teha, oleks:<\/p>\n<ol>\n<li>korrata v\u00f5tmete kogumist,<\/li>\n<li>d\u00fcnaamiliselt luua tulemusi,<\/li>\n<li>\u00fchendage need \u00fcheks tulemuste komplektiks,<\/li>\n<li>siis t\u00f6\u00f6ta sellega, mis sulle antakse.<\/li>\n<\/ol>\n<p>Kuid kas see ei tundu pisut t\u00fclikas (r\u00e4\u00e4kimata aeglasest)?<\/p>\n<p>Mis puutub WordPressi API kasutamiseks, siis ma teen k\u00f5ik endast oleneva, et sellest kinni pidada enne, kui r\u00e4\u00e4gin n\u00e4iteks otse andmebaasiga, kuid m\u00f5nikord on m\u00f5ttekas kirjutada toorp\u00e4ring, mitte kirjutada lihtsalt mingit nutikat koodi. WordPressi API t\u00f6\u00f6le panemiseks.<\/p>\n<p>Enne kui hakkan arutama, miks ma olen teinud asju, mis mul on, tahan selgitada probleemi ja l\u00e4henemisviisi. See p\u00e4\u00e4stab t\u00f5en\u00e4oliselt kedagi enneaegselt kommentaaridesse h\u00fcppamast.<\/p>\n<p>Sellel ekraanipildil pole p\u00e4ringuga midagi pistmist. L\u00f5bu p\u00e4rast vaid pilt IDE-st.<\/p>\n<p>Nii et siin:<\/p>\n<ul>\n<li>Mul on standardne v\u00e4\u00e4rtuste massiiv, mida l\u00f5puks kasutatakse metaandmete v\u00f5tmiseks ja nende p\u00f5hjal kohandatud postitust\u00fc\u00fcbi loomiseks (kuna need on imporditud kolmanda osapoole allikast).<\/li>\n<li>Olen p\u00e4ringute parameetrite muutmise (ja seega ka <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb#Protect_Queries_Against_SQL_Injection_Attacks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ettevalmistamise<\/a> kasutamise) suur pooldaja, et tagada andmete \u00f5ige p\u00e4ringute tegemine andmebaasist. Kahjuks seda p\u00e4ringu sooritamisel ei juhtunud. Selgitan hiljem selles postituses, miks.<\/li>\n<li>Seega, v\u00f5tke massiiv ja selle stringiks teisendamine on kasulik, kuid see ei lahenda ikkagi probleemi, miks standardne <strong>ettevalmistusfunktsioon<\/strong> ei t\u00f6\u00f6tanud.<\/li>\n<\/ul>\n<p>Seda \u00f6eldes selgitan ma m\u00f5nda asja:<\/p>\n<ol>\n<li>miks ma otsustasin metaandmete v\u00e4\u00e4rtuste salvestamiseks kasutada massiivi,<\/li>\n<li>miks ma kasutasin <a href=\"https:\/\/php.net\/manual\/en\/function.implode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implode&#8217;i<\/a> nende stringiks teisendamiseks,<\/li>\n<li>miks ma ei kasuta p\u00e4ringu k\u00e4sitlemiseks <strong>ettevalmistust .<\/strong><\/li>\n<\/ol>\n<h3>Metaandmete v\u00e4\u00e4rtuste kohta<\/h3>\n<p>P\u00f5hjus, miks metaandmeid massiivis klassi omadusena hoitakse, on see, et see massiiv v\u00f5ib aja jooksul muutuda.<\/p>\n<p>See t\u00e4hendab, et meil v\u00f5ib olla vaja importida t\u00e4iendavaid kolmandate osapoolte andmeid, eemaldada kolmanda osapoole andmed v\u00f5i meil v\u00f5ib tekkida vajadus teha olemasolevates muudatusi.<\/p>\n<p>Kui neid andmeid hoitakse \u00fches kohas, muudab see koodi tulevaste versioonide haldamise palju lihtsamaks.<\/p>\n<h3>Massiivi imploding<\/h3>\n<p>Kui k\u00e4ivitate andmebaasi p\u00e4ringu ja peate t\u00f6\u00f6tama andmemassiiviga, saate kasutada <strong>WP_Meta_Query<\/strong> ja kasutada iga v\u00f5tit argumentide massiivi osana.<\/p>\n<p>Aga kui teil on suhteliselt suur andmekogum, peate k\u00f5igepealt need k\u00f5ik l\u00e4bi vaatama, seej\u00e4rel looma p\u00e4ringu ja seej\u00e4rel t\u00f6\u00f6tlema.<\/p>\n<p>Ja kui olete k\u00f5ik selle teinud, pole ma veendunud, et kirjutatud kood pole j\u00f5udluse arvelt tulnud. Seet\u00f5ttu otsustan m\u00f5nikord kasutada <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wpdb<\/a> -d .<\/p>\n<h3>Prepare&#8217;i ei kasutata<\/h3>\n<p>N\u00fc\u00fcd proovin andmebaasiga otse liidestades veenduda, et:<\/p>\n<ol>\n<li>Mul on selleks hea p\u00f5hjus,<\/li>\n<li>Kasutan parameetritega p\u00e4ringuid.<\/li>\n<\/ol>\n<p>Kuid olen selle konkreetse andmekogumiga m\u00f5nda aega t\u00f6\u00f6tanud, p\u00fc\u00fcdes kasutada k\u00f5iki WordPressi arenduse permutatsioone, millest olen teadlik (sealhulgas r\u00e4\u00e4kinud sellest mitme eakaaslasega), et see parimal v\u00f5imalikul viisil toimiks.<\/p>\n<p>Seda siiski ei juhtunud. Ja just siis sattusin ma <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/esc_sql\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Codexi<\/a> j\u00e4rgmisele lehele :<\/p>\n<blockquote>\n<p>99% juhtudest v\u00f5ite selle asemel kasutada $wpdb-&gt;prepare() ja see on soovitatav meetod. See funktsioon on m\u00f5eldud kasutamiseks ainult neil harvadel juhtudel, kui te ei saa lihtsalt kasutada $wpdb-&gt;prepare(). \u00dcks n\u00e4ide on massiivi ettevalmistamine kasutamiseks IN-klauslis.<\/p>\n<\/blockquote>\n<p>Ja t\u00e4pselt seda ma teha p\u00fc\u00fcdsin: otsisin postituse metatabelist, kus metav\u00f5tme v\u00e4\u00e4rtused sisaldusid massiivis.<\/p>\n<p>Nii et siin on, kuidas ma selle k\u00f5ik v\u00e4lja t\u00f6\u00f6tasin.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d482b2383363558f5647f578e62d25c3#file-00-keys-to-map-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Esiteks<\/a> l\u00f5in massiivi erinevate metav\u00f5tmete hoidmiseks, mida ma tean, et pean l\u00f5puks kaardistama (kuigi v\u00f5tmete v\u00e4\u00e4rtus pole selle postituse jaoks oluline):<\/p>\n<pre><code>&lt;?php\n\n\/\/ This is used to maintain a map of data should we need to add more.\n$data_types = [\n    'data_item_one',\n    'data_item_two',\n    '...'\n    'data_item_ten,\n];\n<\/code><\/pre>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d482b2383363558f5647f578e62d25c3#file-01-mysql-ready-string-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Seej\u00e4rel<\/a> teisendasin need MySQL-valmidusega stringiks. T\u00f5si, see ei ole kasutaja sisestus ja seda kasutatakse <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/comparison-operators.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">IN<\/a> &#8211; klauslis, seega ei saa seda <strong>ettevalmistuslauses<\/strong> kasutada :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Converts the incoming array into a comma-delimited string with\n * quotes wrapped around each key.\n *\n * @access private\n *\n * @param  array $arr The array to convert to a string.\n * @return string     The string representation of the array delimited by quotes and commas.\n *\/\nprivate function convert_to_sql_ready_string( $arr) {\n  return '\"'. implode( $arr, '\",\"' ). '\"';\n}\n<\/code><\/pre>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/d482b2383363558f5647f578e62d25c3#file-02-the-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">L\u00f5puks<\/a> l\u00f5in p\u00e4ringu ja hankisin tulemused:<\/p>\n<pre><code>&lt;?php\n\npublic function get_data_values() {\n\n  global $wpdb;\n  $query = \"\n    SELECT post_id, meta_key, meta_value \n    FROM $wpdb-&gt;postmeta WHERE\n    meta_key in ($this-&gt;data_types) AND \n    meta_value &lt;&gt; '';\n  \";\n\n  $results = $wpdb-&gt;get_results( $query );\n\n  return $results;\n}\n<\/code><\/pre>\n<p>Ja nii ma t\u00f6\u00f6tasin massiivide, klassi atribuudiga ja seadistasin oma p\u00e4ringu.<\/p>\n<p>Kas see on parim viis IN-klauslitega WordPressi p\u00e4ringutega t\u00f6\u00f6tamiseks? Ma pole kindel, kuid arvestades oma kogemusi, loetut ja selle toimimist, olen l\u00f5pptulemusega rahul.<\/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>IN-klauslitega WordPressi p\u00e4ringutega t\u00f6\u00f6tamine v\u00f5ib olla keeruline, eriti kui tegemist on metav\u00f5tmetega. Siin on see, mida ma leidsin t\u00f6\u00f6tavat.<\/p>\n","protected":false},"author":1,"featured_media":166518,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,916,802,863],"tags":[1165],"class_list":["post-229069","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-muud","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229069"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229069\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/166518"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}