WordPress 固定ページ内でページネーションを使ったら404になる原因と対策

あんまりやりたくないパターンだけど、WordPressの固定ページテンプレート内で記事一覧を表示させ、あまつさえページネーションもつけたいというときがある。

このページネーションの2ページ目以降が404になってはまったけど、動かない原因と対策がわかったのでメモ。




なぜ404となるのか

固定ページ内でページネーションを使うと404になる原因についてですが、たぶん以下のような感じだと思います。

  • ページネーションの仕様上、2ページ目とかのURLに、/page/2/とかがつく
  • 例えば/hoge/page/2/のようなパーマリンクになる
  • そんな固定ページはないので、404になる。

まぁ、固定ページでそもそもページネーションできるようになっていないんでしょうね。そりゃそうよ。

解決策

/page/2/みたいにならなければいいんじゃないか。

WordPressでは、上記のようなURL構造でなくとも、?page=2みたいなパラメータでもページネーションになります。

ただし、デフォルトだと?page=2にアクセスしても、/page/2/にリダイレクトされてしまう。

よって、ページネーションのURLの形式を?page=2にして、なおかつ勝手にリダイレクトさせないようにすればOK

実装

functions.phpに以下を記述

続いて、ページネーションのほうは以下のようにする。

paginate_links()というナイスな関数を使うのが肝で、パラメータでURLのフォーマットを設定することができる。他にもいろいろパラメータを設定できる優れもので、僕もこんな関数があることを初めて知りました。具体的な使用方法はWordPress Codexを参照してください。

次回以降普通のページネーションでもこれ使おう…

あとは、paginate_links()で出力されるhtmlに合わせ、スタイリングしてやりましょう。

以上、現場からでした。

これでも動かない場合は、こっちも見てみてね。

WordPressで、「カスタム投稿タイプのページネーション2ページ目以降(2ページ目以降じゃなくても、nページ目以降で)が404になる」と...

イチオシ!書籍

シェアしてくだちい

フォローしてくだちい

コメント

  1. yukio より:

    5年も前の記事にコメントしてもあれですが…

    条件を「固定ページのとき」にしたいはずなので、
    functions.php の 4行目は、
    is_archive ではなく is_page(‘【固定ページのスラッグ】’) が正しいかと…
    あと、フィルターフック系は関数を閉じる前に、return $redirect_url; を書いておかないと、なにも return しないパターンが生まれてしまうから間違っているかと…

    本来やりたいことは
    【固定ページで条件を満たすときにリダイレクトしない】
    なはずが
    【アーカイブページで条件を満たすときにリダイレクトしない、そして他のページでもリダイレクトしない】
    というとんでもないコードになっているかと…