Blogs / WordPress

Mostrar artículo aleatorio en WordPress

Existe una forma muy sencilla de redirigir a nuestros visitantes a un artículo aleatorio en WordPress. Cuando alguien ha terminado de leer un post tal vez necesite de alguna sugerencia para no abandonar el sitio. Una de las formas más habituales es utilizando uno de los diferentes plugins que llevan a artículos relacionados. También se puede diseñar un script, como el que aparece en muchas páginas, que proponen algunas lecturas en Nuestras sugerencias (Mostrar entradas aleatorias sin un plugin en WordPress). Ahora, después de haber descubierto la propuesta que nos hacen en WpRecipes, os invitamos a que propongáis la visita a uno de los artículos que alimentan vuestro sitio web.

Mostrar artículo aleatorio en WordPress

El primer paso que debemos dar es crear un archivo, de nombre page-random.php, que incluiremos en la carpeta del tema activo. Ese archivo se ocupará de buscar entre todos los artículos publicados en el sitio uno al azar. Este es el contenido del script:

<?php
// Definir argumentos para get_posts()
$args = array(
    'numberposts' => 1,
    'orderby' => 'rand'
);

// Cargar un artículo aleatorio desde la base de datos
$my_random_post = get_posts ( $args );

// Procesar la solicitud a la base de datos a través de un bucle foreach
foreach ( $my_random_post as $post ) {
  // redirect the user to the random post
  wp_redirect ( get_permalink ( $post->ID ) );
  exit;
}
?>

Como podrás comprobar se trata de un script muy sencillo, sin grandes pretensiones, pero que hace el trabajo a la perfección.

Tras subir el archivo anterior, a través de FTP, a tu espacio web, crea una nueva página (no entrada) en el Panel de Administración de WordPress y llámale random. No introduzcas ningún contenido en dicha página.

Incluye, por ejemplo al final del loop del archivo single.php del tema activo, un enlace similar al siguiente:

<a href="http://www.dominio.com/random">Artículo aleatorio</a>

No te olvides de sustituir la URL por la de tu sitio, eso sí, tampoco te olvides de añadir random al final, tal como indicamos. Puedes cambiar Artículo aleatorio por la frase que desees. Así, en el lugar que indiques, se mostrará una referencia a ese artículo, al que aparezca en cada ocasión.

Fabriciano González

Amante de la informática y de Internet entre otras muchas pasiones. Leo, descifro, interpreto, combino y escribo. Lo hago para seguir viviendo y disfrutando. Trato de dominar el tiempo para que no me esclavice.

14 Comentarios

  1. Buenas tardes lluviosas. Lo primero, una vez más, es darte las gracias por tu script que funciona de maravilla. lo segundo es pedirte, por favor, si se puede hacer para solo salgan post de una categoría determinada. Lo he intentado con este script pero no me funciona:
    ‘categoria1’,
    ‘numberpost’ => 1,
    ‘orderby’ => ‘rand’,
    ‘date_query’ => array(
    array(
    ‘after’ => ‘1 year ago’,
    ),
    ),

    );

    // Cargar un arti­culo aleatorio desde la base de datos
    $my_random_post = get_posts ( $args );

    // Procesar la solicitud a la base de datos a traves de un bucle foreach
    foreach ( $my_random_post as $post ) {
    // redirect the user to the random post
    wp_redirect ( get_permalink ( $post->ID ) );
    exit;
    }
    ?>
    Muchas gracias por anticipado

      1. muchas gracias pero no tengo conocimiento para entenderlo. Por favor, ¿puedes hacer el cambio sobre mi actual script? muchas gracias, perdón por molestarte tanto:
        ‘articulos’,
        ‘numberpost’ => 1,
        ‘orderby’ => ‘rand’,
        ‘date_query’ => array(
        array(
        ‘after’ => ‘1 year ago’,
        ),
        ),

        );

        // Cargar un arti­culo aleatorio desde la base de datos
        $my_random_post = get_posts ( $args );

        // Procesar la solicitud a la base de datos a traves de un bucle foreach
        foreach ( $my_random_post as $post ) {
        // redirect the user to the random post
        wp_redirect ( get_permalink ( $post->ID ) );
        exit;
        }
        ?>

  2. Buenos días, pregunta: una vez aparecida la página de forma aleatoria… ¿se podría pasar automáticamente a la siguiente página?
    Gracias por anticipado,

    1. Si el tema que tienes instalado soporta esa opción, tal como ocurre en Lecciones – Ordenadores e Internet, se mostrará un enlace, al final del artículo, al siguiente y al anterior post. Ello no tiene nada que ver con lo que explico en este artículo.

      Saludos.

  3. hola y gracias por tu idea que funciona muy bien. una pregunta, se podría hacer para acotarlo por fechas? es decir que muetre aleatorio pero entre 2015 y 2017 solamente, o que sean mayores de una fecha?
    gracias por anticipado.
    curro

  4. Hola, buenas noches.
    Excelente artículo y me funcionó a la perfección, ahora ya que tengo un sólo post aleatorio, también me interesa poner una página como el index, pero con artículos aleatorios, no se si me entiendes.

    1. Va a depender del tema que tengas activo. Si, por ejemplo, existen predefinidos varios modelos, como pueden ser para crear un sitemap, o una página que incluya archivos multimedia, entre otros modelos, sólo tendrías que crear un template nuevo en el que incluyeses el código que indico, pero cambiando el número de posts, que aquí se refiere a 1, por el número que desees. A continuación tendrías que crear una página, desde el Panel de Administración de WordPress, que incluyese ese template y a la que podrías llamar Artículos aleatorios. Siempre que se llame a esa página, se mostrará el número de artículos indicado.

      Si el tema que tienes instalado no soporta esta capacidad, habría que arbitrar otra solución.

      Saludos.

  5. hola, buenas tardes excelente articulo.

    Tengo una duda como le puedo hacer para que se muestren los últimos 5 artículos de forma aleatoria, es decir, quiero mostrar solo un articulo a la ves y este vaya cambiando al actualizar la página, pero que sean solo los últimos 5 y no todos los de la base de datos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.