Si alguna vez necesitamos mostrar alguna entrada aleatoria en WordPress, y de alguna forma buscamos que esta no se repita (Esto ya no es aleatorio). Hay varias formas de lograrlo, pero para qué molestarse en describirlas, el código habla por sí solo.
# Se establece la opción que llevará un número, para ir recorriendo el Loop.
$opcion_slug = 'entrada-aleatoria-offset';
# Si la opción es 0 o no tiene número, se establece en 0.
if ( get_option( $opcion_slug ) < 1 ) {
update_option( $opcion_slug, 0 );
$offset = 0;
# Si la opción es 999 o mayor, se reinicia el número. Se puede ajustar, y siempre debe ser un número mayor al de las entradas publicadas en WordPress.
} elseif ( get_option( $opcion_slug ) >= 999 ) {
update_option( $opcion_slug, 1 );
$offset = 1;
# Si la opción es mayor o igual a 1, se establece correctamente el $offset para ser usado en el Query de WordPress.
} elseif ( get_option( $opcion_slug ) >= 1 ) {
$offset = get_option( $opcion_slug );
}
$posts = query_posts($query_string .
"&orderby=title ID&
order=asc&
posts_per_page=1&
offset=$offset");
if (have_posts()):
while (have_posts()): the_post();
# Se incrementa el número de offset cada que se muestra una entrada.
$numero = get_option( $opcion_slug );
$numero++;
update_option( $opcion_slug, $numero );
endwhile;
else:
echo 'No hay entradas.';
endif;
El código trabaja de la siguiente forma:
- Se crea una opción en la base de datos, en donde se guarda el número 0.
- El Loop se limita a 1 entrada.
- Se muestran entradas ordenando por ID de entrada y título.
- Cada que se muestra una entrada, se aumenta el número de offset.
- El offset es un valor numérico que recorre de posición el cursor, de esta forma se busca lograr un efecto aleatorio.