J'ai créé une fonction qui prend un paramètre - type de publication, et affichera chaque publication avec du HTML, un titre, du contenu, etc. Cependant, je veux pouvoir utiliser les fonctions associées à $post
, en particulier the_excerpt
. Cependant, lorsque j'essaie d'utiliser ma fonction dans mon widget php, elle affiche simplement le titre et le contenu de la page principale, et non les informations de publication des requêtes personnalisées.
Si j'exécute la fonction dans la page, cela fonctionne bien et renvoie les détails de publication des requêtes personnalisées. Vous pouvez demander pourquoi je ne fais pas que mettre cela dans la barre latérale, eh bien c'est trop compliqué et je vais le réutiliser avec différents posts personnalisés, alors j'ai pensé écrire une fonction.
MA fonction:
function myRecentPosts($postType){
wp_reset_postdata();
$args = array( 'post_type' => $postType,'posts_per_page' => 3);
$recentPosts = get_posts( $args );
foreach($recentPosts as $post){
setup_postdata($post); ?>
<article>
<h1><?php the_title();?></h1>
<?php the_excerpt();?>
</article>
<?php
}
wp_reset_postdata();
}
Votre fonction fonctionne dans votre modèle de page, mais pas dans la barre latérale, car au moment où votre modèle est traité, $ post contient déjà le message qui a été chargé pour la page.
J'ai essayé votre code et, comme Michael l'a dit, tout ce que j'avais à ajouter était la déclaration globale de $ post à l'intérieur de la fonction , et les messages étaient affichés exactement comme vous le souhaitiez:
function myRecentPosts($postType){
wp_reset_postdata();
$args = array( 'post_type' => $postType,'posts_per_page' => 3);
global $post;
$recentPosts = get_posts( $args );
foreach($recentPosts as $post){
setup_postdata($post); ?>
<article>
<h1><?php the_title();?></h1>
<?php the_excerpt();?>
</article>
<?php
}
wp_reset_postdata();
}
setup_postdata($post);
semble exiger que $post
soit défini en tant que variable globale:
http://codex.wordpress.org/Function_Reference/setup_postdata