Olá pessoal, hoje eu venho aqui para mostrar para vocês como Listar Posts em Grupos filtrados por Categorias, as vezes quando a demanda de post’s do site são poucas ou mesmo por uma necessidade específica do propria cliente, esse formato de listagem é a melhor opção.
Então por causa dessas necessidades eu desenvolvi um loop personalizado, vocês podem aplicar essa mesma aplicação para a categoria padrão do proprio WordPress ou utilizar para uma taxonomia personalizada.
Para esse modelo, eu tive que utilizar duas fuções padrões do proprio WordPress para realizar essas verificações, que são: get_object_taxonomies() e get_terms().
Abaixo, eu vou deixar o modelo que eu desenvolvi e que vamos utilizar nesse tutorial:
<?php | |
$post_type = 'post'; | |
// Get all the taxonomies for this post type | |
$taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) ); | |
foreach( $taxonomies as $taxonomy ) : | |
// Gets every "category" (term) in this taxonomy to get the respective posts | |
$terms = get_terms( $taxonomy, | |
array( | |
'orderby' => 'name', | |
'order' => 'ASC', | |
'hide_empty' => '1' | |
) | |
); | |
foreach( $terms as $term ) : | |
// WP_Query arguments | |
$args = array ( | |
'post_type' => $post_type, | |
'posts_per_page' => '-1', | |
'tax_query' => array( | |
array( | |
/** | |
* For get a specific taxanomy use | |
*'taxonomy' => 'category', | |
*/ | |
'taxonomy' => $taxonomy, | |
'field' => 'slug', | |
'terms' => $term->slug, | |
) | |
) | |
); | |
// The Query | |
$query = new WP_Query( $args ); | |
// The Loop | |
if( $query->have_posts() ) : ?> | |
<dl id="box-loop-list-<?php echo $term->slug ;?>"> | |
<dt><h3><?php echo $term->name ;?></h3></dt> | |
<?php while( $query->have_posts() ) : $query->the_post(); ?> | |
<dd> | |
<?php if(has_post_thumbnail()) { ?> | |
<figure><?php the_post_thumbnail('thumbnail');?></figure> | |
<?php } ?> | |
<a href="<?php get_the_permalink();?>" title="<?php the_title();?>."><?php the_title();?></a> | |
</dd> | |
<?php endwhile; ?> | |
</dl><?php | |
endif; | |
endforeach; | |
// End foreach term | |
endforeach; | |
// End foreach taxonomy | |
?> |
Agora eu vou detalhar para você, o que foi feito em cada linha, para simplificar para vocês:
De início eu criei um variável chamada $post_type aplicando o valor ‘post’, eu apliquei dessa maneira somente para simplificar nesse tutorial, assim ficará mais fácil a visualização do mesmo.
Dentro do meu primeiro foreach eu vou determinar os primeiros parâmetros para o get_terms(), que vão ser os valores que estão vindo da nossa função get_object_taxonomies().
A forma de ordenação orderby e order eu dexei listando de forma Ascendente e por Nome, também declarei que o “hide_empty = 1” isso significa que vai listar somente categorias com post’s cadastrados, porque se eu passar o valor “hide_empty = 0” ele vai listar todas as categorias, até mesmo as que estão “vazias”.
“Para mais especificações é só acessar o link que eu aplique nas funções.”
Agora já com os termos da categoria/taxonomia estão declaradas, vamos para a parte do loop dos posts. Mas antes, como vocês podem ver eu que apliquei outro um foreach, ele vai ser o responsável pela criação dos grupos(blocos).
Vamos criar os argumentos da nossa Array para a criação do WP_Query, dentro dela vamos aplicar nossa variável $post_type que contém o valor “post” e a quantidade desejada de posts que vão ser exibidos dentro de cada grupo.
Eu apliquei o valor “posts_per_page => -1” isso significa que ele vai listar todos os posts cadastrados dentro categoria, mas para fixar um outro valor desejado é só alterar o mesmo: Exemplo “posts_per_page => 6”.
Essa é a mais importante aonde iremos aplicar os argumentos dentro de “tax_query”, ela a responsável pela “filtragem” dos posts+categoria. Eu estou pegando o valor de $taxonomy e comparando o slug da minha categoria se é a mesma e assim aplicando dentro do meu grupo correto.
Pronto!!! Agora estamos quase finalizando o nosso processo, então vamos para a parte final do tutorial, que é a criação do nosso loop que vai gerar nossos post’s.
Abaixo, eu deixei um loop bem básico para facilitar, mas essa parte é totalmente personalizada para cada necessidade, aqui eu vou somente criar um grupo com alguns conteúdos.
Legenda de cada parte do loop:
- DL – ID padrão box-loop-list- junto com a string $term->slug; assim no frontend ficará mais simples a visualização e também a aplicação de algum estilo personalizado que você desejar;
- DT – Apliquei uma tag H3 junto com a string $term->name; para que o nome da categoria fique sempre acima do bloco de post’s;
- DD – Fiz uma verificação se existe ou não um thumbnail cadastrado no meu post e também terá o título junto com o link do post;
Abaixo, eu vou deixar para vocês como será exibido no front-end:
Espero que vocês tenham gostado desse tutorial e até breve 🙂
Por favor, se você gostou deixe seu like e também se possível compartilhe.