#本記事について
Wordpressの固定ページ(front-page.php)で投稿ページネーション関数(the posts pagination)を使用してカスタム投稿ページの投稿一覧表示と投稿ページネーションをつけようとしていたが、普通に使用すると上手く行きませんでした。
Googleで検索してみると固定ページじゃ駄目みたいな感じだったけど、気合?で乗り切れたので共有してみます。
#結論
以下のコードでうまくいきました。(カスタム投稿タイプ'photo'、1ページに表示する投稿5つの例)
<?php
$paged = get_query_var('page') ? get_query_var('page') : 1 ;
set_query_var('paged', $page);
$args = array('post_type' => 'photo',
'posts_per_page' => 5,
'paged' => $paged );
$query = new WP_Query($args);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
get_template_part( 'content' );
endwhile;
$GLOBALS['wp_query']->max_num_pages = $query->max_num_pages;
the_posts_pagination( array(
'mid_size' => 2,
'prev_text' => __( 'Back', 'twenty-minutes' ),
'next_text' => __( 'Next', 'twenty-minutes' ),
'screen_reader_text' => __( 'Posts navigation', 'twenty-minutes' )
) );
else :
get_template_part( 'no-results', 'index' );
endif;
?>
#解説
###■Point1:固定ページでは現在のページは’paged'じゃなくて'page'に入ってる。
なので、WP_Queryの$pagedに設定するのはget_query_var('paged')じゃなくて、get_query_var('page')になります。
###■Point2:the_posts_paginationはグローバル変数の'paged'を見てるようだ。
固定ページでは'paged'には初期値が入っているようだが、the_posts_paginationは'page'ではなく'paged'を見に行っているようなので、このままだとページネーションがうまくできなかった。
なので、無理やり?set_query_var('paged', $page);として'paged'に'page'の値を入れてあげたら、うまく動きました。
#備考
素直にarchive.phpとかを使えばいいかも・・・
どうしても固定ページでthe_posts_paginationを使いたかったら、参考にしてみてください。