Sergio Melzner

Comunicacion online

Excluir post repetidos en WP

18-12-2007

Me hago un tiempito entre tanto laburo de modificación para compartir algo que me costó muchísimo y teniendo en cuenta que alguien puede andar buscando -como yo hasta hace 3 minutos- la solución estaría bueno facilitársela. Cabe aclarar que no es muy óptimo hacer las 4 consultas pero no encontré otra manera, se aceptan sugerencias…

La idea es personalizar el loop en la portada de WordPress evitando que se muestren post repetidos sin importar la categoría. Por si no se entendió, ejemplo práctico. En deCorrientes.com el loop se carga:

  • Arriba, recuadro azul: última noticia.
  • Columna izquierda: categorías específicas A.
  • Columna derecha: categorías específicas B.
  • Lista de abajo: Categoría individual C.

Para lograr el efecto que quería arriba mostraba una categoría específica que me mostraba “Destacadas” pero para sacarla de ahí (o poner otra) había que mover manualmente la categoría del post cuando se posteaba algo nuevo. Lo que necesitaba es que el destacado de arriba muestre lo más reciente pero sin tomarlo como absoluto y que las demás lecturas excluyeran el reciente pero dinámicamente. Es decir, que cuando se actualice con un nuevo post el ex-destacado pase a su categoría habitual y el último publicado tome su lugar.

Vayamos al código:

<div class="destacada">
<?
php recent = new WP_Query("showposts=1");
while($recent->have_posts()) : $recent->the_post();
$duplicado = $post->ID; // LO SEÑALO COMO $DUPLICADO
?>
<h2><php the_title();></h2>
<the_content();>
<?php endwhile; ?>
</div>

Después cargo la columna de la izquierda:

<div id="cI">
<?php $recent = new
WP_Query("cat=1,2,3,4,5&showposts=5"); // DELIMITO CATEGORÍA Y CANTIDAD
while($recent->have_posts()) : $recent->the_post();
if( $post->ID == $duplicado ) continue; // VERIFICO MARCA $DUPLICADO
update_post_caches($posts); ?>
<h2><php the_title();></h2>
<the_content();>
<?php endwhile; ?>
</div>

Después se cargan tantas columnas o sectores como quieran, pero la idea es esa. Tomo antes de terminar la consulta la variable $duplicado (que delimité en la primer consulta) y excluyo esos post. En caso de que no exista se carga normal.

Otra opción que encontré es “offset” que es para saltearse un post, pero al hacerlo así me saltearía obligadamente un post y al tener 4 columnas generaría un problema. ¿Por qué? Porque en destacado solo está el último y yo me salteo 4 post (1 por columna) así que en 3 columnas estoy perdiendo la visualización de recientes.

En cambio, con esta opción solo me salteo si ya está presente arriba. Si no se carga naturalmente, cosa que no sucedía con offset.

Espero que a alguien le sirva ;)