2024/07/08
2023/10/07
【全対処法まとめ】 WordPressでページ送りが効かない時の対処法
WordPressの記事一覧などでページ送り(ページネーション)が上手く動かない場合の対処法をまとめました。この記事でほぼ全ての場面を網羅できているはずです。
シチュエーションごとに対処法は変わります。
↑クリックでそれぞれの対処法へリンク
原因は大きく分けて4つ
- パーマリンクの設定が正しくない
- .htaccessファイルの問題
- テーマの問題
- プラグインの競合
ほとんどの場合、パーマリンクの設定が原因です。WordPressがページを正しく認識できていないので、そこを調整していきます。
投稿一覧ページのページナビのphpは正しく記述されている前提で進めていきます。
※環境によっては上手くいかないことも有り得るので必ずバックアップを取ってから作業してください。
https://〇〇/page/2 以降が404エラーになる
結論、URLから/category/を消すための有名なパーマリンク設定が悪さをしています。
一度パーマリンク設定を確認してみましょう。管理画面「パーマリンク」から、カスタム構造に “/%category%/%postname%/” と設定、カテゴリーベースに “.” を設定している場合、ページネーションが効かず404エラーとなります。
手っ取り早い解決法としては、パーマリンク設定からカテゴリーベース“.” を削除、パーマリンク構造を投稿名などに設定すると正常に機能します。
ただ、これではURLの/category/が消えないので、パーマリンクは変更せずfunctions.phpに下記コードを追加します。
function adjust_category_paged( $query = []) {
if (isset($query['name'])
&& $query['name'] === 'page'
&& isset($query['page'])
&& isset($query['category_name'])) {
$query['paged'] = intval($query['page']); // 念のため整数化しておく
unset($query['name']);
unset($query['page']);
}
return $query;
}
add_filter('request', 'adjust_category_paged');
2ページ目のクエリ(データベースからデータを取得するためのリクエスト)が正常に機能するよう指示を与えました。
これでページ送りが正常に動くはずです。
これでもダメだった場合は基本に立ち返って設定を確認していきます。
常に1ページ目が表示される
ページ送りのボタンを押しても常に1ページ目の内容が表示される不具合です。
URLはhttps://〇〇/page/2とページ数が進んでいくのにも関わらず表示される記事が変わらないのが特徴です。
これ上級者でも解決法がわからずハマってしまうことがありますが、原因は簡単です。
front-page.phpもしくは、固定ページにカスタム投稿一覧を表示している場合、この症状が出ます。
functions.phpに下記コードを追加すれば解決します。
add_action( 'parse_query', 'my_parse_query' );
function my_parse_query( $query ) {
if ( ! isset( $query->query_vars['paged'] ) && isset( $query->query_vars['page'] ) )
$query->query_vars['paged'] = $query->query_vars['page'];
}
なぜ不具合が起きるのか
WordPressでは投稿一覧はそれ専用のページ(category.phpやarchive.phpなど)が用意されており、固定ページに投稿一覧を表示することが想定されていません。
そのため、デフォルトの状態ではページナビ(次のページへのリンクやページ番号の表示など)を自動的に生成しません。
先程のfunctions.phpのコードでWordPressがページング情報を正しく解釈できるように修正することで不具合を解消した形です。
何をやってもダメだった場合
意外な落とし穴も多いので設定に間違いがないか確認していきます。
ページナビの埋め込み位置
ページナビの埋め込みコードは必ずwp_reset_postdata();やwp_reset_query();などの上に記載します。プラグイン「wp-pagenavi」を使用している場合でも同様です。
wp_reset_postdata();やwp_reset_query();の下に設置している場合、投稿データを取得できず正常に機能しません。
表示設定の件数を確認
WordPress管理画面の「設定」→「表示設定」→「1ページに表示する最大投稿数」を1に設定します。
ここの数字が投稿一覧ページのループ文(posts_per_page)で指定している数より大きい場合も不具合が発生します。そのため、表示件数は必ずposts_per_pageで指定するようにしましょう。