Digamos que você queira fazer algo único com a forma como os artigos são recuperados e exibidos em uma página específica do seu site. Talvez você queira ter várias consultas, uma para artigos em destaque e outra para artigos recentes. Ou talvez você queira excluir certas categorias de artigos no seu blog.

Qualquer que seja seu objetivo, você decide criar um modelo de página personalizado com uma consulta que faça algo um pouco diferente. No entanto, antes de começar a codificar, você decide: qual ferramenta de consulta do WordPress você deve usar?

O WordPress oferece vários tipos de consultas diferentes: WP_query, query_posts (), get_posts (), get_pages ()e pre_get_posts. Em muitos casos, você pode usar mais de uma dessas ferramentas para obter os resultados desejados. No entanto, a questão permanece: qual você deve usar?

Vamos falar neste tutorial sobre algumas funções que você pode usar no WordPress.

WP_Query

« WP_Query A turma está por trás (quase) todas as solicitações do WordPress. Quando você carrega uma página ou artigo no WordPress, um objeto " WP_query "," $ Query "é criado e extrai os dados de artigos ou páginas relevantes. Na realidade, " WP_Query Que o mecanismo que alimenta mais consultas no WordPress.

Você usa " WP_Query Sem nem perceber. Quando você carrega um URL, o kernel do WordPress cria uma consulta no banco de dados com a classe " WP_Query "Com base no URL e nos parâmetros lá. Então, se você for para uma página com um URL como "http://example.com/categorie/wordpress" o WordPress criará um objeto " WP_Query Que localiza todos os artigos na categoria "WordPress" e carrega todos os artigos.

« WP_Query »Alimenta consultas para artigos e páginas padrão construídas no WordPress e também pode ser usado para construir consultas personalizadas. Isso é feito com um pouco de "programação orientada a objetos". Tudo que você precisa fazer é criar uma nova variável e declará-la como uma nova instância da classe " WP_Query Assim:

<?php
$args = array(
  //Define os argumentos para a nova consulta
);

$myQuery = new WP_Query( $args );

Obviamente, você precisa fazer algo com os resultados da consulta. No entanto, esse algo está além do escopo deste tutorial.

Como desenvolvedor do WordPress, você provavelmente usará " WP_Query Mais frequentemente do que qualquer outra função. Ele é versátil e poderoso. Embora algumas das outras consultas abordadas neste tutorial possam economizar seu tempo, em geral você não pode errar com " WP_Query Para suas necessidades de escrita de consulta personalizada.

A única exceção a essa regra é quando tudo que você precisa fazer é filtrar os resultados da consulta padrão. Nesse caso, " pre_get_posts É a ferramenta que você deve usar. Então, vamos dar uma olhada neste último.

pre_get_posts

« pre_get_posts É um gancho, não uma função. Em vez de consultar o banco de dados novamente, " pre_get_posts "Permite que você modifique o objeto" $ query "antes que o banco de dados seja consultado, para filtrar com eficiência os resultados retornados pela consulta padrão.

Na maioria dos casos ", pre_get_posts É emparelhado com tags condicionais para filtrar os resultados da consulta em situações específicas. Por exemplo, você pode usar " pre_get_posts Para retornar um número diferente de artigos à página inicial do site. Em essência, se você quiser executar a consulta padrão, mas modificá-la de alguma forma, " pre_get_posts Será sua ferramenta de trabalho.

Existem alguns casos em que " pre_get_posts Não trabalhe e não deve ser usado. o WordPress Codex sugere dois desses casos:

O filtro pre_get_posts Não deve ser usado para modificar a consulta no modelo para uma única página, pois isso interferirá nas propriedades já definidas por " parse_query () ".

O filtro pre_get_posts Não funcionará se adicionado a um arquivo de modelo como 'archive.php', porque esses arquivos são carregados após a consulta principal já ter sido executada.

Para onde isso nos leva? Isso significa que " pre_get_posts "É uma ótima opção para modificar solicitações de carregamento de postagem no loop principal da página inicial, página do blog e páginas individuais, como" page.php "e" single.php ".

No entanto, às vezes, filtrar a consulta padrão não é suficiente. Talvez você queira usar várias consultas do WordPress ou manipular os resultados de uma forma que " pre_get_posts Não vai ajudar. Nesse caso, você pode ir para " WP_Query Ou use outras opções adicionais.

query_posts ()

Se você está procurando Tutoriais do WordPress, você encontrará muitos tutoriais recomendando o uso de " query_posts () ". No entanto, os tutoriais modernos são universalmente contra esse uso. Aqui está o porquê.

A função query_posts () "Substitui o objeto de consulta principal," $ query ", que é criado e usado pelo loop padrão gerenciado pelo núcleo do WordPress. Ele faz isso criando uma nova instância " WP_Query "E atribui à variável global" objeto ".

Isso pode sugerir que " query_posts () É realmente poderoso e útil. No entanto, brincar com o loop básico significa que " query_posts () Apresenta grandes desvantagens e, portanto, deve ser evitado.

O WordPress Codex oficial fornece várias razões para usar " query_posts () Deve ser evitado na grande maioria dos casos. Os principais motivos apresentados incluem:

Usar " query_posts () "Pode diminuir consideravelmente o tempo de carregamento.

Desde " query_posts () »Substitui os dados de consulta padrão, ele pode causar vários problemas com a paginação e causando estragos nas páginas que fazem uso de várias consultas.

Em suma, o uso de " query_posts () É uma proposição perigosa. De fato, a documentação oficial abre com a ressalva: Esta função substituirá completamente a consulta principal e não se destina ao uso de plugins ou temas. Sua abordagem simplista demais para modificar a consulta principal pode ser problemática e deve ser evitada o máximo possível.

Em outras palavras, se você está codificando um tema ou um plugin, que é exatamente o que a grande maioria de nós está fazendo, você deve evitar o uso de " query_posts () ". Em vez disso, crie um novo objeto " WP_Query »Ou use« get_posts () "," get_pages () "Ou o" pre_get_posts ".

Certamente não é tudo, existem outras funções que consideraremos em um tutorial futuro. Até lá, desejo-lhe uma boa codificação.