WordPressのカスタム投稿タイプを追加後、ページは存在しているはずなのに404になる場合の解決方法
最近WordPressでカスタム投稿タイプを追加していたら、追加後のページで404エラーが発生しました。
正確には「プレビュー」のときには表示されたり、「公開」前までは表示されているのにカスタム投稿タイプの投稿を公開したタイミングで404になります。
パーマリンク設定で「変更を保存」を押す
WordPress管理画面の[設定]→[パーマリンク設定]で「変更を保存」ボタンを押すと解決しました。
特に変更を変えたりする必要はなく、そのまま「変更を保存」を押して問題ありません。
WordPressのURLは「リライトルール」というルールを定義して、そのルールに従ってどの処理を実行するか、どのページを出すか判断しています。
カスタム投稿タイプの追加などで新たにURLを追加したものの、リライトルールは昔のままだったりすると404になることがあるみたいです。
パーマリンク設定の「変更を保存」ボタンを押すとこのリライトルールを再生成してくれるので、それで解決しました。
非推奨:コードでリライトルールを再生成する
リライトルールの再生成は「flush_rules」を使うとできますが、この方法は非推奨です(パーマリンクの更新の方が手軽なので、あえてこの方法を利用する必要もありません)。
global $wp_rewrite;
$wp_rewrite->flush_rules( false );
WordPressのリライトルールを再生成してくれるのですが、コード側でやってしまうと毎回再生成されることになります。
URLの構造変更はたまにしか行わないので、ムダな処理が毎回実行されるのはよくないですし、思わぬ不具合に繋がる可能性もあるので避けた方がよさそうです。