Anoche en Twitter @CH405 preguntaba como personalizar/estilizar el primer post dentro del Loop de WordPress. Me quede pensando un rato como lograr una solución simple. Mi primera aproximación fue crear dos Loop, uno que muestre de manera distinta el primer post y otro que nos “traiga” el resto de los post. La idea no era errada, pero poco practica, ya que en el primer Loop tendríamos que definir una categoría, etc.

Por suerte recordé que con la llegada de los Sticky Post, llego la función post_class() Que básicamente inserta una clase según las variables que se le den.

Luego de recordar esto, arme el siguiente Loop:

<?php if (have_posts()) :
	$primerpost = 'primer_post';  ?><!-- el primer post tendra como class a 'primer_post'  --!>
 
		<?php while (have_posts()) : the_post(); ?>
 
			<div <?php post_class($primerpost); ?> id="post-<?php the_ID(); ?>">
                        <?php $primerpost =''; ?>
 
					<?php the_content(''); ?>
 
			</div>
 
		<?php endwhile; ?>
 
 
	<?php endif; ?>

Como podrán observar es un Loop simple, nada fuera de lo ordinario, pero el secreto esta en la correcta utilización de la función post_class().

Como podemos ver antes comience el Loop hemos insertado una nueva variable: $primerpost lo que hará sera imprimir la clase primer_post solo en el primer post, dentro del Loop. Ahora solo debemos darle formato a esta clase, y podremos diferenciar el primer Post del resto.

Pero la historia no termino ahí, después se planteo esta situación: Como diferenciar (también) el ultimo post de una categoria ‘X’. Lo que me hizo rascar la cabeza por unos minutos…

Recapitulemos: Lo que necesitamos es que en un mismo Loop el primer post se pueda diferenciar, que el ultimo post de una categoría ‘X’ también se diferencie y el resto de los post se presenten de manera uniforme.

El primer objetivo ya se había logrado (primer post) pero el segundo estaba medio en el aire, por suerte recordé los Condicionales de WordPress; mas precisamente in_category(”) Con esa idea en la mente arme el siguiente Loop para unificar todo lo que nos habíamos planteado:

<?php $my_query = new WP_Query('showposts=10'); ?><!-- solo se mostraran 10 post en el Home, si te hace faltan mas o menos cambiar el 10 por el numero deseado, tambien recorda poner el mismo numero en la linea 14 (dentro de $count ) -->
<?php $count = 0; ?>  
<?php while ($my_query->have_posts()) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?>
<?php $count++; ?>  
 
  <?php if ($count == 1) : ?>  
    <div id="destacado"><!-- primer post de cualquier cate. va dentro id 'destacado' -->
      <div class="post" id="details">Post destacado al ser el primero</div>
          <h2><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h2>
      <p><?php the_content(''); ?></p>
    </div>
    <hr/>
 
  <?php elseif ($count == 10) : ?> 
  <?php if (in_category('12')) : ?> <!-- necesitas saber el ID de la ultima cat que queres destacatar, en este ej el ID es 12 -->
    <div class="post ultimo"><!-- ultimo post de la cayegoria 12 lleva class 'ultimo' -->
      <h3><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
      <p class="clear"><?php the_content('read more...'); ?></p>
    </div>
    <?php endif; ?>
  <?php else : ?>  
    <div class="post"><!-- todo post que no sea ni el ultimo ni el primero solo llevara la class post -->
      <h3><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
      <p class="clear"><?php the_content(''); ?></p>
    </div>
  <?php endif; ?>
 
<?php endwhile; ?>

Como se puede ver este un Loop mucho mas complejo que el primero, pero no se asusten ya que la gramática es muy entendible.

En primer lugar creamos una nueva Query para que solo muestre en el Home 10 post, para así poder llevar un conteo de los post y poder diferenciar el Primer y Ultimo post del resto.

Ahora, con este Loop; el primer post siempre estará dentro del id ‘desatcado’ lo que nos permitirá un control total a la hora de darle formato.

Para poder personalizar el ultimo post, siempre y cuando se de la categoría (para este caso) 12 le corresponderá la clase ‘ultimo’. Al haber definido en primer lugar la cantidad de entradas en el Home, podemos llevar una cuenta de la cantidad de post que hay y a la entrada 10 se le asignara la clase que hemos mencionado.

Y el resto de los post, todo aquel que no sea ni el primero, ni el ultimo de ‘X’ categoría mostraran un formato uniforme.

Con este Loop se ha logrado nuestro cometido, de manera, simple y elegante.