{"id":34159,"date":"2020-01-31T02:37:12","date_gmt":"2020-01-31T10:37:12","guid":{"rendered":"https:\/\/kinsta.com\/?p=5453"},"modified":"2025-02-18T06:51:58","modified_gmt":"2025-02-18T09:51:58","slug":"wp-query","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/","title":{"rendered":"Construindo Consultas Eficientes do WordPress com o WP_Query"},"content":{"rendered":"<p>Como desenvolvedores do WordPress, muitas vezes precisamos recuperar posts, p\u00e1ginas e outros conte\u00fados que correspondam a crit\u00e9rios espec\u00edficos a partir do <a href=\"https:\/\/kinsta.com\/pt\/blog\/banco-de-dados-wordpress\/\">banco de dados do WordPress<\/a>. Normalmente, n\u00e3o precisamos de construir consultas SQL (e muitas vezes n\u00e3o devemos) porque a classe <code>WP_Query<\/code> e os seus m\u00e9todos fornecem-nos uma forma segura e eficiente de recuperar dados da base de dados. N\u00f3s s\u00f3 precisamos declarar um array de argumentos, e o objeto <code>$query<\/code> ir\u00e1 construir a consulta SQL real.<\/p>\n<p>Neste post, vou assumir que voc\u00ea j\u00e1 conhece o b\u00e1sico da classe <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\"><code>WP_Query<\/code><\/a>, seus <a href=\"https:\/\/codex.wordpress.org\/Query_Overview\">m\u00e9todos e propriedades<\/a>, e onde encontrar uma lista das <a href=\"https:\/\/codex.wordpress.org\/WordPress_Query_Vars\">vari\u00e1veis dispon\u00edveis<\/a>.<\/p>\n<p>Vou me concentrar nos par\u00e2metros fornecidos pela classe <code>WP_Query<\/code> especificamente para otimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.<\/p>\n<p>Quando o tr\u00e1fego e o conte\u00fado s\u00e3o limitados, normalmente n\u00e3o nos preocupamos com a efici\u00eancia das nossas consultas. O WordPress constr\u00f3i consultas SQL bem otimizadas e fornece um sistema de cache fora da caixa.<\/p>\n<p>Quando o tr\u00e1fego e o conte\u00fado do site crescem significativamente &#8211; at\u00e9 milhares de posts &#8211; ent\u00e3o devemos considerar o tempo de execu\u00e7\u00e3o da consulta.<\/p>\n<ul>\n<li><a href=\"#toolbox\">Nossa Caixa de Ferramentas<\/a><\/li>\n<li><a href=\"#wp-query\">WP_Query &#8211; Porque n\u00e3o cont\u00e1vamos as filas<\/a><\/li>\n<li><a href=\"#cache-or-not-cache\">Cache ou N\u00e3o Cache<\/a><\/li>\n<li><a href=\"#returned-fields\">Campos devolvidos<\/a><\/li>\n<\/ul>\n<h2 id=\"toolbox\">Nossa Caixa de Ferramentas<\/h2>\n<p>O c\u00f3digo que vou mostrar foi testado com o <a href=\"https:\/\/kinsta.com\/pt\/blog\/query-monitor\/\">Query Monitor<\/a>, um plugin gratuito que fornece informa\u00e7\u00f5es essenciais sobre o desempenho da consulta, ganchos acionados, pedidos HTTP, regras de reescrita, e muito mais.<\/p>\n<p>Alternativamente a um plugin, podemos for\u00e7ar o WordPress a armazenar informa\u00e7\u00f5es de consulta declarando a seguinte constante em <em>wp-config.php<\/em>:<\/p>\n<pre>define( 'SAVEQUERIES', true );<\/pre>\n<p>Quando <code>SAVEQUERIES<\/code> \u00e9 definido para <code>true<\/code>, o WordPress registra as consultas e um monte de informa\u00e7\u00f5es \u00fateis no array <code>$wpdb-&gt;queries<\/code>. Assim, os nomes das fun\u00e7\u00f5es do chamador e o lapso de execu\u00e7\u00e3o de cada consulta podem ser impressos adicionando o seguinte c\u00f3digo em um arquivo modelo como <em>footer.php<\/em>:<\/p>\n<pre>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}<\/pre>\n<p>Aqui est\u00e1 um exemplo do que \u00e9 ecoado:<\/p>\n<pre>[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<\/pre>\n<p>Se voc\u00ea gostaria de mergulhar fundo neste t\u00f3pico, d\u00ea uma olhada no nosso tutorial: <a href=\"https:\/\/kinsta.com\/pt\/blog\/wp-config-php\/\">Editando o wp-config.php<\/a>.<br \/>\nFinalmente, considere que tanto o plugin como a funcionalidade <code>SAVEQUERIES<\/code>\u00a0integrada est\u00e3o desenvolvendo ferramentas que devemos desligar em um ambiente de produ\u00e7\u00e3o.<\/p>\n<p>Dito isto, vamos dar uma olhada em como acelerar as consultas ao WordPress.<\/p>\n<h2 id=\"wp-query\">WP_Query &#8211; Porque n\u00e3o cont\u00e1vamos as filas<\/h2>\n<p>Podemos consultar o banco de dados com a fun\u00e7\u00e3o <code>get_posts<\/code>, que retorna um array de posts, ou uma nova inst\u00e2ncia do objeto <code>WP_Query<\/code>. Em ambos os casos, podemos determinar os resultados das consultas, definindo valores apropriados para vari\u00e1veis espec\u00edficas.<\/p>\n<p>Vamos come\u00e7ar com um exemplo que mostra um Loop comum como ele normalmente aparece em um arquivo modelo:<\/p>\n<pre>\/\/ 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<\/pre>\n<p><code>$args<\/code> \u00e9 um conjunto de pares chave\/valor. Estes pares s\u00e3o nomeados vars de consulta, e determinam ou afetam a consulta SQL real.<br \/>\nAo consultar a base de dados a partir de um plugin, podemos preferir usar o filtro <code>pre_get_posts<\/code>, como mostrado no exemplo a seguir:<\/p>\n<pre>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<\/pre>\n<p>Uma coisa importante a notar aqui \u00e9 que o objeto <code>$query<\/code> \u00e9 passado por refer\u00eancia, n\u00e3o por valor, o que significa que os argumentos da consulta est\u00e3o apenas afetando uma inst\u00e2ncia <code>$query<\/code> existente.<\/p>\n<p>O m\u00e9todo <code>set<\/code> adiciona uma nova query var \u00e0 especifica\u00e7\u00e3o da consulta e for\u00e7ar\u00e1 o WordPress a recuperar todas as postagens da categoria <code>webdev<\/code>. Esta \u00e9 a consulta resultante:<\/p>\n<pre>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<\/pre>\n<p>Neste exemplo, o valor <code>LIMIT<\/code> foi definido pelo usu\u00e1rio administrador em Op\u00e7\u00f5es de Leitura, como mostrado na imagem abaixo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5454 size-full\" src=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2016\/06\/reading_settings.png\" alt=\"Reading Settings\" width=\"472\" height=\"299\"><\/p>\n<p>Em consultas personalizadas podemos definir o n\u00famero de linhas a serem recuperadas do banco de dados gra\u00e7as ao <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query#Pagination_Parameters\">par\u00e2metro de pagina\u00e7\u00e3o<\/a> <code>posts_per_page<\/code>.<\/p>\n<p>A op\u00e7\u00e3o <code>SQL_CALC_FOUND_ROWS<\/code> for\u00e7a a consulta a contar o n\u00famero de linhas encontradas. Este n\u00famero ser\u00e1 retornado pela fun\u00e7\u00e3o <code>FOUND_ROWS()<\/code> SQL, como mostrado no exemplo a seguir:<\/p>\n<pre>SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name\nWHERE id &gt; 100 LIMIT 10;\n\nSELECT FOUND_ROWS();\n<\/pre>\n<p>Infelizmente, <code>SQL_CALC_FOUND_ROWS<\/code> pode retardar significativamente o tempo de execu\u00e7\u00e3o da consulta.<br \/>\nA boa not\u00edcia \u00e9 que podemos for\u00e7ar o WordPress a remover a op\u00e7\u00e3o que fornece a vari\u00e1vel <code>no_found_rows<\/code><br \/>\nsubutilizada (e n\u00e3o documentada).<\/p>\n<p>Se <code>SQL_CALC_FOUND_ROWS<\/code> for omitido, <code>FOUND_ROWS()<\/code> retorna o n\u00famero de linhas at\u00e9 o valor de <code>LIMIT<\/code> (mais sobre este t\u00f3pico na <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/information-functions.html#function_found-rows\">documenta\u00e7\u00e3o do MySQL<\/a>).<\/p>\n<p>Em uma instala\u00e7\u00e3o do WordPress com poucas centenas de posts, a seguinte meta consulta demorou 0,0107 segundos:<\/p>\n<pre>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<\/pre>\n<p>Removendo <code>SQL_CALC_FOUND_ROWS<\/code> definindo <code>no_found_rows<\/code> para false, a mesma consulta levou 0,0006 segundos.<\/p>\n<figure id=\"attachment_5455\" aria-describedby=\"caption-attachment-5455\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5455 size-full\" src=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2016\/06\/queries.png\" alt=\"Gra\u00e7as ao plugin Query Monitor, podemos facilmente comparar duas consultas com e sem a op\u00e7\u00e3o SQL_CALC_FOUND_ROWS\" width=\"800\" height=\"348\"><figcaption id=\"caption-attachment-5455\" class=\"wp-caption-text\">Gra\u00e7as ao plugin Query Monitor, podemos facilmente comparar duas consultas com e sem a op\u00e7\u00e3o SQL_CALC_FOUND_ROWS<\/figcaption><\/figure>\n<p>Quando a tabela <code>wp_post<\/code> cont\u00e9m milhares de linhas, a execu\u00e7\u00e3o da consulta pode levar segundos.<br \/>\n<strong>Quando n\u00e3o precisamos de pagina\u00e7\u00e3o, nunca devemos definir <\/strong><code><strong>no_found_rows<\/strong><\/code><strong> para <\/strong><code><strong>true<\/strong><\/code><strong>, fazendo a consulta correr dramaticamente mais r\u00e1pido.<\/strong><\/p>\n<h2 id=\"cache-or-not-cache\">Cache ou N\u00e3o Cache<\/h2>\n<p>O WordPress fornece um sistema de cache integrado fora da caixa. Embora o cache geralmente melhore a velocidade de carregamento da p\u00e1gina, pode fazer com que algumas consultas extras sejam feitas contra a base de dados. Al\u00e9m disso, sempre que uma consulta \u00e9 executada, um monte de dados desnecess\u00e1rios pode ser solicitado.<\/p>\n<p>Felizmente, o WordPress nos permite desativar o cache fornecendo tr\u00eas <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query#Caching_Parameters\">par\u00e2metros espec\u00edficos<\/a>:<\/p>\n<ul>\n<li><strong>cache_results<\/strong>: Se para guardar informa\u00e7\u00f5es. Por omiss\u00e3o, \u00e9 verdade.<\/li>\n<li><strong>update_post_meta_cache<\/strong>: Se deve atualizar a meta cache posterior. Por omiss\u00e3o, \u00e9 verdade.<\/li>\n<li><strong>update_post_term_cache<\/strong>: Se deve atualizar a cache p\u00f3s-termo. Por omiss\u00e3o, \u00e9 verdade.<\/li>\n<\/ul>\n<p>Se um sistema de cache persistente for ativado, como o <a href=\"https:\/\/memcached.org\/\">Memcached<\/a>, n\u00e3o temos que nos preocupar com os par\u00e2metros de cache, porque o WordPress ir\u00e1 definir estes argumentos como falsos por padr\u00e3o.<\/p>\n<p>Em qualquer outra situa\u00e7\u00e3o, podemos construir uma consulta mais r\u00e1pida com o seguinte c\u00f3digo:<\/p>\n<pre>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<\/pre>\n<p><strong>Quando um sistema de cache permanente n\u00e3o est\u00e1 dispon\u00edvel, as consultas que retornam pequenas quantidades de dados n\u00e3o devem ser colocadas em cache.<\/strong><\/p>\n<h2 id=\"returned-fields\">Campos devolvidos<\/h2>\n<p>Como regra geral, nunca devemos consultar a base de dados para campos desnecess\u00e1rios. A classe <code>WP_Query<\/code> fornece o argumento campos, que permite limitar os campos devolvidos aos IDs ou campos <code>'id=&gt;parent'<\/code>. A <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/4.5.2\/src\/wp-includes\/query.php#L1494\">documenta\u00e7\u00e3o do<\/a> arquivo fonte define o argumento dos campos da seguinte forma:<\/p>\n<blockquote><p>Quais os campos a devolver. Campo \u00fanico ou todos os campos (string), ou array de campos. id=&gt;parent&#8217; usa &#8216;id&#8217; e &#8216;post_parent&#8217;. Predefinir todos os campos. Aceita &#8216;ids&#8217;, &#8216;id=&gt;parente&#8217;.<\/p><\/blockquote>\n<p>A vari\u00e1vel campos admite <code>'ids'<\/code> e <code>'id=&gt;parent'<\/code>, e o valor padr\u00e3o \u00e9 * (qualquer outro valor), embora voc\u00ea note que por padr\u00e3o o WordPress ir\u00e1 definir o valor como ids em v\u00e1rias consultas.<br \/>\nFinalmente, podemos optimizar a nossa primeira consulta:<\/p>\n<pre>&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?&gt;\n<\/pre>\n<p><strong>Quando n\u00e3o s\u00e3o necess\u00e1rios campos espec\u00edficos, limite os campos devolvidos a IDs.<\/strong><\/p>\n<h2>Resumo<\/h2>\n<p>Considerando a velocidade de consulta pode n\u00e3o trazer grandes vantagens para sites pequenos com algumas centenas de posts. Se voc\u00ea quer se preparar para o crescimento ou est\u00e1 rodando um grande site com consultas caras, voc\u00ea deve otimizar suas consultas ao WordPress. Consultas ineficientes podem reduzir drasticamente o n\u00famero de p\u00e1ginas, mas com alguns ajustes simples voc\u00ea pode acelerar consideravelmente o seu site.<\/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":34163,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[44,30],"topic":[1026],"class_list":["post-34159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-webdev","tag-wordpress","topic-desenvolvimento-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>Construindo Consultas Eficientes do WordPress com o WP_Query<\/title>\n<meta name=\"description\" content=\"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.\" \/>\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\/pt\/blog\/wp-query\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construindo Consultas Eficientes do WordPress com o WP_Query\" \/>\n<meta property=\"og:description\" content=\"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-31T10:37:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-18T09:51:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/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=\"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Construindo Consultas Eficientes do WordPress com o WP_Query\",\"datePublished\":\"2020-01-31T10:37:12+00:00\",\"dateModified\":\"2025-02-18T09:51:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/\"},\"wordCount\":1201,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg\",\"keywords\":[\"webdev\",\"WordPress\"],\"articleSection\":[\"Desenvolvimento WordPress\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/\",\"name\":\"Construindo Consultas Eficientes do WordPress com o WP_Query\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg\",\"datePublished\":\"2020-01-31T10:37:12+00:00\",\"dateModified\":\"2025-02-18T09:51:58+00:00\",\"description\":\"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg\",\"width\":1600,\"height\":998,\"caption\":\"Construindo Consultas Eficientes do WordPress com o WP_Query\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desenvolvimento WordPress\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/desenvolvimento-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Construindo Consultas Eficientes do WordPress com o WP_Query\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construindo Consultas Eficientes do WordPress com o WP_Query","description":"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.","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\/pt\/blog\/wp-query\/","og_locale":"pt_PT","og_type":"article","og_title":"Construindo Consultas Eficientes do WordPress com o WP_Query","og_description":"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.","og_url":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2020-01-31T10:37:12+00:00","article_modified_time":"2025-02-18T09:51:58+00:00","og_image":[{"width":1600,"height":998,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg","type":"image\/jpeg"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg","twitter_creator":"@carlodaniele","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Carlo Daniele","Tempo estimado de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Construindo Consultas Eficientes do WordPress com o WP_Query","datePublished":"2020-01-31T10:37:12+00:00","dateModified":"2025-02-18T09:51:58+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/"},"wordCount":1201,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg","keywords":["webdev","WordPress"],"articleSection":["Desenvolvimento WordPress"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/wp-query\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/","url":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/","name":"Construindo Consultas Eficientes do WordPress com o WP_Query","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg","datePublished":"2020-01-31T10:37:12+00:00","dateModified":"2025-02-18T09:51:58+00:00","description":"Neste tutorial, vamos mostrar-lhe como utilizar a classe WP_Query especificamente para optimizar as consultas SQL, reduzindo o tempo de execu\u00e7\u00e3o e o consumo de recursos.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/wp-query\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2020\/01\/wp_query.jpg","width":1600,"height":998,"caption":"Construindo Consultas Eficientes do WordPress com o WP_Query"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/wp-query\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Desenvolvimento WordPress","item":"https:\/\/kinsta.com\/pt\/topicos\/desenvolvimento-wordpress\/"},{"@type":"ListItem","position":3,"name":"Construindo Consultas Eficientes do WordPress com o WP_Query"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/34159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=34159"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/34159\/revisions"}],"predecessor-version":[{"id":35182,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/34159\/revisions\/35182"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/34159\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/34159\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/34159\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/34159\/translations\/es"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/34159\/translations\/pt"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/34159\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/34163"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=34159"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=34159"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=34159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}