# Custom Post Type Permalinks 1.0.0以上で発生する、カスタム投稿へのパーマリンクが404になってしまう現象について。

- リンク: https://torounit.com/blog/custom-post-type-permalinks-1-0-0%e4%bb%a5%e4%b8%8a%e3%81%a7%e7%99%ba%e7%94%9f%e3%81%99%e3%82%8b%e3%80%81%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%8a%95%e7%a8%bf%e3%81%b8%e3%81%ae%e3%83%91%e3%83%bc/
- 公開日: 2015-04-13T15:27:32+09:00
- 作成者: Toro\_Unit

ちょっと報告が複数あったので対処法などをまとめておきます。

**wp_loaded のactionの最後のほうで、Rewrite Ruleの登録を行うように変更した**ことに
絡んで発生した不具合です。

flush_rewrite_rulesをregister_post_typeやregister_taxonomyの直後に動作させている
場合に発生します。

    ```decode:true
    register_post_type( 'hoge', $post_type_args );
    register_taxonomy( 'piyo', 'hoge', $taxonomy_args );
    flush_rewrite_rules();
    ```

flush_rewrite_rulesはURLをどのように分解するかというRewrite Ruleというモノを全て
削除し再生成するものです。このRewrite Ruleを参照してWordPressはURLを理解しています。

flush_rewrite_rulesはとても重いので毎回実行すべきものでは無いです。ではいつ動作する
のかと言うことですが、管理画面のパーマリンク設定を更新したときに実行されます。その
ときに、Rewrite Ruleはデータベースに保存されます。

参考：

 * [WordPress » パーマリンクの設定がうまく反映されない時の対処法 | MORILOG](http://morilog.com/wordpress/tips/flush_rewrite_rules/)
 * [関数リファレンス/WP Rewrite – WordPress Codex 日本語](http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Rewrite#.E4.BE.8B)
 * [Function Reference/flush rewrite rules « WordPress Codex](https://codex.wordpress.org/Function_Reference/flush_rewrite_rules)

Custom Post Type Permalinks 1.0.0からは、register_post_typeやregister_taxonomyの
時点でrewrite_ruleの登録を行いません。その段階でflush_rewrite_rulesを実行してしまう
と、変更されていないモノから生成してしまうので404になってしまうと言うことです。

Codexでもflush_rewrite_rulesは毎回に動作させるのはバットプラクティスだと名言され
ているので、この問題についてプラグイン側で修正をする予定はありません。

もし、flush_rewrite_rulesをregister_post_typeやregister_taxonomyの後に動作させて
いる場合は、flush_rewrite_rulesを削除してください。
