¿Por qué no puedo usar setup_postdata ($ post) en la barra lateral?

4

He creado una función que toma un parámetro: tipo de publicación, y generará cada publicación con algún html y título, contenido, etc. Sin embargo, quiero poder usar las funciones asociadas con $post , especialmente the_excerpt . Sin embargo, cuando trato de usar mi función en mi widget de barra lateral php, simplemente genera el título y el contenido de la página principal, no las informaciones personalizadas de las publicaciones.

Si ejecuto la función en la página, funciona bien y elimina los detalles de la publicación de las consultas personalizadas. Puedes preguntar por qué no solo pongo esto en la barra lateral, bueno, es demasiado complicado y lo reutilizaré con diferentes publicaciones personalizadas, así que pensé en escribir una función.

MI función:

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

}
    
pregunta Claire 22.10.2012 - 23:10

2 respuestas

1

Su función funciona en la plantilla de su página pero no en la barra lateral porque en el punto en que se procesa su plantilla, $ post ya contiene la publicación que se ha cargado para la página.

Probé tu código y, como dijo Michael, todo lo que necesitaba agregar era la declaración global de $ post dentro de la función , y mostraba las publicaciones exactamente como pretendías:

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

}
    
respondido por el Tapefreak 04.02.2013 - 20:25
0

setup_postdata($post); parece requerir que $post se establezca como una variable global:

enlace

    
respondido por el Michael 23.10.2012 - 00:14

Lea otras preguntas en las etiquetas