Por que não consigo usar setup_postdata ($ post) na barra lateral?

4

Eu criei uma função que leva um parâmetro - post type, e irá produzir cada posts com algum html e title, content etc dentro disso. No entanto, quero poder usar funções associadas a $post , especialmente the_excerpt . No entanto, quando tento usar minha função no widget php da barra lateral, ela simplesmente exibe o título e o conteúdo da página principal, não as informações personalizadas postadas.

Se eu executar a função na página, ela funcionará bem e exibirá os detalhes da postagem das consultas personalizadas. Você pode perguntar por que eu não apenas coloco isso na barra lateral, bem, é muito confuso e eu vou reutilizá-lo com posts personalizados diferentes, então eu pensei em escrever uma função.

MINHA função:

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

}
    
por Claire 22.10.2012 / 23:10

2 respostas

1

Sua função funciona no seu modelo de página, mas não na barra lateral, porque no momento em que seu modelo é processado, $ post já contém a postagem que foi carregada para a página.

Eu tentei o seu código e, assim como o Michael disse, tudo que eu precisava adicionar era a declaração global do $ post dentro da função , e ele exibia os posts exatamente como você pretendia:

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

}
    
por Tapefreak 04.02.2013 / 20:25
0

setup_postdata($post); parece exigir que $post seja definido como uma variável global:

enlace

    
por Michael 23.10.2012 / 00:14

Tags