Consultas personalizadas do WordPress – vários loops

Publicados: 2021-01-29

Na maioria dos casos, ao criar um site com o WordPress, o tema que você ativar exibirá, por padrão, uma página inicial que lista suas postagens recentes, a menos que você opte por exibir uma página estática nas opções de administração em Configurações> Leitura. Mas e se você quisesse exibir uma variedade diferente de conteúdo que não fosse uma página estática nem suas postagens mais recentes? Felizmente, isso é possível usando o WordPress Multiple Loops.

Vamos ver como isso pode ser feito!

Use vários loops na sua página inicial do WordPress

Antes de começar, vale a pena notar que você deve realizar essas modificações em seu próprio site usando um tema filho, pois estaremos editando os arquivos de modelo do seu tema. Se você não fizer isso, perderá todas as modificações que fizer na próxima vez que atualizar seu tema. Você pode descobrir mais sobre temas infantis aqui.

Não importa o tema que você está usando, o arquivo PHP correspondente para a página inicial incluirá um loop padrão que exibe alguns Posts (na maioria dos casos, serão posts publicados recentemente). No tema Twenty Twenty, por exemplo, você encontrará o código que controla isso dentro do arquivo index.php na linha 79.

 if ( have_posts() ) { $i = 0; while ( have_posts() ) { $i++; if ( $i > 1 ) { echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />'; } the_post(); get_template_part( 'template-parts/content', get_post_type() ); } }

Em um loop padrão como este, duas variáveis ​​globais importantes são usadas:

  • O $wp_query que é um objeto de classe WP_Query e contém um resultado de consulta de banco de dados WP
  • O $post que é o objeto de classe WP_Post atual.

No trecho de código acima, primeiro verificamos se há alguma postagem para mostrar com a função global have_posts() e, em caso afirmativo, iteramos essas postagens dentro de um loop while. A função global the_post() é aquela que itera através de posts dizendo ao WordPress para ir para o próximo post.

Se você quiser ver essas funções e classes em detalhes, você pode encontrá-las no arquivo wp-includes/class-wp-query.php .

Para os propósitos do nosso exemplo, ativamos o tema Twenty Twenty e, em seguida, criamos 6 Posts em uma categoria chamada “Categoria 1” e 5 Posts de Serviço em uma categoria chamada “Serviços”.

Para facilitar as coisas, manteremos o código do loop o mais simples possível, exibindo apenas uma lista dos títulos dos Posts.

 if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h3 class="entry-title">', '</h3>' ); } }

Isso significa que em nossa página inicial veremos algo assim:

Introdução Personalizando a saída da nossa página inicial

Como vimos na captura de tela acima, se visitarmos nossa 'página inicial', veremos as 10 postagens mais recentes, independentemente das categorias atribuídas a elas.

Agora continuaremos criando nosso próprio modelo de página inicial personalizado, onde incluiremos uma saída personalizada.

Para fazer isso, crie um arquivo chamado custom-homepage.php e salve-o na pasta do seu tema. Adicione o seguinte código a esta página:

 <?php /* * Template Name: My custom homepage template */ get_header(); if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h4 class="example"></h4>' ); } } get_footer();

Em seguida, vá para o administrador do WordPress e crie uma página chamada 'Minha página inicial' e selecione 'Meu modelo de página inicial personalizado' no menu suspenso Modelo como modelo.

Então, para tornar esta a página inicial padrão, você precisará selecioná-la no menu Configurações (Configurações> Leitura> Uma página estática).

Neste ponto, se você der uma olhada em sua página inicial, deverá ver apenas o título da página quando visualizado no front-end do seu site.

Agora que temos essa configuração, vamos adicionar algumas consultas ao nosso modelo 'Meu modelo de página inicial personalizado'.

Adicionando consultas personalizadas

Nosso objetivo neste exemplo será exibir algumas de nossas postagens mais recentes de todas as categorias. Abaixo disso, exibiremos postagens de um tipo de postagem personalizado chamado 'livros'. Se você não sabe como configurar tipos de postagem personalizados, o checkout é o artigo 'Criar tipos de postagem personalizados do WordPress manualmente'. Incluir um tipo de postagem personalizado é, obviamente, totalmente opcional. Se você não quiser fazer isso, basta pular as etapas em que nos referimos a esse tipo de postagem.

Vamos começar substituindo o loop atual (encontrado em index.php por volta da linha 79) por este:

 $args = array( 'posts_per_page' => 8, 'orderby', 'date', 'order', 'DESC' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Este loop significa que sua página inicial agora exibirá suas 8 postagens mais recentes (como mostrado abaixo):

Então, se você quiser incluir o tipo de postagem personalizado 'livros' (ou qualquer outro tipo de postagem personalizado para esse assunto), adicionaremos um segundo loop para as postagens do livro logo abaixo do primeiro loop assim:

 echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', 'posts_per_page' => 8 ); $query = new WP_Query( $args ); while ($query->have_posts()) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Vá para o front-end do seu site e atualize a página para confirmar que tudo está funcionando conforme o esperado.

Quebrar uma consulta personalizada em partes

Pode ser útil dividir uma consulta personalizada em partes. Uma razão para fazer isso seria se você quisesse 'interromper' a primeira consulta mostrando postagens de outra categoria ou tipo de postagem antes de retomar o loop inicial. Isso é útil se, por exemplo, você quiser mostrar as postagens mais recentes de uma categoria e depois mostrar outro conteúdo antes de finalmente concluir com mais 'postagens mais recentes' para finalizar a página.

Vamos pular para isso. Para começar, exclua o conteúdo do arquivo custom-homepage.php que usamos antes e adicione o código abaixo.

 <?php /* * Template Name: My custom homepage template */ get_header(); //////////// // Services Posts loop echo '<h4>Services</h4>'; $args = array( 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Books Posts in between echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', ); $books = new WP_Query( $args ); while ( $books->have_posts() ) : $books->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Resume Services Posts loop echo '<h4>More Services</h4>'; $args = array( 'offset' => '3', 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; //////////// get_footer();

No primeiro loop, recuperamos 3 posts da categoria Serviços. Para retomar as postagens da categoria Serviços no terceiro loop, evitando duplicatas, definimos um deslocamento => 3 . Isso significaria que veríamos o seguinte:

Claro que você pode alterar o valor do deslocamento para qualquer número que desejar.

Adicionar postagens personalizadas à consulta de postagens mais recentes

E se quisermos incluir as postagens do livro nas postagens mais recentes da página inicial? O loop padrão, por padrão, não inclui postagens personalizadas. Aqui está como podemos corrigir isso.

Para esta seção, definiremos as configurações de leitura da página inicial para 'Suas últimas postagens'.

A rota a seguir aqui é o uso do gancho pre_get_posts . Este gancho é introduzido no arquivo wp-includes/class-wp-query.php e é usado para personalizar o objeto $query e o Loop principal do WordPress como você achar melhor. Ele é executado após a criação do objeto de variável de consulta, mas antes da execução da consulta real.

Abra o arquivo functions.php do seu tema ativo e insira o seguinte trecho de código no final:

 function homepage_add_cpt( $query ) { if ( $query->is_main_query() && is_home() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } add_action( 'pre_get_posts', 'homepage_add_cpt' );

O que esse código faz na condição if é garantir que as modificações sejam aplicadas na página inicial apenas enquanto a consulta principal estiver em execução.

Se você agora visitar sua página inicial, notará que nas postagens mais recentes, as postagens personalizadas do 'livro' também estão incluídas.

Conclusão

Praticamente sem exceção, tudo o que você precisa alcançar em termos de conteúdo para sua página inicial do WordPress é possível. Como mostramos aqui, usar o WordPress Multiple Loops é uma maneira poderosa de personalizar a saída que aparece em sua página inicial. Nossa abordagem aqui é apenas uma de muitas. O WordPress oferece níveis incríveis de controle sobre a saída que aparece em seu site. Experimente as ferramentas que eles fornecem para alcançar o que você deseja!