Evitando posts repetidos
Quando começamos a trabalhar com Múltiplos Loops, um detalhe importante, muito bem lembrado pelo David, é quanto aos posts repetidos. É possível que os diferentes Loops tenham algum post em comum e esse post acabe sendo duplicado em algum momento.
Para evitar que isso aconteça, existe uma solução simples, a instrução ‘continue‘ do php. Essa instrução pula a iteração atual dentro de uma estrutura de loop, no nosso caso o ‘while‘. Mas antes precisamos saber quais iterações devem ser puladas, portanto criamos um array para armazenar o ‘id’ dos posts que já foram apresentados e em seguida filtramos esses posts. Com isso teremos:
<?php $usados = array(); ?> <?php $noticias = new WP_Query("category_name=noticias&showposts=3"); ?> <?php while($noticias->have_posts()) : $noticias->the_post(); ?> <?php array_push($useds, $post->ID); ?> trecho da interface a ser repetido... <?php endwhile; ?> <?php $artigos = new WP_Query("category_name=artigosamp;showposts=3"); ?> <?php while($artigos->have_posts()) : $artigos->the_post(); ?> <?php if(in_array($post->ID, $usados)) continue; ?> <?php array_push($useds, $post->ID); ?> trecho da interface a ser repetido... <?php endwhile; ?>
Explicando os trechos destacados: antes de tudo, criamos um array de nome $usados. No primeiro loop, a cada iteração, adicionamos o id do post da vez no array. E finalmente, nos loops consecutivos, verificamos se o post da vez já foi usado antes de carregar o seu conteúdo.
No bom programês, seria algo como:
<?php $usados = lista(); ?> <?php $noticias = consulte_posts("quantidade_de_posts=3 e categoria_de_nome=noticias"); ?> <?php enquanto(houverem_posts_em_noticias()) : carregue_o_post_da_vez(); ?> <?php adicionar_na_lista_dos_usados($id_do_post); ?> trecho da interface a ser repetido... <?php verifique_se_ainda_há_posts; ?> <?php $artigos = consulte_posts("quantidade_de_posts=3 e categoria_de_nome=artigos"); ?> <?php enquanto(houverem_posts_em_artigos()) : carregue_o_post_da_vez(); ?> <?php se(na_lista_dos_usados_houver($id_do_post)) pular_iteração; ?> <?php adicionar_na_lista_dos_usados($id_do_post); ?> trecho da interface a ser repetido... <?php verifique_se_ainda_há_posts; ?>
Caso seu template tenha mais de dois loops, basta repetir a estrutura do segundo loop.
Qualquer dúvida é só avisar.
Personalização

