• Nenhum resultado encontrado

POSTAGENS EM DESTAQUE COM MÚLTIPLOS LOOPS

No documento Smashing Wordpress - Além Do Blog (páginas 68-70)

Outro uso comum para múltiplos loops é exibir uma postagem em destaque no topo da página. Isso permite que o tema de WordPress rompa com o layout do blog tradicional, e se tornou bastante popular, especialmente por conta dos temas que imitam revistas impressas. Para fazer isso, primeiro você precisa de um loop que busque uma única postagem –

naturalmente a mais recente – a partir da categoria Featured (em destaque). Em seguida, você precisa de um segundo loop que faça o de sempre, listando as postagens mais recentes de todas as categorias. Para fazer isso, você precisa armazenar a primeira consulta de loop dentro de seu próprio objeto de consulta. Faça isso chamando o objeto WP_Query e armazenando-o em uma nova consulta. WP_Query é a principal coisa enorme que faz o loop dar o melhor de si. Embora você não veja o objeto no loop básico, você na verdade o utiliza, por exemplo, com

have_posts() que em essência é $wp_query->have_posts(), você apenas não precisa escrever tudo isso o tempo todo. O objeto WP_Query é enorme e um pouco complicado, por isso brincar com ele requer uma habilidade de programação decente ou muita tentativa e erro. Como qualquer programador PHP experiente pode atestar, um pouco de cada geralmente resolve a questão. Muitas vezes, porém, você interage com o WP_Query usando várias template tags e conditional tags.

Lembre-se da template tag query_posts(). A descrição de uso diz que sua função é modifi car apenas o loop principal, por isso você não vai usar isso em seu novo loop. Em vez disso, passe as mesmas variáveis para WP_Query. O código é o seguinte:

<?php

$featured_query = new WP_Query('category_name=featured&showposts=1'); while ($featured_query->have_posts()) : $featured_query->the_post(); $do_not_duplicate = $post->ID;

?>

<!-- Estilo de sua postagem em destaque --> <?php endwhile; ?>

<!-- Coloque o que você quiser entre a postagem em destaque e a listagem de postagens normal-->

<?php

if (have_posts()) : while (have_posts()) : the_post();

if( $post->ID == $do_not_duplicate ) continue; update_post_caches($posts); ?>

<!-- O estilo de sua postagem no loop normal vai aqui --> <?php endwhile; else: ?>

<p>Alguma mensagem de erro ou algo do tipo.</p> <?php endif; ?>

Vamos decompor esse código, começando pelo primeiro loop que começa na primeira linha, onde você carrega $featured_query com uma nova consulta ao loop do WP_Query. Essa consulta recebe parâmetros do tipo query_post(), assim, você está limitando a consulta à categoria Featured, e exibindo apenas uma postagem:

Em seguida, você passa para um loop while (que contém apenas uma resposta; afi nal, você especifi cou apenas uma postagem) que se parece um pouco como o loop básico:

while ($featured_query->have_posts()) : $featured_query->the_post();

Lembre-se de que have_posts() no loop básico era na verdade $wp_query->have_

posts(); este é o mesmo caso, mas ao invés do padrão $wp_query você está usando o novo em folha $featured_query. Isto signifi ca que você está fazendo exatamente a mesma coisa que o loop básico, mas usando um novo objeto ao invés do padrão $wp_query, de modo a não afetar $wp_query de forma alguma.

A terceira linha é simples. Você está carregando a ID da postagem dentro do objeto $do_

not_duplicate. A ideia aqui é garantir que uma postagem em destaque não acabe aparecendo tanto na seção de postagens em destaque quanto na listagem de postagens abaixo. Se você já viu um exemplo de múltiplos loops fazendo isso, vai reconhecer este trecho de código; ele é destaque também no Codex. Você vai usá-lo em seu loop principal, mas por enquanto a ID da postagem é classifi cada em $do_not_duplicate. É claro que isso só vai funcionar se você tiver apenas uma postagem em destaque. Se você tivesse várias, seria necessário armazená-las em um array.

$do_not_duplicate = $post->ID; ?>

<!-- Estilo de sua postagem em destaque --> <?php endwhile; ?>

Depois disso, você tem a seção típica de saída de postagens, geralmente um título h2 com link para a postagem, e, em seguida, o conteúdo ou um trecho do conteúdo. Talvez você queira fazer isso com imagens ou outras coisas. Mas, por enquanto, pode se contentar em saber que isso vai conter a saída de sua postagem em destaque.

Continuando, você tem um loop básico típico, com uma adição. A linha oito é uma cláusula if para verifi car se a ID da postagem é a mesma ID armazenada no objeto $do_not_

duplicate. Caso seja, você continua e atualiza o cache de postagens; caso contrário, terá a saída normal. Em outras palavras, quando você chegar à postagem de destaque em seu loop principal, vai ignorá-la e seguir em frente:

<?php

if (have_posts()) : while (have_posts()) : the_post();

if( $post->ID == $do_not_duplicate ) continue; update_post_caches($posts); ?>

Depois disso, é apenas o loop básico até o fi m, com saída de postagens e tudo o mais:

<!-- O estilo de sua postagem no loop normal vai aqui --> <?php endwhile; else: ?>

<p>Alguma mensagem de erro ou algo do tipo.</p> <?php endif; ?>

Então, em outras palavras, primeiramente você gera a saída da postagem em um loop próprio. Em seguida, executa o loop normal, verifi cando a ID da postagem para ter certeza de que nossa postagem em destaque não vai aparecer mais de uma vez.

No documento Smashing Wordpress - Além Do Blog (páginas 68-70)