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
?>
view raw functions.php hosted with ❤ by GitHub

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.

Screen Shot 2016-03-19 at 10.38.53 PM

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.”

Screen Shot 2016-03-19 at 10.40.42 PM

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).

Screen Shot 2016-03-19 at 10.49.33 PM

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”.

Screen Shot 2016-03-19 at 10.51.46 PM

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.

Screen Shot 2016-03-19 at 11.07.12 PM

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.

Screen Shot 2016-03-21 at 5.56.52 PM

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:

Criar listagem de post por bloco de categoria

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.

César Ribeiro
Written by

Hi, my name’s Cesar H. Ribeiro, I’m Brazilian and I live in São Paulo country town. I’ve been working with Web Development since 2006, I’m Web Developer Freelancer, my main specialty is deploying custom Web Sites using the WordPress platform with base, transforming PSD/Layouts for Custom Themes. In feel years with Developer Freelancer, I worked with many agencies around the world like: Brazil, Australia, USA, Germany and Austria.

Related Posts