フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【WP-PageNavi】ページャーが動かない!2ページ目以降が表示されない場合の原因と解決方法

WordPress
WP-PageNavi
ページャー
不具合
動かない

WP-PageNaviはページャーを作ることが出来るWordPressプラグイン。
簡単な設定でページャーを表示することが出来る人気プラグインですが、ページャーの2ページ目以降が表示されない!というバグが発生することがあります。
WP-PageNaviのページャーが正しく動かない場合、ある程度原因は限られてきます。
この記事では、WP-PageNaviのページャーが正しく動かない、2ページ目以降が表示されない場合の原因と解決場合をご紹介したいと思います。

なお、WP-PageNaviの使い方についてはこちらの記事で詳しくご紹介しています。

WP-PageNaviのページャーが正しく動かない場合の原因と解決方法

WP-PageNaviのページャーが正しく動かない場合、ある程度原因は限られてきます。
この記事を見ている人はきっとWP-PageNaviのページャーが正しく動いていない人だと思うので、これからご紹介する原因と解決方法を順番に確認してみて下さい。
きっと動くようになると思います!

wp_head()、wp_footer()の記述忘れ

既存のテーマや有料テーマを使用している場合は、あまり無いことだと思いますが、デザインに合わせて作成したオリジナルテーマの場合、意外と多いのがこの原因です。
header.phpにwp_head()、そしてfooter.phpにwp_footer()の記述忘れです。
WordPressのテーマを作成する場合、必ずこれらの関数を記述する必要があります。

まずは現在有効化されているテーマのheader.phpとfooter.phpをそれぞれ確認してみて下さい。

もし、wp_head()wp_footer()の記述忘れがある場合、これらを記述するだけで動作する可能性があります。

/* header.php */
<?php wp_head(); ?>
</head>
<body>
/* footer.php */
<?php wp_footer(); ?>
</body>
</html>

今までの経験上、メインクエリでWP-PageNaviのページャーが正しく動かない場合は、wp_head()wp_footer()の書き忘れが大半だと思います。
これを記述するだけで正しく動くようになると思います。

サブクエリに’paged’ => $paged,を指定していない

サブクエリの場合、WP-PageNaviのページャーを使う場合、以下をクエリに指定する必要があります。

$paged = get_query_var('paged') ? get_query_var('paged') : 1;

$args = array(
    'post_type' => '投稿タイプ名',
    'posts_per_page' => 10,
    'paged' => $paged,
);

この記述はサブクエリに現在、記事一覧の何ページ目を表示しているかを教えてあげるものです。
この記述がないと、サブクエリは現在表示しているページが何ページ目なのか正しく判断することが出来ません。

結果的にWP-PageNaviのページャーの「2」や「3」など、どのページを表示しても1ページ目の内容が表示されてしまいます。

WP-PageNaviのページャーの「2」や「3」を表示しても1ページ目の内容が表示されてしまう場合は、この原因である可能性が高いです。

管理画面の「1ページに表示する最大投稿数」の設定値とposts_per_pageの値が異なる

サブクエリの場合、posts_per_pageで表示件数を指定したりしますね。
この時、posts_per_pageの値と管理画面の「1ページに表示する最大投稿数」の設定値を一致させる必要があります。

ここの値です。この設定個所は管理画面の「設定」>「表示設定」と進んだページにあります。

この値と異なるとWP-PageNaviのページャーは正しく動かなくなります。

もしくは、「1ページに表示する最大投稿数」の設定値を1にしておくとWP-PageNaviのページャーは正しく動作します。

サブクエリをwp_pagenavi()の引数に指定していない

サブクエリ(WP_Query())を使用している場合、wp_pagenavi()には以下のように引数を指定する必要があります。

$query = new WP_Query( $args );

.
.
.

if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi( array( 'query' => $query ) );
}

このサブクエリをもとにページャーを生成してねという意味の引数ですね。

ここまでを踏まえて

さて、ここまでWP-PageNaviのページャーが正しく動かない場合の原因をいくつか見てきました。
最後に間違いなく正しく動くサブクエリの指定方法をご紹介します。

.
.
.
<?php wp_head(); ?>
</head>
<body>
.
.
.

<?php

$paged = get_query_var('paged') ? get_query_var('paged') : 1;

$args = array(
    'post_type' => '投稿タイプ名',
    'posts_per_page' => 10,
    'paged' => $paged,
);

$query = new WP_Query( $args );
if( $query->have_posts() ):
    while( $query->have_posts() ):
        $query->the_post();
        // 記事を出力する

    endwhile;
endif;
wp_reset_postdata();

if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi( array( 'query' => $query ) );
}

?>
.
.
.
<?php wp_footer(); ?>
</body>
</html>

このサブクエリのコードと、管理画面の「1ページに表示する最大投稿数」の設定値をposts_per_pageと同じにするか、1にしておくことで間違いなく動作すると思います。

もし、これでも動作しない場合は、使用しているWordPressのバージョンがWP-PageNaviと相性が悪い、他のプラグインが干渉している可能性があります。
この場合、解決は困難になると思います。

まとめ

いかがでしたか?
WP-PageNaviを使う場合、意外と気を付ける点がいろいろあります。
ただ、どれも基本的なことなので、気を付けていれば不具合は回避することが出来ると思います。