WordPressでカスタム投稿タイプを作成し新規記事を投稿して表示を確認しようとしたところ、ページが表示されずに404エラーページが表示されてしまうという現象が発生しました。single.phpすら表示されてない…。
というわけで今回はこれの対処法が3つほどあるので解説します。
対処法1.パーマリンク設定を何もいじらずに保存
管理画面から「設定→パーマリンク設定」と進みます。
パーマリンクの設定などは何もいじらずにそのまま「変更を保存」をクリックします。
これでパーマリンクが更新され、個別記事ページが表示されるようになっていると思います。
やっていることとしてはWordPressのデータベースにあるwp_optionsテーブルのrewrite_rulesを書き換えるという感じです。
大体の場合はこれで直るみたいです。まだ直らない人は次へ進んでください。
対処法2.flush_rules()してリロードする
以下のコードをfunctions.phpのどこでもいいので追加して、ページをリロードしてみてください。
global $wp_rewrite;
$wp_rewrite->flush_rules();
上記のコードはWordPressのリライトルールを更新するという処理をしています。
なお、一度リロードしたらこのコードは削除してください。残しておくとパフォーマンスが低下する可能性があるみたいです。
対処法3.Custom Post Type Permalinksを無効化する
「Custom Post Type Permalinks」 プラグインでカスタム投稿タイプのパーマリンクを設定していると個別記事が表示されない場合があるみたいです。
エラーが直らないならこのプラグインが原因かもしれないので、一度無効化して表示できるか確認してみてください。もし表示できるならこいつが原因ということですね。
僕はこのプラグインが原因でエラーになったことはないので具体的な解決策はよくわかりませんが、このプラグインなしで頑張るなり別の方法を考えるなりする必要があります。
一応このプラグインのバージョンを下げたら解決したという記事が見つかったので参考程度にリンクを張っておきます。
>WordPress カスタム投稿がおかしい時に疑った1つのプラグイン
対処法4.それでも直らない場合は…
僕の場合は上の3つを全部試しても直らなかったんですよね。
最終的に分かった原因は「カスタム投稿タイプのスラッグがWordPressの内部処理と競合している」というものでした。
カスタム投稿タイプのスラッグを「cat」にしていたのですが、これが原因で個別記事が表示できるものもあれば表示できないものもあるという感じでおかしなことになっていたみたいです。
試しに別のスラッグに変えたら今度はちゃんと表示できるようになりました。
まあこれに関してはかなりのレアケースだと思いますが、上の3つを試しても直らない場合は「カスタム投稿タイプのスラッグがWordPressの内部処理と競合しそうなスラッグか?」を考えて、別のスラッグに変更して表示確認をするのがいいと思います。
WordPressの内部処理と競合しそうなスラッグ名はつけないようにするのが大事ですね。
まとめ
カスタム投稿タイプの個別記事が表示されないというのはありがちなエラーなので対処法を知っておくと安心です。
対処法自体はどれも簡単なので手当り次第試してみるのがいいですね。