カスタム投稿wp_queryを使用したページネーションについて提案する方法は3つあります。残念ながら、今日まで、これについての良い情報はあまりありません。少なくとも、場合によっては、そこに何があるのかがはっきりしていません。うまくいけば、これが役立ちます!
また、wp_reset_postdata()が間違った場所にあることに注意してください。ただし、正しく機能させるには、さらに多くのことが必要です。
オプション1-max_num_pages変数を使用
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => 1,
'paged' => $paged,
'post_type' => 'cpt_type'
);
$cpt_query = new WP_Query($args);
?>
<?php if ($cpt_query->have_posts()) : while ($cpt_query->have_posts()) : $cpt_query->the_post(); ?>
//Loop Code Here...
<?php endwhile; endif; ?>
<nav>
<ul>
<li><?php previous_posts_link( '« PREV', $cpt_query->max_num_pages) ?></li>
<li><?php next_posts_link( 'NEXT »', $cpt_query->max_num_pages) ?></li>
</ul>
</nav>
上記のように、変数previous_posts_link
にnext_posts_link
アクセスするためのわずかに異なる形式が表示されます。max_num_pages
にアクセスするときは、必ず独自のクエリ変数名を使用してくださいmax_num_pages
。$ cpt_queryを使用していることに注意してください。これは、クエリ例の変数です。
オプション2-ループクエリに一時的に$wp_query変数を使用する
これは多くの人が推奨することですが、$ wp_query変数を一時変数に割り当てて再割り当てするように注意してください。そうしないと、あらゆる種類の問題が発生します。そのため、オプション#1をお勧めします。CSSトリックに記載されているように、次のようなことができます。
<?php
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('showposts=6&post_type=news'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<!-- LOOP: Usual Post Template Stuff Here-->
<?php endwhile; ?>
<nav>
<?php previous_posts_link('« Newer') ?>
<?php next_posts_link('Older »') ?>
</nav>
<?php
$wp_query = null;
$wp_query = $temp; // Reset
?>
オプション3-WP-pagenaviプラグインを使用
代わりにできる別のオプションと同じように、WP-pagenaviプラグインを使用し、オプション#1のようにクエリを設定します。ただし、プラグインをインストールしたら、コードに1つの変更を加え、要素内のすべてを削除して、この関数に置き換えます。したがって、次のように終了します。
<nav>
<?php wp_pagenavi( array( 'query' => $cpt_query ) ); ?>
</nav>