{"id":231098,"date":"2022-12-27T12:02:00","date_gmt":"2022-12-27T09:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231098"},"modified":"2022-12-25T22:34:53","modified_gmt":"2022-12-25T19:34:53","slug":"databasfraagor-foer-att-snabbt-uppdatera-data-del-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/databasfraagor-foer-att-snabbt-uppdatera-data-del-1\/","title":{"rendered":"Databasfr\u00e5gor f\u00f6r att snabbt uppdatera data, del 1"},"content":{"rendered":"\n<p>Det \u00e4r inte f\u00f6rsta g\u00e5ngen jag n\u00e4mner detta, men en av utmaningarna som kommer med att prata om att skriva direkta databasfr\u00e5gor f\u00f6r att uppdatera information i WordPress-databasen \u00e4r att du l\u00e4mnar dig sj\u00e4lv \u00f6ppen f\u00f6r n\u00e5got som:<\/p>\n<blockquote>\n<p>Ja, men det finns ett API f\u00f6r att g\u00f6ra n\u00e5got s\u00e5dant.<\/p>\n<\/blockquote>\n<p>Och i m\u00e5nga fall st\u00e4mmer det. Jag \u00e4r ett stort fan av att anv\u00e4nda dem ocks\u00e5. Men det finns tillf\u00e4llen d\u00e5 direkta, parametriserade databasfr\u00e5gor kan vara ett mer optimalt val.<\/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=\"Databasfr\u00e5gor f\u00f6r att snabbt uppdatera data, del 1\" ><\/a><\/p>\n<p>Nej, det \u00e4r inte en databas men skulle det inte vara fantastiskt om de s\u00e5g ut s\u00e5 h\u00e4r? Foto av Tobias Fischer p\u00e5 Unsplash<\/p>\n<p>Detta \u00e4r naturligtvis beroende av den milj\u00f6 som du arbetar i kraven f\u00f6r ditt projekt.<\/p>\n<p>S\u00e5 det h\u00e4r \u00e4r \u00e4nnu ett inl\u00e4gg som kommer att vara en illustration av hur man anv\u00e4nder <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> f\u00f6r att snabbt uppdatera information baserat p\u00e5 metadata (utan att anv\u00e4nda n\u00e5got som <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a> eller <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Meta_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Meta_Query<\/a> f\u00f6r att hantera det).<\/p>\n<h2>Databasfr\u00e5gor f\u00f6r att snabbt uppdatera data, del 1<\/h2>\n<p>Jag kommer att dela upp det h\u00e4r i tv\u00e5 delar eftersom den initiala funktionen som jag ska visa dig g\u00f6r mer \u00e4n en sak.<\/p>\n<p>Jag \u00e4r inget fan av det.<\/p>\n<p>F\u00f6r det andra \u00e4r det ocks\u00e5 en m\u00f6jlighet till hur du kan omdesigna funktioner f\u00f6r att bete sig p\u00e5 ett mer objektorienterat s\u00e4tt (vilket \u00e4r n\u00e5got som <a href=\"https:\/\/tommcfarlin.com\/tag\/object-oriented-programming-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jag \u00e4r ett fan av<\/a> och som <a href=\"https:\/\/tommcfarlin.com\/object-oriented-programming-using-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jag alltid \u00e4r glad att marknadsf\u00f6ra<\/a> ).<\/p>\n<p>Men l\u00e5t mig nu f\u00f6rklara problemet<\/p>\n<ol>\n<li>Jag importerar lite information fr\u00e5n ett tredjeparts-API.<\/li>\n<li>Informationen mappas till tabellen wp_posts s\u00e5v\u00e4l som tabellen wp_postmeta.<\/li>\n<li>Det finns vissa metadata som \u00e4r kriterier f\u00f6r att diktera statusen f\u00f6r ett inl\u00e4gg. Eller, mer direkt, om en bit metadata finns, b\u00f6r ett inl\u00e4gg ha sin poststatus inst\u00e4lld p\u00e5 utkast s\u00e5 att det inte visas i huvudfr\u00e5gan.<\/li>\n<\/ol>\n<p>F\u00f6r att komma till r\u00e4tta med detta m\u00e5ste tv\u00e5 saker h\u00e4nda:<\/p>\n<ol>\n<li>Vi beh\u00f6ver ID:n f\u00f6r inl\u00e4ggen,<\/li>\n<li>Och vi m\u00e5ste \u00e4ndra statusen p\u00e5 inl\u00e4ggen.<\/li>\n<\/ol>\n<p>Innan vi st\u00e4ller in fr\u00e5gorna och resten av koden, l\u00e5t oss s\u00e4ga att meta-nyckeln vi anv\u00e4nder kreativt kallas <strong>acme-status<\/strong>. Och med det, l\u00e5t oss komma ig\u00e5ng.<\/p>\n<h3>1 Ta tag i inl\u00e4ggs-ID:n med den associerade metanyckeln<\/h3>\n<p>F\u00f6rst skapar vi en funktion som heter <strong>setInactivePosts.<\/strong> Detta \u00e4r mer allm\u00e4nt \u00e4n det skulle vara om du arbetar inom en specifik dom\u00e4n, men du f\u00f6rst\u00e5r po\u00e4ngen.<\/p>\n<p>Sedan kommer vi att st\u00e4lla in en fr\u00e5ga som kommer att <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-00-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4mta alla inl\u00e4ggs-ID:n som har den specifika metanyckeln<\/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>H\u00e4r har vi en rad resultat. Men innan vi g\u00f6r n\u00e5got m\u00e5ste vi se till att vi har data som vi kan arbeta p\u00e5.<\/p>\n<h3>2 Avsluta tidigt?<\/h3>\n<p>Innan vi g\u00e5r vidare med att uppdatera informationen b\u00f6r vi dock kontrollera om det finns n\u00e5gra resultat. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-01-return-early-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Och om det inte finns?<\/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>D\u00e5 kan vi hoppa ut.<\/p>\n<h3>3 Uppdatera poststatus<\/h3>\n<p>Men om det finns resultat b\u00f6r vi g\u00e5 igenom dem och uppdatera <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-02-update-post-status-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">deras inl\u00e4ggsstatus<\/a> :<\/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>S\u00e5 hur ser det ut tillsammans?<\/p>\n<h3>4 Alla tillsammans<\/h3>\n<p>N\u00e4r vi s\u00e4tter ihop denna funktion som \u00e4r st\u00f6rre \u00e4n n\u00f6dv\u00e4ndigt, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-03-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ser du det h\u00e4r<\/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    \/\/ 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>Men i n\u00e4sta inl\u00e4gg kommer vi att omorganisera detta lite f\u00f6r att g\u00f6ra det mer objektorienterat.<\/p>\n<h3>En anm\u00e4rkning f\u00f6r databasadministrat\u00f6rer<\/h3>\n<p>F\u00f6r de av er som \u00e4r v\u00e4l bevandrade i SQL-fu, d\u00e5 vet du att detta sannolikt kan hanteras i en enda fr\u00e5ga; Syftet med detta inl\u00e4gg och inl\u00e4gget efter det \u00e4r dock tv\u00e5faldigt:<\/p>\n<ol>\n<li>F\u00f6r att visa hur man anv\u00e4nder $wpdb f\u00f6r att uppn\u00e5 n\u00e5got snabbt,<\/li>\n<li>Att visa hur man bryter ut en procedurmetod att g\u00f6ra n\u00e5got till en objektorienterad metod att g\u00f6ra n\u00e5got.<\/li>\n<\/ol>\n<p>Med det sagt, tack f\u00f6r alla fr\u00e5gor. \ud83d\udc4d\ud83c\udffb<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Detta \u00e4r \u00e4nnu ett inl\u00e4gg som kommer att vara en illustration av hur man anv\u00e4nder $wpdb f\u00f6r att snabbt uppdatera information med hj\u00e4lp av direkta databasfr\u00e5gor.<\/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":[838,848,901,922,724,868],"tags":[1173],"class_list":["post-231098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-handledningar","category-koda","category-oevrig","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=231098"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231098\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/237054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=231098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=231098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=231098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}