web-dev-qa-db-fra.com

Extrait vide avec wp_get_recent_posts

J'ai ce shortcode simple pour afficher les derniers articles avec son titre et excepté:

add_shortcode('latest3', function(){
    $recent_posts = wp_get_recent_posts(
            array(
                'numberposts'   => 3,
                'orderby'       => 'post_date',
                'order'         => 'DESC',
                'post_type'     => 'post',
                'post_status'   => 'publish'
            ), ARRAY_A);

    $output = '<h2>Latest posts</h2>';
    foreach ( $recent_posts as $recent ) {
        $output .= '<h3>'.$recent["post_title"].'</h3>';
        $output .= $recent["post_excerpt"];
    }
    return $output;
});

Mais pour une raison quelconque, la sortie de l'extrait est vide. print_r($recents) indique qu'il existe effectivement une clé de tableau appelée post_excerpt, mais qu'elle est toujours affichée vide.

2
Th3Alchemist

La valeur post_excerpt est vide car vous n'avez aucun extrait explicite pour vos publications. Bien que the_excerpt() génère un extrait du contenu des publications si celui-ci est vide, la fonction wp_get_recent_posts(), qui est essentiellement un wrapper pour get_posts(), ne le fait pas.

3
Nicolai

Ce code peut fonctionner. J'utilise le setup_postdata pour créer un objet post similaire à celui de la fonction the_post(). Vous pouvez donc maintenant utiliser les fonctions que vous avez dans une boucle.

$recent_posts = wp_get_recent_posts(
            array(
                'numberposts'   => 3,
                'orderby'       => 'post_date',
                'order'         => 'DESC',
                'post_type'     => 'post',
                'post_status'   => 'publish'
            ), OBJECT);

    $output = '<h2>Latest posts</h2>';
    foreach ( $recent_posts as $recent ) {
        setup_postdata($recent);
        $output .= '<h3>'.get_the_title().'</h3>';
        $output .= get_the_excerpt();
    }
    wp_reset_postdata();
    return $output;
4
Tomás Cot