まさにメモ。

原因が何であるかはもとより、症状がどんなものかもよく把握できていないですが、とてもハマってしまったのでメモ。現在は症状は治まりました。

ちなみにこの投稿タイプはサイト公開後に追加で設けたものですが、ほかのものはローカルで動作確認してから全体をアップロードしました。
また、パーマリンク設定は /%postname%/ です。
このあたりにひょっとしたら解決の糸口があったのかもしれません。

で、何が起きたか?

  • あるカスタム投稿タイプを表示すべく、適切なURLを指定しても 404 not found のページが出力される。(header も 404)
  • 短縮URL(例: /?p=1234)と呼ばれるものを入力した場合に、リダイレクト先は正しく遷移した。
  • 同じものをローカルでは正しく表示できた。
  • 問題があるのはひとつの投稿タイプのみで、ほかは正常に動作した。

何をして上手くいかなかったか?

  • 該当する投稿タイプの記事を追加・編集・削除(これはこの後幾度と無く繰り返す)
  • 全てのテーマファイルを削除。その後再インストール。
  • 投稿タイプを定義するためのプラグインファイルを全削除後再インストール。
  • カスタム投稿タイプのパラメータを変えてみる。(投稿タイプ名、support引数)
  • 上手くいってる投稿タイプの定義をコピーし、投稿タイプ名のみ変更してみる。

ほかにも何かやったような気がしましたが忘れました。

で、次のことを行って上手くいきました。

  • パーマリンクの設定で、オプションのカテゴリーベース(もとは空欄のまま)投稿タイプの名前(に限らず何でも良いかもしれない)を入力して更新。
  • 再びパーマリンクの設定のカテゴリーベースを空に戻して更新。

なぜか、このタイミングで上手く表示されました。また、実際は最後の二つの作業の間にサイトを何度も表示させて見たり、該当する投稿タイプの追加・更新・削除を何度も行ったりしましたが、後で再現してみたところ、どうやらこのアクションが引き鉄となって正常に更新される模様。

何が原因で表示されなかったのか、そしてなぜこれで表示されるようになったのか不明ですが、もし同じ症状にあわれた方がいらっしゃったら、一度お試しください。

ps:最初はまさに雲をつかむように不安な手応えでしたが、このあと同じような症状の再現ができ、やはり同じ手順で解消できました。rewriteの設定が上手く更新されていないのかも。私のコードがWordPress準拠になっていないのかも知れず、そのせいでトリガーになるコードが呼び出されていないだけかもしれません。パーマリンク関連の設定をいじることでrewrite関連の値を再設定してるはずなので、そのお陰で解決できているのでしょう。


追加:後日、とても参考になるエントリーを発見。と同時に、私の見立てもあながち間違いではなかったことに安堵。

flush_rewrite_rules( false )

こんな関数があったとは。起動時に毎回呼び出す必要も無いでしょうから、投稿タイプの初回登録時にのみコールするようにしてみよう。