とっちゃん@nyanco! です。
今回はWordPressの固定ページがarchive.phpで表示される!?謎の現象で困ったけど解決したので原因と解決策を共有するよというお話です。
意外な落とし穴といった感じのトラブルでしたにゃ~
問題発生!固定ページのフォーマットが変?!
先日、業務でWordPressで構築された既存サイトの作業をしていた時のこと。
あれ、「about」という固定ページを作成したのになんか表示が変ですにゃ~
既存のWordPressサイトに新しい固定ページを追加する作業をサクッとこなしいざ公開したところ、なぜか投稿一覧のような画面に…??
どうも、本来はお知らせなどの新着情報一覧を表示するアーカイブページに固定ページがなってしまっている…というナゾ現象に遭遇しました。
簡単なお仕事のはずが…
固定ページなのに新着一覧ページになるとか意味不明ですにゃ~
原因調査開始!
ちなみにWordPressテーマは外部の人が作成したオリジナルテーマで、詳細な仕様が分かる人間はいないというあるあるな状況。
とりあえず基本も含めた設定などを見直してみることに。
- プラグインを全部無効化→状況変わりなし。プラグインが原因ではない
- WordPressの「設定」>「表示設定」は「固定ページ」で以下の通りで問題はなさそう
・ホームページ:トップページ
・投稿ページ:新着情報
続いて、表示されているページのテンプレートファイルが確認できるプラグイン「Show Current Template」を導入して確認してみると、問題の固定ページは archive.php という投稿の一覧ページを表示するテンプレートファイルが適用されていることが判明。
あれ、固定ページのテンプレートファイルは page.php じゃなかったですかにゃ~?
ズバリその通りで、固定ページであれば page.php のテンプレートファイルで表示されるはず。。
これは表示がおかしいというより、固定ページなのになぜ archive.php が読み込まれてしまうのか?という何か根本的な原因がありそうです。
原因はスラッグの重複!
さらに詳しく調査すべく、WordPressが現在どのようなクエリを実行しているか確認できるプラグイン「Debug Bar」を導入してみることに。
問題の固定ページにアクセスし、管理バーに表示されるDebug Barの「デバック」を確認してみると…
- リクエスト:about
- クエリー文字列:category_name=about
- 一致したリライト・ルール:(about)/?$
- 一致したリライト・クエリー:category_name=about
ここで注目すべきはクエリー文字列の category_name= です(固定ページならここは pagename= であるべき)。
カテゴリーネーム?
ハッ!もしかして…
カテゴリーという文字列を見てハッとなりました。
すぐに投稿のカテゴリーを確認すると、スラッグが「about」と設定されているカテゴリーを発見!
つまり、投稿カテゴリーに「about」というスラッグを使っているのに、固定ページのスラッグにも全く同じ文字列の「about」を設定してスラッグが重複(競合)しているという状況。
- カテゴリーアーカイブURL:https://www.nyanco.me/about
- 固定ページのURL:https://www.nyanco.me/about
WordPressのテンプレート階層において、カテゴリーアーカイブのURLと固定ページのURLが完全に一致してしまったため、WordPressがカテゴリーアーカイブの表示を優先し、結果として archive.php が適用されてしまった、というのが今回のトラブルの真相でした。
スラッグの重複を回避する対策について
…原因が分かると、なんかめちゃくちゃ初歩的なミスのような気がしますにゃ~
重複なんて初心者がやりがちなミス!と思いがちですが、それがそうでもなくWordPressならではの意外な落とし穴と言えます。
キモは、カテゴリーアーカイブ(カテゴリー一覧ページ)のURLはカテゴリースラッグを設定すると自動的に生成されるURLである、という点です。
固定ページや投稿ページだとすでに存在するスラッグを設定しようとすると重複回避で自動的に末尾に「-1」のような枝番がつくので「あ、重複してる!」と気付くことができますが、今回のようなカテゴリースラッグと固定ページのスラッグの重複に関してはそういった重複回避の処理はされないので気付きにくいんですね。
つまりはカテゴリーやタグのスラッグを全て把握した上で固定ページのスラッグを設定する必要があるってことですかにゃ~
それも一つの手ですが、カテゴリーやタグの数が多いと全て把握するのは現実的でないので、以下のようなカテゴリー・タグの命名ルールを徹底するのも回避策として有効です。
- カテゴリースラッグ:cat-xxxxx
- タグスラッグ:tag-xxxxx
にゃるほど!
冒頭にカテゴリー・タグのスラッグだと分かる文字列を付けるってことですにゃ~
これなら確かに重複しないですにゃ~
とはいえ、今回のように既存サイトの場合はすでにあるスラッグをおいそれと変更できないことも多いので、Debug Barなどのデバックツールを活用して即トラブルシューティングできるようになるのもWordPressを運営していく人の必須スキルと言えそうです。
おわりに
本記事がどなたかの参考になれば幸いです。
今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧
コメント