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; // 何ページ目かを取得
$myposts = get_posts( $args );
などで使うことができない。
② 設定したクエリでループを作成する
<?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()でなければいけない