WordPressでは、私が作成した特定のページテンプレートを使用しているNews用のページがあります。このページには、ニュースカテゴリに割り当てられたニュース投稿が表示されます。ユーザーがもっとニュースを読みたいのであれば、このページに最新のニュース記事を2つだけ表示し、下部に「前へ/次へ」リンクを追加する必要があります。ただし、次/前のリンクは機能していません。それらをクリックすると/ page/2に行きますが、同じ投稿が表示されます。これが私のコードです。
<div id="primary">
<div id="content" role="main">
<div id="news">
<?php query_posts( "category_name=news&orderby=date&order=ASC&posts_per_page=2" ); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<p class="post-date">Posted on <?php the_date(); ?>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php endif; ?>
<div id="more-posts">
<div class="previous-link"><?php previous_posts_link("< previous news") ?></div><div class="next-link"><?php next_posts_link ("more news >") ?></div>
</div>
</div>
</div><!-- #content -->
</div><!-- #primary -->
このようなカスタムクエリを実行するときは、ページ付けを正しく機能させるために少し「ハック」する必要があります。
これを変更してください。
<?php
query_posts( "category_name=news&orderby=date&order=ASC&posts_per_page=2" );
?>
... WP_Query
呼び出しに対して:
<?php
$news_query = new WP_Query( "category_name=news&orderby=date&order=ASC&posts_per_page=2" );
?>
そして、あなたは*あなたのカスタムクエリオブジェクトを$wp_query
global`に移動する必要があります。
// Move $wp_query into a temp holder
$temp = $wp_query;
// Nullify the global object
$wp_query = null;
// Now move your custom query into the
$wp_query = $news_query;
次に、これからループの開始を更新します。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
...これに:
<?php if ( $news_query->have_posts() ) : while ( $news_query->have_posts() ) : $news_query->the_post(); ?>
これにより、ページ付けが期待どおりに機能します。
ループを閉じると、
<?php endwhile; ?>
<?php endif; ?>
...元の$wp_query
グローバルを復元するだけです。
<?php endwhile; ?>
<?php endif; ?>
<?php $wp_query = $temp; ?>
そして、あなたは行ってもいいはずです。