web-dev-qa-db-ja.com

サイドバーでsetup_postdata($ post)を使用できないのはなぜですか?

私は1つのパラメータを取る関数を作成しました - 投稿タイプ、そしてその中のいくつかのhtmlとタイトル、内容などで各投稿を出力します。しかし、私は$post、特にthe_excerptに関連する関数を使用できるようにしたいです。ただし、サイドバーのphpウィジェットで自分の関数を使用しようとすると、カスタムクエリの投稿情報ではなく、メインページのタイトルとコンテンツが出力されるだけです。

ページ内でこの機能を実行すると、それでも問題なく動作し、カスタムクエリの投稿の詳細が表示されなくなります。どうして私がこれをサイドバーに入れないのかと聞かれるかもしれませんが、それは面倒すぎて別のカスタム投稿でそれを再利用することになるので、私は関数を書くと思いました。

私の機能:

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

テンプレートが処理された時点で、$ postにはそのページ用にロードされた投稿が既に含まれているため、この関数はページテンプレートでは機能しますがサイドバーでは機能しません。

私はあなたのコードを試してみました、そしてMichaelが言ったように、私が追加しなければならなかったのは$ post関数の内側のグローバル宣言だけです。

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);$postがグローバル変数として設定されることを要求するようです:

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

0
Michael