web-dev-qa-db-ja.com

Single.phpループ内でquery_postsを使う

Single.phpのループ内で、get_postsを使用したカスタムクエリを使用して特定のカテゴリに属する​​投稿を返しました。

<?php                                                   global $post;
                                                        $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
                                                        $myposts = get_posts("paged=$paged&category=5");?>

<?php foreach($myposts as $post) :?>

<?php the_title();?>

<?php endforeach; ?>

問題は、single.phpループである元のループが、クエリの実行後に機能しないように見えることです。たとえば、ナビゲーションリンク(次と前)は機能しません。

あなたはこの問題に直面したことがありますか?あなたの助けは大歓迎です。

ナビゲーションリンク関数が次/前の投稿を決定するために使用するグローバル$post変数を復元するには、クエリの後に wp_reset_postdata() を呼び出す必要があります。

5
Milo

WP_Query の代わりに get_posts を使用することもできます。ただし、ほぼ同じことができますが、参考のために、

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$args =  array ( 'category' => 5, 'paged' => $paged, 'posts_per_page'=> 5 );
$catPosts = new WP_Query( 'post_type=post' );

if( $catPosts->have_posts() ){ ?>
    <ul>

    <?php while ($catPosts->have_posts()) : $catPosts->the_post(); ?>
        <li>
            <a href="<?php the_permalink();?>"><?php the_title(); ?></a>
        </li>
    <?php endwhile; ?>

    </ul>
<?php 
} else {
    // no posts found
}

wp_reset_postdata();
4
helgatheviking