{"id":231894,"date":"2022-12-27T12:26:00","date_gmt":"2022-12-27T09:26:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231894"},"modified":"2022-11-10T05:37:08","modified_gmt":"2022-11-10T02:37:08","slug":"query-al-database-per-aggiornare-rapidamente-i-dati-parte-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/query-al-database-per-aggiornare-rapidamente-i-dati-parte-1\/","title":{"rendered":"Query al database per aggiornare rapidamente i dati, parte 1"},"content":{"rendered":"\n<p>Questa non \u00e8 la prima volta che ne parlo, ma una delle sfide che derivano dal parlare di scrivere query dirette al database per aggiornare le informazioni nel database di WordPress \u00e8 che ti lasci aperto a qualcosa come:<\/p>\n<blockquote>\n<p>S\u00ec, ma c&#8217;\u00e8 un&#8217;API per fare qualcosa del genere.<\/p>\n<\/blockquote>\n<p>E, in molti casi, \u00e8 vero. Anch&#8217;io sono un grande fan del loro utilizzo. Ma ci sono momenti in cui le query di database dirette e parametrizzate possono essere una scelta pi\u00f9 ottimale.<\/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=\"Query al database per aggiornare rapidamente i dati, parte 1\" ><\/a><\/p>\n<p>No, non \u00e8 un database, ma non sarebbe fantastico se assomigliassero a questo? Foto di Tobias Fischer su Unsplash<\/p>\n<p>Questo, ovviamente, dipende dall&#8217;ambiente in cui stai lavorando e dai requisiti del tuo progetto.<\/p>\n<p>Quindi questo \u00e8 un altro post che sar\u00e0 un&#8217;illustrazione di come utilizzare <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$ wpdb<\/a> per aggiornare rapidamente le informazioni in base ai metadati (senza utilizzare qualcosa come <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a> o <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Meta_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Meta_Query<\/a> per gestirlo).<\/p>\n<h2>Query al database per aggiornare rapidamente i dati, parte 1<\/h2>\n<p>Lo suddivider\u00f2 in due parti perch\u00e9 la funzione iniziale che ti mostrer\u00f2 sta facendo pi\u00f9 di una cosa.<\/p>\n<p>Non ne sono un fan.<\/p>\n<p>In secondo luogo, \u00e8 anche un&#8217;opportunit\u00e0 per riprogettare le funzioni per comportarsi in modo pi\u00f9 orientato agli oggetti (che \u00e8 qualcosa di cui <a href=\"https:\/\/tommcfarlin.com\/tag\/object-oriented-programming-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sono un fan<\/a> e di cui <a href=\"https:\/\/tommcfarlin.com\/object-oriented-programming-using-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sono sempre felice di promuovere<\/a> ).<\/p>\n<p>Per ora, per\u00f2, lasciami esporre il problema in questione<\/p>\n<ol>\n<li>Sto importando un po&#8217; di informazioni da un&#8217;API di terze parti.<\/li>\n<li>Le informazioni vengono mappate sulla tabella wp_posts e sulla tabella wp_postmeta.<\/li>\n<li>Ci sono alcuni metadati che sono criteri per dettare lo stato di un post. Oppure, pi\u00f9 direttamente, se \u00e8 presente un pezzo di metadati, allora un post dovrebbe avere lo stato del post impostato su bozza in modo che non venga visualizzato nella query principale.<\/li>\n<\/ol>\n<p>Per risolvere questo problema, devono accadere due cose:<\/p>\n<ol>\n<li>Abbiamo bisogno degli ID dei post,<\/li>\n<li>E dobbiamo cambiare lo stato dei post.<\/li>\n<\/ol>\n<p>Prima di impostare le query e il resto del codice, supponiamo che la meta chiave che stiamo utilizzando sia chiamata in modo creativo <strong>acme-status<\/strong>. E con questo, iniziamo.<\/p>\n<h3>1 Prendi gli ID Post con la Meta Key associata<\/h3>\n<p>Per prima cosa creeremo una funzione chiamata <strong>setInactivePosts.<\/strong> Questo \u00e8 pi\u00f9 generico di quanto sarebbe se lavorassi in un dominio specifico, ma hai capito.<\/p>\n<p>Quindi imposteremo una query che <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-00-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">recuperer\u00e0 tutti gli ID post che hanno quella specifica meta chiave<\/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>Qui abbiamo una serie di risultati. Ma prima di fare qualsiasi cosa, dobbiamo assicurarci di avere dati su cui operare.<\/p>\n<h3>2 Uscire in anticipo?<\/h3>\n<p>Prima di procedere con l&#8217;aggiornamento delle informazioni, tuttavia, dovremmo verificare se ci sono risultati. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-01-return-early-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">E se non ci sono?<\/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>Allora possiamo scappare.<\/p>\n<h3>3 Aggiorna lo stato del post<\/h3>\n<p>Ma se ci sono risultati, dovremmo scorrerli e aggiornare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-02-update-post-status-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lo stato del loro post<\/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>Allora com&#8217;\u00e8 tutto insieme?<\/p>\n<h3>4 Tutti insieme<\/h3>\n<p>Quando mettiamo insieme questa funzione pi\u00f9 grande del necessario, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a4b657f93a5df41274f5b4744975d265#file-03-set-inactive-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questo \u00e8 ci\u00f2 che vedi<\/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>Ma nel prossimo post, lo riorganizzeremo un po&#8217; per renderlo pi\u00f9 orientato agli oggetti.<\/p>\n<h3>Una nota per gli amministratori di database<\/h3>\n<p>Per quelli di voi che sono esperti in SQL-fu, allora sapete che questo pu\u00f2 essere probabilmente affrontato in una singola query; tuttavia, lo scopo di questo post e del post successivo \u00e8 duplice:<\/p>\n<ol>\n<li>Per mostrare come usare $wpdb per ottenere qualcosa velocemente,<\/li>\n<li>Per mostrare come scomporre un metodo procedurale per fare qualcosa in un metodo orientato agli oggetti per fare qualcosa.<\/li>\n<\/ol>\n<p>Detto questo, grazie per tutte le domande. \ud83d\udc4d\ud83c\udffb<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questo \u00e8 un altro post che sar\u00e0 un&#8217;illustrazione di come utilizzare $ wpdb per aggiornare rapidamente le informazioni utilizzando query dirette al database.<\/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":[918,896,835,720,844,865],"tags":[1168],"class_list":["post-231894","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-guida-per-principianti","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231894"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231894\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/237054"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}