カスタム投稿タイプのページ送り 2ページ目が404エラーになって大苦戦した話

初心者の初心者による初心者のためのwordpress

どうも、おしゃキミです。こんばんは。WordPress初心者の私が本日つまずいたのはカスタム投稿時のページ送りのリンク切れ。

具体的には”記事一覧のページ送り(ページャー)の2ページ目以降が404エラーになってしまう”というもの。

カスタム投稿タイプのページ送り 2ページ目が404エラーになって大苦戦した話

  1. パーマリンク(URL)の設定を確認
  2. 記事一覧ページと個別ページが競合していたのが問題
  3. カスタム投稿タイプ名とスラッグ名を別にする

パーマリンク(URL)の設定を確認

まず最初に思いついたのはダッシュボートで設定するパーマリンク(URL)の設定。
こちらの設定をデフォルトにするとページ送りは機能していたのですが、その他の設定にすると”404エラー”が発生。

URLもカスタマイズにしたかったので、他の部分でどうにか改善しなければ!
理想のパーマリンク設定:http://sample.com/%postname%/

一人で悩んでもしょうがないってことで特技のググる!を発動!
見つかった対策をかたっぱしから試してみたはいいものの全然治らない…。

プラグインを使用する方法をいくつか試しましたが、うまくいかなかったことと必要以上にプラグインを使用したくなかったため他の方法を探すことに。

そんな時に巡りあったのがこちらのサイト様↓

カスタム投稿タイプの一覧でページ送りがリンク切れになった際の対処法
どうやらリライトの名称が競合してしまうので、カスタム投稿タイプ設定で複数系と単数系を分ければいいということらしい。

引用:WordPressのカスタム投稿タイプの一覧ページでページ送りを利用する
追記:2016年8月22日 引用元のサイト様はリンク切れとなってしまいました。

 

そういえば私が困っていた箇所もカスタム投稿の一覧のページ送りでした。
なるほど~カスタム投稿タイプ名とスラッグ名が同じだとページ送りでエラーが発生するのね。

記事一覧ページと個別ページが競合していたのが問題

先ほどの記事をよく読むと、どうやら記事一覧ページと個別ページが競合している。らしいということがわかりました。

言葉だけでは伝わりづらいかと思うのでサンプルのURLで説明していきます。

■ 404エラーになってしまう時のURL
記事一覧1ページ目:https://osha-kimi.com/item/
記事一覧2ページ目:http://sample.com/item/page/2/
個別(各記事)ページ:https://osha-kimi.com/item/sample/

上記のままだと記事一覧2ページ目以降が404エラーになっていたんですね。一体、なにがいけなかったのか…!

個別ページのURLが「https://osha-kimi.com/item/sample」となっていることに着目します。そして記事一覧2ページ目のURLを見ると「https://osha-kimi.com/item/page/2/」と表示されている。

もしかして記事一覧の2ページ目が「item(カテゴリ)内の“page/2/という個別ページ”」として認識されている!?

つまり「page/2/」という個別ページ探してエラーを吐き出している状態なのではないかと判断しました。

カスタム投稿タイプ名とスラッグ名を別にする

原因がわかったところで早速、修正していきたいと思います。

カスタム投稿タイプ名とスラッグ名が別になるように修正。(私はfunctions.phpで直接カスタム投稿タイプ設定をしていたため、そこを書き換え)
ちなみに親ページとなる方を複数系、個別ページを単数形にするといいらしいです。

■ 修正後のURL
記事一覧1ページ目:http://sample.com/items/
記事一覧2ページ目:http://sample.com/items/page/2/
個別(各記事)ページ:http://sample.com/item/aaa

こうなれば、「items = 記事一覧ページ」「item = 個別(各記事)ページ」と認識されるので「page/2/」が記事一覧のページの2番目と認識されるわけです。

さっそくページ送り機能を修正後確認してみると…無事2ページ目以降も表示されました!
 

ちなみに検索するとよく出てくるのが”Custom Post Type UI”というカスタム投稿タイプを管理するプラグインでの対処方法なのですが、私はプラグインはなるべく使わないように構築していたのでページ送りもカスタム投稿タイプもプラグインを使用していませんでした。

なのでfunctions.phpで直接カスタム投稿タイプ設定をしていたのですが、スラッグ名を書き換えるだけでページ送りが出来るようになりました。

以上、カスタム投稿タイプのページ送り 2ページ目が404エラーになって大苦戦した話でした。