Detectar el último artículo del loop de WordPress

Beware: This post was published 7 years ago and its content may be outdated.

A veces nos interesa saber cuándo se está mostrando el primer o el último artículo del blog de WordPress para, por ejemplo, mostrar una línea de división en todos los artículos menos el último o destacar el primer artículo sobre los demás. Hay varias formas de contar los artículos que ya se han mostrado en el loop de WordPress, en este artículo me voy a centrar en la forma más sencilla que conozco: mediante $wp_query.

$wp_query es un objeto que contiene diversos métodos (funciones) y atributos (variables) acerca de las consultas a la Base de Datos (realmente contiene mucha información). Entre estos atributos hay dos que son los que utilizaremos y que nos facilitan mucho la tarea, se trata de: current_post y post_count. El primero indica cuál es la iteración (repetición) actual del bucle, mientras que el segundo indica el total de artículos que se mostrarán. Es decir, el primero nos dice cuántos artículos se han mostrado ya y el segundo nos indica el total de veces que se ejecutará el bucle.

Con ambos datos tenemos suficiente como para saber cuándo se está mostrando el primer y el último artículo. Lo único que tenemos que tener en cuenta es que current_post comienza en 0, mientras que post_count es el total de artículos que se mostrarán (partiendo de 1). Esto quiere decir que si vamos a mostrar 10 artículos en el bucle, al mostrarse el último artículo el atributo current_post valdrá 9, mientras que el atributo post_count valdrá 10.

A continuación os dejo un bucle de ejemplo para que entendáis mejor lo que quiero decir:

if (have_posts()): while (have_posts()): the_post();
if ($wp_query->current_post == 0)
{
echo 'Este es el primer artículo del bucle';
}
if (($wp_query->current_post + 1) == $wp_query->post_count)
{
echo 'Este es el último artículo del bucle';
}
if ($wp_query->current_post > 0)
{
echo 'Este no es el primer artículo del bucle';
}
if (($wp_query->current_post + 1)  < $wp_query->post_count)
{
echo 'Este no es el último artículo del bucle';
}
if (($wp_query->current_post > 0) && (($wp_query->current_post + 1)  < $wp_query->post_count))
{
echo 'Este no es ni el primer artículo del bucle ni el último';
}
endwhile; endif;

Realmente no tiene mucha complicación y facilita bastante el detectar cuándo se muestra el primer o el último artículo.