{"id":28890,"date":"2018-02-18T09:37:35","date_gmt":"2018-02-18T08:37:35","guid":{"rendered":"https:\/\/kinsta.com\/?p=5453"},"modified":"2023-02-03T13:04:06","modified_gmt":"2023-02-03T12:04:06","slug":"wp-query","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/wp-query\/","title":{"rendered":"Costruire Query Efficienti in WordPress con WP_Query"},"content":{"rendered":"<p>Come sviluppatori WordPress, spesso dobbiamo recuperare post, pagine e altri contenuti che soddisfano criteri specifici dal <a href=\"https:\/\/kinsta.com\/it\/blog\/database-wordpress\/\">database di WordPress<\/a>. Normalmente, non abbiamo bisogno di creare query SQL (e spesso non dovremmo) perch\u00e9 la classe <code>WP_Query<\/code> e i suoi metodi ci forniscono uno strumento sicuro ed efficiente per recuperare i dati dal database. Dobbiamo solo dichiarare un array di argomenti e WordPress costruir\u00e0 la query SQL.<\/p>\n<p>In questo post, supporremo che conosciate gi\u00e0 le basi della classe <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener noreferrer\"><code>WP_Query<\/code><\/a>, i suoi <a href=\"https:\/\/codex.wordpress.org\/Query_Overview\" target=\"_blank\" rel=\"noopener noreferrer\">metodi e propriet\u00e0<\/a> e dove trovare un elenco delle <a href=\"https:\/\/codex.wordpress.org\/WordPress_Query_Vars\" target=\"_blank\" rel=\"noopener noreferrer\">variabili disponibili<\/a>.<\/p>\n<p>Ci concentreremo sui parametri forniti dalla classe <code>WP_Query<\/code> specificamente per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.<\/p>\n<p>Quando il traffico e i contenuti sono limitati, di solito non ci preoccupiamo dell&#8217;efficienza delle nostre query. WordPress crea query SQL ben ottimizzate e fornisce un sistema di cache pronto all&#8217;uso.<\/p>\n<p>Quando il traffico e il contenuto del sito crescono in modo significativo, fino ad arrivare a migliaia di post, dobbiamo considerare i tempi di esecuzione delle query.<\/p>\n<ul>\n<li><a href=\"#toolbox\">La Nostra Cassetta degli Attrezzi<\/a><\/li>\n<li><a href=\"#wp-query\">WP_Query &#8211; Perch\u00e9 non Contiamo le Righe<\/a><\/li>\n<li><a href=\"#cache-or-not-cache\">Cache o Non Cache<\/a><\/li>\n<li><a href=\"#returned-fields\">Campi Restituiti<\/a><\/li>\n<\/ul>\n<h2 id=\"toolbox\">La Nostra Cassetta degli Attrezzi<\/h2>\n<p>Il codice che stiamo per mostrarvi \u00e8 stato testato con <a href=\"https:\/\/kinsta.com\/it\/blog\/query-monitor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Query Monitor<\/a>, un plugin gratuito che fornisce informazioni essenziali sulle prestazioni delle query, hook attivati, richieste HTTP, regole di rewrite e molto altro.<\/p>\n<p>In alternativa a un plugin, possiamo forzare WordPress a memorizzare le informazioni sulle query dichiarando la seguente costante in <em>wp-config.php<\/em>:<\/p>\n<pre><code class=\"language-php\">define( 'SAVEQUERIES', true );<\/code><\/pre>\n<p>Quando <code>SAVEQUERIES<\/code> \u00e8 impostato su <code>true<\/code>, WordPress registra le query e un sacco di informazioni utili nell&#8217;array <code>$wpdb-&gt;queries<\/code>. Quindi, i nomi delle funzioni chiamanti e l&#8217;intervallo di esecuzione di ciascuna query possono essere stampati aggiungendo il seguente codice in un template file come <em>footer.php<\/em>:<\/p>\n<pre><code class=\"language-php\">if ( current_user_can( 'administrator' ) ) {\n\tglobal $wpdb;\n\techo '&lt;pre&gt;';\n\tprint_r( $wpdb-&gt;queries );\n\techo '&lt;\/pre&gt;';\n}<\/code><\/pre>\n<p>Ecco un esempio di ci\u00f2 che viene stampato:<\/p>\n<pre><code>[4] =&gt; Array\n(\n\t[0] =&gt; SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')  ORDER BY wp_posts.post_date DESC LIMIT 0, 10\n\t[1] =&gt; 0.0163011550903\n\t[2] =&gt; require('wp-blog-header.php'), wp, WP-&gt;main, WP-&gt;query_posts, WP_Query-&gt;query, WP_Query-&gt;get_posts, QM_DB-&gt;query\n\t[trace] =&gt; QM_Backtrace Object\n\t\t( ... )\n\t[result] =&gt; 10\n)\n<\/code><\/pre>\n<p>Se desiderate approfondire questo argomento, date un&#8217;occhiata al nostro tutorial: <a href=\"https:\/\/kinsta.com\/it\/blog\/wp-config-php\/\" target=\"_blank\" rel=\"noopener noreferrer\">Modificare il File wp-config.php<\/a>.<br \/>\nInfine, considerate che sia il plugin che la funzionalit\u00e0 integrata <strong>SAVEQUERIES<\/strong> sono strumenti di sviluppo che dovremmo disattivare in un ambiente di produzione.<\/p>\n<p>Detto questo, vediamo come velocizzare le query di WordPress.<\/p>\n<h2 id=\"wp-query\">WP_Query &#8211; Perch\u00e9 non Contiamo le Righe<\/h2>\n<p>\u00c8 possibile eseguire una query sul database con la funzione <code>get_posts<\/code>, che restituisce un array di post o una nuova istanza dell&#8217;oggetto <code>WP_Query<\/code>. In entrambi i casi, possiamo determinare i risultati delle query impostando i valori appropriati su variabili specifiche.<\/p>\n<p>Cominciamo con un esempio che mostra un Loop comune come di solito appare in un template file:<\/p>\n<pre><code class=\"language-php\">\/\/ The Query\n$the_query = new WP_Query( $args );\n\/\/ The Loop\nif ( $the_query-&gt;have_posts() ) {\n\twhile ( $the_query-&gt;have_posts() ) : $the_query-&gt;the_post(); \n\t\t\/\/ Your code here\n\tendwhile;\n} else {\n\t\t\/\/ no posts found\n}\n\/* Restore original Post Data *\/\nwp_reset_postdata();\n<\/code><\/pre>\n<p><code>$args<\/code> \u00e8 un array di coppie chiave\/valore. Queste coppie sono denominate query vars e determinano o influiscono sulla query SQL effettiva.<br \/>\nQuando si esegue una query sul database attraverso un plugin, sarebbe preferibile utilizzare il filtro <code>pre_get_posts<\/code>, come mostrato nell&#8217;esempio che segue:<\/p>\n<pre><code class=\"language-php\">function myplugin_pre_get_posts( $query ) {\n  if ( is_admin() || ! $query-&gt;is_main_query() ){\n\treturn;\n  }\n  $query-&gt;set( 'category_name', 'webdev' );\n}\nadd_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );\n<\/code><\/pre>\n<p>Una cosa importante da notare qui \u00e8 che l&#8217;oggetto <code>$query<\/code> viene passato per riferimento, non per valore, il che significa che gli argomenti della query influenzano solo un&#8217;istanza <code>$query<\/code> esistente.<\/p>\n<p>Il metodo <code>set<\/code> aggiunge una nuova query var alla <em>query specification<\/em> e forzer\u00e0 WordPress a recuperare tutti i post dalla categoria <code>webdev<\/code>. Questa \u00e8 la query che ne risulta:<\/p>\n<pre><code class=\"language-php\">SELECT SQL_CALC_FOUND_ROWS wp_posts.ID\nFROM wp_posts \nINNER JOIN wp_term_relationships\nON (wp_posts.ID = wp_term_relationships.object_id)\nWHERE 1=1 \nAND ( wp_term_relationships.term_taxonomy_id IN (12) )\nAND wp_posts.post_type = 'post'\nAND (wp_posts.post_status = 'publish'\nOR wp_posts.post_status = 'private')\nGROUP BY wp_posts.ID\nORDER BY wp_posts.post_date DESC\nLIMIT 0, 10\n<\/code><\/pre>\n<p>In questo esempio, il valore di <code>LIMIT<\/code> \u00e8 stato impostato dall&#8217;utente admin nelle Opzioni di lettura, come mostrato nell&#8217;immagine che segue.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2016\/06\/impostazioni_lettura.png\" alt=\"Impostazioni lettura\" width=\"472\" height=\"299\"><\/p>\n<p>Nelle query personalizzate possiamo impostare il numero di righe da recuperare dal database grazie al <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query#Pagination_Parameters\" target=\"_blank\" rel=\"noopener noreferrer\">parametro di paginazione<\/a> <code>posts_per_page<\/code>.<\/p>\n<p>L&#8217;opzione <code>SQL_CALC_FOUND_ROWS<\/code> forza la query a contare il numero di righe trovate. Questo numero verr\u00e0 restituito dalla funzione <code>FOUND_ROWS()<\/code>, come mostrato nell&#8217;esempio che segue:<\/p>\n<pre><code class=\"language-php\">SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name\nWHERE id &gt; 100 LIMIT 10;\n\nSELECT FOUND_ROWS();\n<\/code><\/pre>\n<p>Sfortunatamente, <code>SQL_CALC_FOUND_ROWS<\/code> pu\u00f2 rallentare significativamente il tempo di esecuzione della query.<br \/>\nLa buona notizia \u00e8 che possiamo forzare WordPress a rimuovere l&#8217;opzione fornendo la poco utilizzata (e non documentata) variabile <code>no_found_rows<\/code>.<\/p>\n<p>Se si omette <code>SQL_CALC_FOUND_ROWS<\/code>, <code>FOUND_ROWS()<\/code> restituisce il numero di righe fino al valore di <code>LIMIT<\/code> (maggiori informazioni su questo argomento nella <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/information-functions.html#function_found-rows\" target=\"_blank\" rel=\"noopener noreferrer\">documentazione di MySQL<\/a>).<\/p>\n<p>In un&#8217;installazione di WordPress con poche centinaia di post, la seguente meta query ha richiesto 0,0107 secondi:<\/p>\n<pre><code class=\"language-php\">SELECT SQL_CALC_FOUND_ROWS wp_posts.ID\nFROM wp_posts \nINNER JOIN wp_postmeta\nON ( wp_posts.ID = wp_postmeta.post_id )\nWHERE 1=1 \nAND ( ( wp_postmeta.meta_key = 'book_author'\nAND CAST(wp_postmeta.meta_value AS CHAR) LIKE '%Isaac Asimov%' ) )\nAND wp_posts.post_type = 'book'\nAND (wp_posts.post_status = 'publish'\nOR wp_posts.post_status = 'private')\nGROUP BY wp_posts.ID\nORDER BY wp_posts.post_date DESC\nLIMIT 0, 10\n<\/code><\/pre>\n<p>Rimuovendo <code>SQL_CALC_FOUND_ROWS<\/code> impostando <code>no_found_rows<\/code> su <code>false<\/code>, la stessa query ha impiegato 0,0006 secondi.<\/p>\n<figure style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2016\/06\/query.png\" alt=\"Il plugin Query Monitor\" width=\"800\" height=\"348\"><figcaption class=\"wp-caption-text\">Grazie al plugin Query Monitor, possiamo confrontare facilmente due query con e senza l&#8217;opzione SQL_CALC_FOUND_ROWS<\/figcaption><\/figure>\n<p>Quando la tabella <code>wp_post<\/code> contiene migliaia di righe, l&#8217;esecuzione della query potrebbe richiedere alcuni secondi.<br \/>\n<strong>Quando non abbiamo bisogno di impaginazione, dovremmo sempre impostare <code>no_found_rows<\/code> su <code>true<\/code>, rendendo la query molto pi\u00f9 veloce.<\/strong><\/p>\n<h2 id=\"cache-or-not-cache\">Cache o Non Cache<\/h2>\n<p>WordPress fornisce un sistema di cache integrato pronto all&#8217;uso. Sebbene la memorizzazione nella cache generalmente migliora la velocit\u00e0 di caricamento della pagina, questa pu\u00f2 causare l&#8217;esecuzione di alcune query aggiuntive sul database. Inoltre, ogni volta che viene eseguita una query \u00e8 possibile che vengano richiesti alcuni dati non necessari.<\/p>\n<p>Fortunatamente, WordPress ci consente di disabilitare la memorizzazione nella cache fornendo tre <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query#Caching_Parameters\" target=\"_blank\" rel=\"noopener noreferrer\">parametri specifici<\/a>:<\/p>\n<ul>\n<li><strong>cache_results<\/strong>: se memorizzare nella cache le informazioni sui post. Valore predefinito <code>true<\/code>.<\/li>\n<li><strong>update_post_meta_cache<\/strong>: se aggiornare la meta cache dei post. Valore predefinito <code>true<\/code>.<\/li>\n<li><strong>update_post_term_cache<\/strong>: se aggiornare la cache dei termini dei post. Valore predefinito <code>true<\/code>.<\/li>\n<\/ul>\n<p>Se \u00e8 abilitato un sistema di cache persistente, come <a href=\"https:\/\/memcached.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Memcached<\/a>, non dobbiamo preoccuparci dei parametri di memorizzazione nella cache perch\u00e9 WordPress imposter\u00e0 i valori su <code>false<\/code> di default.<\/p>\n<p>In qualsiasi altra situazione, possiamo creare una query pi\u00f9 veloce con il seguente codice:<\/p>\n<pre><code class=\"language-php\">function myplugin_pre_get_posts( $query ) {\n  if ( is_admin() || ! $query-&gt;is_main_query() ){\n\treturn;\n  }\n  $query-&gt;set( 'category_name', 'webdev' );\n\n  $query-&gt;set( 'no_found_rows', true );\n  $query-&gt;set( 'update_post_meta_cache', false );\n  $query-&gt;set( 'update_post_term_cache', false );\n}\nadd_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );\n<\/code><\/pre>\n<p><strong>Quando non \u00e8 disponibile un sistema di cache permanente, le query che restituiscono piccole quantit\u00e0 di dati non dovrebbero essere memorizzate nella cache.<\/strong><\/p>\n<h2 id=\"returned-fields\">Campi Restituiti<\/h2>\n<p>Come regola generale, non dovremmo mai interrogare il database per campi non necessari. La classe <code>WP_Query<\/code> fornisce l&#8217;argomento <code>fields<\/code>, che consente di limitare i campi restituiti ai campi ID o <code>'id=&gt;parent'<\/code>. La documentazione del file di origine <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/4.5.2\/src\/wp-includes\/query.php#L1494\" target=\"_blank\" rel=\"noopener noreferrer\">definisce<\/a> l&#8217;argomento <code>fields<\/code> come segue:<\/p>\n<blockquote><p>Quali campi restituire. Campo singolo o tutti i campi (stringa) o array di campi. &#8216;id=&gt;parent&#8217; utilizza &#8216;id&#8217; e &#8216;post_parent&#8217;. Di default restituisce tutti i campi. Accetta &#8216;ids&#8217;, &#8216;id=&gt;parent&#8217;.<\/p><\/blockquote>\n<p>La variabile <code>fields<\/code> accetta <code>'ids'<\/code> e <code>'id=&gt;parent'<\/code> e di default \u00e8 <code>*<\/code> (qualsiasi altro valore), sebbene noterete che di default WordPress imposter\u00e0 il valore su <code>ids<\/code> in diverse query.<br \/>\nInfine, possiamo ottimizzare la nostra prima query:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n$args = array( \n\t'no_found_rows' =&gt; true, \n\t'update_post_meta_cache' =&gt; false, \n\t'update_post_term_cache' =&gt; false, \n\t'category_name' =&gt; 'cms', \n\t'fields' =&gt; 'ids'\n);\n\/\/ The Query\n$the_query = new WP_Query( $args );\n$my_posts = $the_query-&gt;get_posts();\n\nif( ! empty( $my_posts ) ){\n    foreach ( $my_posts as $p ){\n        \/\/ Your code\n    }\n}\n\/* Restore original Post Data *\/\nwp_reset_postdata();\n<\/code><\/pre>\n<p><strong>Quando non sono richiesti campi specifici, limitate i campi restituiti agli ID.<\/strong><\/p>\n<h2>Riepilogo<\/h2>\n<p>Considerare la velocit\u00e0 delle query potrebbe non comportare enormi vantaggi per i piccoli siti con poche centinaia di post. Se volete prepararti alla crescita o gestite un sito di grandi dimensioni con query pesanti, dovreste ottimizzare le vostre query WordPress. Query inefficienti possono rallentare notevolmente il caricamento delle pagine, ma con alcune semplici modifiche \u00e8 possibile velocizzare notevolmente il caricamento del sito.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When traffic and content are limited, we don&#8217;t care about query speed. But when site content grows up to thousands of posts, we must consider the query execution time. In this post I will focus on those parameters provided by the WP_Query class specifically to optimize the SQL queries, reducing execution time and resource consumption.<\/p>\n","protected":false},"author":36,"featured_media":28893,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[32,3],"topic":[25873],"class_list":["post-28890","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-sviluppo-web","tag-wordpress","topic-sviluppo-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Costruire Query Efficienti in WordPress con WP_Query<\/title>\n<meta name=\"description\" content=\"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/wp-query\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Costruire Query Efficienti in WordPress con WP_Query\" \/>\n<meta property=\"og:description\" content=\"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/wp-query\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-18T08:37:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-03T12:04:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"998\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Carlo Daniele\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Costruire Query Efficienti in WordPress con WP_Query\",\"datePublished\":\"2018-02-18T08:37:35+00:00\",\"dateModified\":\"2023-02-03T12:04:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/\"},\"wordCount\":1057,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg\",\"keywords\":[\"sviluppo web\",\"WordPress\"],\"articleSection\":[\"Sviluppo WordPress\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/\",\"name\":\"Costruire Query Efficienti in WordPress con WP_Query\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg\",\"datePublished\":\"2018-02-18T08:37:35+00:00\",\"dateModified\":\"2023-02-03T12:04:06+00:00\",\"description\":\"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/wp-query\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg\",\"width\":1600,\"height\":998},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/wp-query\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sviluppo di WordPress\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/sviluppo-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Costruire Query Efficienti in WordPress con WP_Query\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"caption\":\"Carlo Daniele\"},\"description\":\"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.\",\"sameAs\":[\"https:\/\/frammentidicodice.com\/\",\"https:\/\/x.com\/carlodaniele\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Costruire Query Efficienti in WordPress con WP_Query","description":"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/wp-query\/","og_locale":"it_IT","og_type":"article","og_title":"Costruire Query Efficienti in WordPress con WP_Query","og_description":"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.","og_url":"https:\/\/kinsta.com\/it\/blog\/wp-query\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2018-02-18T08:37:35+00:00","article_modified_time":"2023-02-03T12:04:06+00:00","og_image":[{"width":1600,"height":998,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg","type":"image\/jpeg"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Carlo Daniele","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Costruire Query Efficienti in WordPress con WP_Query","datePublished":"2018-02-18T08:37:35+00:00","dateModified":"2023-02-03T12:04:06+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/"},"wordCount":1057,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg","keywords":["sviluppo web","WordPress"],"articleSection":["Sviluppo WordPress"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/wp-query\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/","url":"https:\/\/kinsta.com\/it\/blog\/wp-query\/","name":"Costruire Query Efficienti in WordPress con WP_Query","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg","datePublished":"2018-02-18T08:37:35+00:00","dateModified":"2023-02-03T12:04:06+00:00","description":"In questo tutorial ti mostriamo come utilizzare la classe WP_Query per ottimizzare le query SQL, riducendo i tempi di esecuzione e il consumo di risorse.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/wp-query\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2019\/10\/wp_query.jpg","width":1600,"height":998},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/wp-query\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Sviluppo di WordPress","item":"https:\/\/kinsta.com\/it\/argomenti\/sviluppo-wordpress\/"},{"@type":"ListItem","position":3,"name":"Costruire Query Efficienti in WordPress con WP_Query"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","caption":"Carlo Daniele"},"description":"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.","sameAs":["https:\/\/frammentidicodice.com\/","https:\/\/x.com\/carlodaniele"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/28890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=28890"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/28890\/revisions"}],"predecessor-version":[{"id":30733,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/28890\/revisions\/30733"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/28890\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/28890\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/28890\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/28890\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/28890\/translations\/pt"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/28890\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/28893"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=28890"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=28890"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=28890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}