{"id":231141,"date":"2022-12-27T12:28:00","date_gmt":"2022-12-27T09:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231141"},"modified":"2022-12-25T22:34:53","modified_gmt":"2022-12-25T19:34:53","slug":"andmebaasipaeringud-andmete-kiireks-vaerskendamiseks-1-osa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/andmebaasipaeringud-andmete-kiireks-vaerskendamiseks-1-osa\/","title":{"rendered":"Andmebaasip\u00e4ringud andmete kiireks v\u00e4rskendamiseks, 1. osa"},"content":{"rendered":"\n<p>See ei ole esimene kord, kui ma seda mainin, kuid \u00fcks v\u00e4ljakutseid, mis kaasnevad WordPressi andmebaasis teabe v\u00e4rskendamiseks otseste andmebaasip\u00e4ringute kirjutamisega, on see, et j\u00e4tate end avatud millelegi j\u00e4rgmisele:<\/p>\n<blockquote>\n<p>Jah, aga millegi sellise tegemiseks on olemas API.<\/p>\n<\/blockquote>\n<p>Ja paljudel juhtudel on see \u00f5ige. Olen ka nende kasutamise suur f\u00e4nn. Kuid on aegu, kus otsesed parameetritega andmebaasip\u00e4ringud v\u00f5ivad olla optimaalsem valik.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159831-61e6fe995df5b.jpg\" 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-159831-61e6fe995df5b.jpg\" alt=\"Andmebaasip\u00e4ringud andmete kiireks v\u00e4rskendamiseks, 1. osa\" ><\/a><\/p>\n<p>Ei, see ei ole andmebaas, kuid kas poleks suurep\u00e4rane, kui need n\u00e4eksid v\u00e4lja sellised? Tobias Fischeri foto saidil Unsplash<\/p>\n<p>See s\u00f5ltub loomulikult keskkonnast, milles te oma projekti n\u00f5udeid t\u00f6\u00f6tate.<\/p>\n<p>Nii et see on j\u00e4rjekordne postitus, mis illustreerib, kuidas kasutada <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> -d metaandmetel p\u00f5hineva teabe kiireks v\u00e4rskendamiseks (ilma selle k\u00e4sitlemiseks kasutamata midagi nagu <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a> v\u00f5i <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Meta_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Meta_Query<\/a> ).<\/p>\n<h2>Andmebaasip\u00e4ringud andmete kiireks v\u00e4rskendamiseks, 1. osa<\/h2>\n<p>Jagan selle kaheks osaks, sest esialgne funktsioon, mida ma teile n\u00e4itan, teeb rohkem kui \u00fchte asja.<\/p>\n<p>Ma ei ole selle f\u00e4nn.<\/p>\n<p>Teiseks on see ka v\u00f5imalus, kuidas saate funktsioone \u00fcmber kujundada, et need k\u00e4ituksid rohkem objektorienteeritud viisil (mille <a href=\"https:\/\/tommcfarlin.com\/tag\/object-oriented-programming-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00e4nn ma olen<\/a> ja mida <a href=\"https:\/\/tommcfarlin.com\/object-oriented-programming-using-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mul on alati hea meel reklaamida<\/a> ).<\/p>\n<p>Praegu lubage mul siiski k\u00e4sitleda probleemi<\/p>\n<ol>\n<li>Impordin natuke teavet kolmanda osapoole API-st.<\/li>\n<li>Teave vastendatakse nii tabelisse wp_posts kui ka tabelisse wp_postmeta.<\/li>\n<li>Postituse oleku m\u00e4\u00e4ramiseks on teatud metaandmed. V\u00f5i otsesemalt, kui metaandmed on olemas, peaks postituse postituse olekuks olema m\u00e4\u00e4ratud mustand, et seda p\u00f5hip\u00e4ringus ei kuvataks.<\/li>\n<\/ol>\n<p>Selle lahendamiseks peab juhtuma kaks asja:<\/p>\n<ol>\n<li>Meil on vaja postituste ID-sid,<\/li>\n<li>Ja me peame muutma postituste olekut.<\/li>\n<\/ol>\n<p>Enne p\u00e4ringute ja \u00fclej\u00e4\u00e4nud koodi seadistamist oletame, et meie kasutatavat metav\u00f5tit nimetatakse loominguliselt <strong>acme-status<\/strong>. Ja sellega alustame.<\/p>\n<h3>1 Haarake seotud metav\u00f5tmega postituste ID-d<\/h3>\n<p>Esiteks loome funktsiooni <strong>setInactivePosts.<\/strong> See on \u00fcldisem kui siis, kui t\u00f6\u00f6tate konkreetses domeenis, kuid saate aru.<\/p>\n<p>Seej\u00e4rel seadistame p\u00e4ringu, mis <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-00-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hangib k\u00f5ik postituste ID-d, millel on see konkreetne metav\u00f5ti<\/a> :<\/p>\n<pre><code>&lt;?php\n\nfunction setInactivePosts()\n{\n    \/\/ First, find the post IDs with an empty acme-status.\n    global $wpdb;\n    $results = $wpdb-&gt;get_results(\n        $wpdb-&gt;prepare(\n            \"\n            SELECT post_id\n            FROM $wpdb-&gt;postmeta\n            WHERE meta_key = %s\n            AND meta_value = ''\n            \",\n            'acme-status') );\n\n  \/\/ More to come...\n<\/code><\/pre>\n<p>Siin on meil rida tulemusi. Kuid enne kui midagi ette v\u00f5tame, peame veenduma, et meil on toimimiseks vajalikud andmed.<\/p>\n<h3>2 Kas lahkuda varakult?<\/h3>\n<p>Enne teabe v\u00e4rskendamist peaksime siiski kontrollima, kas on tulemusi. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-01-return-early-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ja kui neid pole?<\/a><\/p>\n<pre><code>&lt;?php\n\n\/\/ See previous gist.\n\n\/\/ If there aren't any results, there's nothing to do.\nif (0 === count($results)) {\n    return;\n}\n\n\/\/ More to come...<\/code><\/pre>\n<p>Siis saame v\u00e4lja astuda.<\/p>\n<h3>3 V\u00e4rskendage postituse olekut<\/h3>\n<p>Kuid kui tulemusi on, peaksime neid uuesti l\u00e4bi vaatama ja <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-02-update-post-status-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nende postituse olekut<\/a> v\u00e4rskendama :<\/p>\n<pre><code>&lt;?php\n\n\/\/ See previous gist.\n\n\/\/ Otherwise, set the post_status of the specified post IDs to 'draft'.\nforeach ($results as $result) {\n    $wpdb-&gt;get_results(\n        $wpdb-&gt;prepare(\n            \"\n            UPDATE $wpdb-&gt;posts\n            SET post_status = %s\n            WHERE ID = %d\n            \",\n            'draft',\n            (int) ($result-&gt;post_id)) );\n}<\/code><\/pre>\n<p>Kuidas see k\u00f5ik koos v\u00e4lja n\u00e4eb?<\/p>\n<h3>4 K\u00f5ik koos<\/h3>\n<p>Kui paneme selle vajalikust suurema funktsiooni kokku, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-03-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4ete<\/a> j\u00e4rgmist:<\/p>\n<pre><code>&lt;?php\n\nfunction setInactivePosts()\n{\n    \/\/ First, find the post IDs with an empty acme-status.\n    global $wpdb;\n    $results = $wpdb-&gt;get_results(\n        $wpdb-&gt;prepare(\n            \"\n            SELECT post_id\n            FROM $wpdb-&gt;postmeta\n            WHERE meta_key = %s\n            AND meta_value = ''\n            \",\n            'acme-status') );\n\n    \/\/ If there aren't any results, there's nothing to do.\n    if (0 === count($results)) {\n        return;\n    }\n\n    \/\/ Otherwise, set the post_status of the specified post IDs to 'draft'.\n    foreach ($results as $result) {\n        $wpdb-&gt;get_results(\n            $wpdb-&gt;prepare(\n                \"\n                UPDATE $wpdb-&gt;posts\n                SET post_status = %s\n                WHERE ID = %d\n                \",\n                'draft',\n                (int) ($result-&gt;post_id)) );\n    }\n}<\/code><\/pre>\n<p>Kuid j\u00e4rgmises postituses korraldame selle veidi \u00fcmber, et muuta see objektorienteeritumaks.<\/p>\n<h3>M\u00e4rkus andmebaasi administraatoritele<\/h3>\n<p>Kui olete SQL-fu-ga h\u00e4sti kursis, siis teate, et seda saab t\u00f5en\u00e4oliselt lahendada \u00fche p\u00e4ringuga; selle postituse ja sellele j\u00e4rgneva postituse eesm\u00e4rk on aga kahekordne:<\/p>\n<ol>\n<li>Et n\u00e4idata, kuidas kasutada $wpdb-d millegi kiireks saavutamiseks,<\/li>\n<li>N\u00e4idata, kuidas muuta millegi tegemise protseduuriline meetod objektorienteeritud millegi tegemise meetodiks.<\/li>\n<\/ol>\n<p>Sellega seoses t\u00e4nan k\u00f5igi p\u00e4ringute eest. \ud83d\udc4d\ud83c\udffb<\/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>See on j\u00e4rjekordne postitus, mis illustreerib, kuidas kasutada $wpdb-d teabe kiireks v\u00e4rskendamiseks otseste andmebaasip\u00e4ringute abil.<\/p>\n","protected":false},"author":1,"featured_media":237054,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,833,894,916,842,863],"tags":[1165],"class_list":["post-231141","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-juhend-algajatele","category-kood","category-muud","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/231141","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=231141"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/231141\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/237054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=231141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=231141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=231141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}