【WordPress】ページネーションがおかしいとき
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 でリライトルールを更新しておく.
(「パーマリンク設定」で保存する操作と同じ)
ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.
※このページと無関係な内容のセールスはご遠慮ください.