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.


