{"id":233681,"date":"2023-02-19T15:34:00","date_gmt":"2023-02-19T12:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233681"},"modified":"2022-11-11T08:50:17","modified_gmt":"2022-11-11T05:50:17","slug":"guia-modificar-a-consulta-global-do-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/guia-modificar-a-consulta-global-do-wordpress\/","title":{"rendered":"Guia: Modificar a consulta global do WordPress"},"content":{"rendered":"\n<p>Em alguns casos, pode ser necess\u00e1rio modificar a consulta global de postagem que o WordPress est\u00e1 realizando em qualquer p\u00e1gina que voc\u00ea estiver visitando \u2013 tanto admin quanto frontend. Neste guia, veremos qual gancho usar e como alterar os argumentos da consulta ao seu gosto.<\/p>\n<h2>Qual gancho usar<\/h2>\n<p>Primeiro voc\u00ea precisa saber em qual gancho adicionar seu c\u00f3digo. Precisamos de um gancho que aconte\u00e7a logo ap\u00f3s o WordPress configurar todos os argumentos, mas antes que a consulta real seja executada. Para isso usamos a a\u00e7\u00e3o <code>pre_get_posts<\/code>.<\/p>\n<p>Neste gancho voc\u00ea obt\u00e9m um par\u00e2metro; que \u00e9 um <code>WP_Query<\/code>objeto com o qual o WordPress executar\u00e1 a consulta posteriormente. Voc\u00ea faz altera\u00e7\u00f5es no objeto \u2013 mas n\u00e3o precisa devolv\u00ea-lo, pois o WordPress executar\u00e1 a consulta com o objeto modificado.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    \/\/ Add your code here\n});<\/code><\/pre>\n<p>Modificar a consulta provavelmente requer que voc\u00ea use algumas tags condicionais para especificar os casos em que deseja alter\u00e1-la. Por exemplo, voc\u00ea pode querer segmentar a consulta apenas em resultados de pesquisa ou exibi\u00e7\u00f5es de categoria.<\/p>\n<h2>Tags condicionais<\/h2>\n<p>O WordPress tem v\u00e1rias <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tags condicionais<\/a> que voc\u00ea pode usar para especificar em quais casos deseja adicionar seu c\u00f3digo. Uma tag condicional \u00e9 simplesmente uma fun\u00e7\u00e3o que retorna true ou false dependendo do estado em que o WordPress est\u00e1. Exemplos de tags condicionais comuns s\u00e3o <code>is_admin()<\/code>para verificar se estamos atualmente em admin ou frontend, <code>is_singular()<\/code>se estamos em um \u00fanico post ou p\u00e1gina no frontend e <code>is_search()<\/code>se estivermos na p\u00e1gina de resultados da pesquisa.<\/p>\n<p>Tenha em mente que o hook <code>pre_get_posts<\/code>\u00e9 executado tanto para admin quanto para frontend. Se voc\u00ea deseja apenas afetar a consulta global no frontend, voc\u00ea precisa envolver seu c\u00f3digo dentro de um if-check na tag condicional <code>is_admin()<\/code>.<\/p>\n<h3>Observa\u00e7\u00e3o sobre tags condicionais em<code>pre_get_posts<\/code><\/h3>\n<p>As tags condicionais s\u00e3o \u00f3timas e tudo, mas h\u00e1 algumas coisas a serem lembradas ao us\u00e1-las dentro <code>pre_get_posts<\/code>de .<\/p>\n<p>Em primeiro lugar, voc\u00ea precisa se familiarizar com a tag <code>is_main_query()<\/code>. Na verdade, a a\u00e7\u00e3o <code>pre_get_posts<\/code>\u00e9 executada v\u00e1rias vezes para cada carregamento de p\u00e1gina. Por exemplo <code>pre_get_posts<\/code>, \u00e9 executado ao gerar cada menu (incluindo aqueles em widgets). Para modificar a consulta global real, por exemplo, postagens para um arquivo de categoria ou resultados de pesquisa, voc\u00ea precisa segmentar a &quot;consulta principal&quot; usando <code>is_main_query()<\/code>.<\/p>\n<p>Em segundo lugar, voc\u00ea precisa estar ciente dos casos em que precisa verificar as tags condicionais no objeto fornecido em vez de chamar a fun\u00e7\u00e3o &#8220;independentemente&quot;. Normalmente, quando voc\u00ea usa tags condicionais, voc\u00ea escreveria assim:<\/p>\n<pre><code>if (is_main_query()) {\n    \/\/ Do stuff\n}<\/code><\/pre>\n<p>No entanto, ao usar <code>pre_get_posts<\/code>, existem algumas tags condicionais que voc\u00ea precisa aplicar no objeto. Por exemplo:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if ($query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<p>Voc\u00ea deve sempre verificar <code>is_main_query()<\/code>o objeto fornecido em <code>pre_get_posts<\/code>. Leia a <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o de pre_get_posts<\/a> para obter mais informa\u00e7\u00f5es.<\/p>\n<p>Este \u00e9 um exemplo de verifica\u00e7\u00e3o se n\u00e3o estamos no admin e se estamos na consulta do post principal:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<h2>Alterar ou adicionar argumentos<\/h2>\n<p>Como estamos trabalhando com um <code>WP_Query<\/code>objeto, voc\u00ea pode consultar a <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o do WP_Query<\/a> para saber como construir seus argumentos para personalizar a consulta de posts. Lembre-se de que os argumentos j\u00e1 est\u00e3o preenchidos. Nesse caso, voc\u00ea precisa anexar ou alterar os valores existentes. Ou remova os que voc\u00ea deseja remover.<\/p>\n<p>Voc\u00ea usa a <code>set()<\/code>fun\u00e7\u00e3o no <code>WP_Query<\/code>objeto para definir argumentos. O m\u00e9todo aceita dois argumentos, a chave do argumento e, em segundo lugar, o valor. Por exemplo, definir o <code>posts_per_page<\/code>argumento seria feito assim:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        $query-&gt;set('posts_per_page', 20);\n    }\n});<\/code><\/pre>\n<p>Nos casos em que voc\u00ea deseja anexar ou alterar um argumento preexistente, normalmente faria isso salvando primeiro o argumento existente em uma vari\u00e1vel. Voc\u00ea pode usar o m\u00e9todo <code>get()<\/code>para isso. Em seguida, voc\u00ea modifica a vari\u00e1vel, anexando ou mesclando matrizes ou outros enfeites. E, finalmente, voc\u00ea usa <code>set()<\/code>para substituir a vari\u00e1vel modificada de volta no objeto de consulta. Eu recomendo usar <code>var_dump()<\/code>no objeto para ver o que ele cont\u00e9m, e essa tamb\u00e9m \u00e9 uma boa maneira de verificar se suas tags condicionais est\u00e3o corretas.<\/p>\n<p>Aqui est\u00e1 um exemplo r\u00e1pido de uso <code>get()<\/code>(simplesmente verificando se est\u00e1 vazio) e, se estiver, adicione seus pr\u00f3prios argumentos com <code>set()<\/code>.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        if (!$query-&gt;get('meta_query')) {\n            $query-&gt;set('meta_query', [\/ your arguments here \/]);\n        }\n    }\n});<\/code><\/pre>\n<h3>Observa\u00e7\u00e3o sobre tax_query<\/h3>\n<p>O WordPress tem subclasses separadas para lidar com a <code>WP_Tax_Query<\/code>parte taxonomia () dentro do <code>WP_Query<\/code>. Se voc\u00ea precisar fazer modifica\u00e7\u00f5es de consulta de taxonomia mais complexas, a <code>pre_get_posts<\/code>a\u00e7\u00e3o pode ser muito precoce. Alguns valores podem estar vazios porque s\u00e3o preenchidos posteriormente. Nesse caso, talvez seja melhor usar a a\u00e7\u00e3o <code>parse_tax_query<\/code>em vez de <code>pre_get_posts<\/code>. Leia a <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/parse_tax_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o para este gancho<\/a> para ver se isso \u00e9 para voc\u00ea.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Os argumentos que voc\u00ea adiciona ou altera dependem inteiramente do que voc\u00ea deseja fazer, mas agora voc\u00ea deve ter algumas ideias sobre estrat\u00e9gias para obter a consulta global. Se voc\u00ea precisar obter algumas informa\u00e7\u00f5es sobre o <code>WP_Query<\/code>objeto e como usar seus argumentos, meu post sobre <a href=\"http:\/\/awhitepixel.com\/blog\/how-to-query-posts-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como consultar postagens<\/a> pode ser interessante.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste post vamos aprender como modificar a consulta global do WordPress, qual gancho usar e como modificar os argumentos ao nosso gosto.<\/p>\n","protected":false},"author":1,"featured_media":152576,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,898,837,920,1110,920,837,846,846,867,867],"tags":[1170],"class_list":["post-233681","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-guia-para-iniciantes","category-outro","category-n-a","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=233681"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/233681\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/152576"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=233681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=233681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=233681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}