WP-PageNavi 2ページ目以降が表示されない/2ページ目以降も同じ内容を対処する

WP-PageNavi 2ページ目が表示されない/同じ内容を対処するmemo

 

どのような時に起こるか

特定のカスタム投稿のアーカイブページ を固定ページ内に作成して、ページ送りも入れたい場合など

固定ページのテンプレートにプラグインを表示させるコードを書いてもナビゲーションは表示されない。

検索する際は「固定ページ pagenavi」などで検索すると、色々ページがでてくる

 

参考にして表示に成功したページはこちら

・wp_pagenaviにクエリに引数を渡さなければ、naviは表示されない.

 


<div class="">
<ul>
<?php
$paged = get_query_var('paged')? get_query_var('paged') : 1; // 何ページ目かを取得

解説①へ
$args = array(
'posts_per_page' => 10, //取得したいページ数
'post_type' => array('post','page','',''), //取得したいカスタム投稿など
'paged' => $paged, // 何ページ目を指定してサブクエリを取得する
'post_status' => 'publish', //公開されたページのみ
);
$the_query = new WP_Query( $args ); //変数($the_query)に $argsで設定したクエリをセット
?>

<?php while ( $the_query->have_posts() ) : $the_query->the_post();?>

解説②へ

<!-- ループしたい内容を記載します -->
<li><?php echo esc_html( $post->post_title ); ?></li>
<!-- ループしたい内容を記載します -->
<?php
endwhile;
wp_reset_postdata();
?>
</ul>
<?php
if(function_exists('wp_pagenavi')) {
wp_pagenavi(array('query' => $the_query)); // サブクエリを引数で渡してあげる
}
?>

解説③へ

</div>

① 現在のページ送り番号を取得する

$paged = get_query_var('paged')? get_query_var('paged') : 1; // 何ページ目かを取得

・静的フロントページ(ページテンプレート)で現在のページ送り番号を取得するには、’page’ クエリ変数を使う必要があります。

・get_query_var() は WP_Query で認識されている「パブリック・クエリ変数」のみを取得する、そのため

$myposts = get_posts( $args );

などで使うことができない。

関数リファレンス/get query var

 

② 設定したクエリでループを作成する

<?php while ( $the_query->have_posts() ) : $the_query->the_post();?>

get_query_var() は WP_Query で認識されている「パブリック・クエリ変数」のみを取得するため、新しく設定したクエリの中から記事を取得するwhileループ文を作成する。

whileは「次の記事があるか調べてから、次の記事を取得(表示)する」という処理が10回など繰り返される。

  • while → 処理を繰り返す構文(whileは 〜の間中という意味)
  • have_posts() → 次の記事があるか調べる
  • the_post() → 次の記事を取得する

 

③ サブクエリを引数で渡してあげる

wp_pagenavi(array('query' => $the_query)); // サブクエリを引数で渡してあげる

①のクエリで設定したget_query_varの数値を代入します。

・固定ページのアーカイブでpagenavi表示する場合、get_posts()ではなく、WP_Query()でなければいけない

・サブクエリを因数で渡さなければ、2ページ目以降も1ページ目が表示される