C’est peut-être une question de type "Je suis toujours nouveau dans WP", mais j’ai rencontré un problème avec l’utilisation de get_posts()
et wp_get_recent_posts()
dans une fonction personnalisée que j’ai écrite avec setup_postdata()
. Voici ce que j'avais dans mon fichier functions.php:
<?php
function getRecentPosts($total_posts = 2)
{
$total_posts = intval($total_posts);
global $post;
$args = array(
'posts_per_page' => $total_posts,
'post_type' => 'post',
'post_status' => 'publish'
);
$posts = get_posts($args);
foreach ($posts as $post)
{
setup_postdata($post);
echo '<div>';
the_title();
echo '</div>';
}
wp_reset_postdata();
}
Simple, non? Et cette fonction fonctionne très bien, en jetant parfaitement les balises de titre dans les variables div
. Mais quand je remplace les lignes 7 à 12 par ce qui suit:
...
$args = array(
'posts_per_page' => $total_posts,
//'post_type' => 'post',
'post_status' => 'publish'
);
$posts = wp_get_recent_posts($args);
...
... alors la fonction ne semble pas "parcourir" correctement les posts, jetant le titre du premier post trouvé, encore et encore, un peu comme si vous n'utilisiez pas global $post
au début de la fonction.
Pourquoi est-ce? Y at-il quelque chose de différent que wp_get_recent_posts()
fait que je ne comprends pas encore.
Si vous regardez le source de setup_postdata()
, vous constaterez qu'il faut un objet ($post
) à transmettre et non un tableau.
wp_get_recent_posts()
( source ), par défaut (pour la compatibilité avec les versions antérieures à la version 3.1), renvoie chaque publication sous forme de tableau. Le deuxième argument optionnel, pouvant être passé à wp_get_recent_posts()
, peut empêcher ceci:
$posts = wp_get_recent_posts( $args, OBJECT_K )
(bien que toute valeur autre que ARRAY_A
dans le deuxième argument fasse l'affaire).