web-dev-qa-db-fra.com

Pourquoi ne puis-je pas utiliser setup_postdata ($ post) dans la barre latérale?

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();

}
4
Claire

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();

}
1
Tapefreak

setup_postdata($post); semble exiger que $post soit défini en tant que variable globale:

http://codex.wordpress.org/Function_Reference/setup_postdata

0
Michael