【WordPress】ページネーションが動かないとき

最終更新日: 公開日: 2022年08月

WordPress でカテゴリーページにおいて,ページ送り(ページネーション)のリンクがおかしくなって動作しないというときの対策方法について書く.


下の「1 2 ... 5 次のページへ」がページネーション

ページネーション(pagination)のおかしくなった具体例

設定→パーマリンク設定

「カスタム構造」を選択していて,

/%category%/%postname%

のような設定をしている.

/カテゴリーのスラッグ/記事名

というファイルパスになる場合

ページネーションのリンク

上記のような設定をしている場合に,カテゴリーページにページネーションを置いた場合,カテゴリーページのページ送りのリンクは

/カテゴリーのスラッグ/page/ページ番号

というリンクになる.
そこまでは問題ないのだが,そのままこのリンクを押すと Not Found となる.
実際には

/category/カテゴリーのスラッグ/page/ページ番号

という呼び方なら正しくページ送りのページに飛べる.
このような状態になった時の解決方法を説明する.

本当のページ

このような時の確認方法として,まず

/index.php?category_name=カテゴリースラッグ&paged=ページ番号

で正しく表示されるかどうかは確認しておく.これが表示されないようだと根本的におかしいのでこのページの方法では解決できない.

便利なプラグイン

結局,この問題というのはリライトルール(書き換え規則)がうまく行っていないので,そのルールがどのように適用されているかについて確認すればよい.

こういう時にリライトルール(rewrite rule)を確認する便利なプラグインが存在する.

これを入れて,実際に404エラーになる URL を入れてテストしてみる.

そうすると動きが分かりやすくなる.

なお,このプラグインはずっと入れておく必要はないので,リライトルールの書き替えがうまく行った場合は削除して構わない.

Rewrite Rules Inspector の使い方

以下では,http://exp/ というサイトで試している.
case というカテゴリーがあったとしよう.

この時,
http://exp/category/case/page/2
だと正常にアクセス出来る.

その場合に,
http://exp/case/page/2
でアクセスしようとしたら,Page Not Found と怒られる.

このような場合にどのように書き替えるかを説明する.

書き換える前

このエラーが出る状態で,rewrite rule inspector で確認すると,以下のようになる.

これを見ると分かるが,固定ページを探しに行っている.
そして,そのような固定ページはないので 404 Not Found となる.

書き換えた後

functions.php に以下のように書き換えルールを書く.
今まで存在していたルールを上書きする.

/* rewite_rules_array
 * リライトルールの書き替え
 */
function my_category_rewrite_rules_array($rules) {
  // 順番の入れ替え
  $exp = '(.+?)/page/?([0-9]{1,})/?$';
  $add_rules[$exp] = $rules[$exp];
  unset($rules[$exp]);
  return $add_rules + $rules;
}
add_action('rewrite_rules_array', 'my_category_rewrite_rules_array', 10, 1);

同じ正規表現にマッチした場合に,固定ページに行かないでカテゴリのページ送りページにマッチさせるように書き替える.

functions.php でリライトルールを書き替えた場合,Flush Rules でリライトルールを更新しておく.
(「パーマリンク設定」で保存する操作と同じ)

 

Contact

ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.

 
   
contact
Pagetop