Créons une fonction et ajoutons là dans functions.php

Étape 1 : arguments

Créons un tableau nomme $args et ajoutons-y les arguments.

Le post_type peut être un article, une page ou tout autre type de publication personnalisé.

L’argument orderby est important car c’est l’ordre que nous voulons pour les messages aléatoires.

Vous pouvez avoir orderby comme titre, nom, ID, slug, etc.

Avec l’argument posts_per_page, vous pouvez décider du nombre de messages que vous souhaitez récupérer.

$args = array(
    'post_type'      => 'post',
    'orderby'        => 'rand',
    'posts_per_page' => 10,
    );
...

Étape 2 : Wp_Query

Créons une instance de wp_query dans laquelle on passe $args

...
$query = new WP_Query( $args );
...

Étape 3 : récupérer les posts

Vérifions s’il y a des messages dans la variable $query et si c’est le cas, sauvegardons ces messages avec un code HTML dans une chaîne PHP.

De plus, nous aurons également une autre condition en cas d’absence de messages à récupérer. Dans ce cas, nous pouvons simplement afficher un message indiquant qu’il n’y a pas d’articles à afficher.

...
if ( $query->have_posts() ) {
    $rand_posts .= '<section>';
        while ( $query->have_posts() ) {
            $query->the_post();
            $rand_posts .= '<a href="'. get_permalink() .'">'. get_the_title() .'</a>';
        }
    $rand_posts .= '</section>';
    wp_reset_postdata();
} else {
    $rand_posts .= '<p>Pas d\'articles</p>';
}
...

Notez qu’il y a wp_reset_postdata() dans la condition if.

Après la boucle, nous devons utiliser wp_reset_postdata() pour restaurer le $post global avec la publication actuelle dans la requête principale.

Étape 4 : function & shortcode

Le code final

function my_random_posts() {

    $args = array(
        'post_type'      => 'post',
        'orderby'        => 'rand',
        'posts_per_page' => 10,
        );

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
        $rand_posts .= '<section>';
            while ( $query->have_posts() ) {
                $query->the_post();
                $rand_posts .= '<a href="'. get_permalink() .'">'. get_the_title() .'</a>';
            }
        $rand_posts .= '</section>';
        wp_reset_postdata();
    } else {
        $rand_posts .= '<p>Nothing to show</p>';
    }

    return $rand_posts;
}

add_shortcode('my-random-posts','my_random_posts');
add_filter('widget_text', 'do_shortcode');

Vous pouvez simplement appeler la fonction ci-dessus en utilisant le shortcode [my-random-posts], et elle affichera 10 publications aléatoirement.

En utilisant do_shortcode, vous pouvez exécuter le shortcode dans un widget.