flush_rewrite_rules()
は、 WordPressのリライトルールを更新 するためのテンプレートタグです。カスタム投稿タイプやパーマリンクの構造を変更した際に使用されます。
目次
機能の説明
flush_rewrite_rules()
は、WordPressが URL(パーマリンク)を解析するために使用するリライトルールを再生成し、保存 します。- 主に、 カスタム投稿タイプやカスタムタクソノミーの追加後 に、404エラーを回避するために使用されます。
- データベースに変更を反映 するため、頻繁な呼び出しは推奨されません。
シンプルなコード例
function update_rewrite_rules() {
flush_rewrite_rules();
}
add_action('init', 'update_rewrite_rules');
init
フック でflush_rewrite_rules()
を呼び出し、WordPressのリライトルールを更新します。
使い方の解説
flush_rewrite_rules()
は、 カスタム投稿タイプ などの変更を検出した際に呼び出します。これにより、404エラーの発生を防ぎます。- この関数は、 重い処理 であるため、 テーマやプラグインの有効化時に一度だけ実行する のが理想的です。
function create_custom_post_type() {
register_post_type('book', array(
'label' => 'Books',
'public' => true,
'rewrite' => array('slug' => 'books'),
));
flush_rewrite_rules(false); // ソフトフラッシュで更新
}
add_action('init', 'create_custom_post_type');
ソースコードの解説
register_post_type()
で カスタム投稿タイプbook
を追加します。flush_rewrite_rules(false)
は、 ソフトフラッシュ(オプションでfalse
)を使って一部のキャッシュを残しながらルールを更新します。
一緒に使うことが多い関連タグ
register_post_type()
register_post_type()
は、 カスタム投稿タイプを登録 するためのテンプレートタグです。
function setup_custom_post_type() {
register_post_type('movie', array(
'label' => 'Movies',
'public' => true,
'rewrite' => array('slug' => 'movies'),
));
flush_rewrite_rules();
}
add_action('init', 'setup_custom_post_type');
カスタム投稿タイプmovie
を作成し、URLのリライトルールをflush_rewrite_rules()
で更新します。
register_taxonomy()
register_taxonomy()
は、 カスタムタクソノミーを登録 するためのテンプレートタグです。
function setup_custom_taxonomy() {
register_taxonomy('genre', 'book', array(
'label' => 'Genre',
'rewrite' => array('slug' => 'genre'),
));
flush_rewrite_rules();
}
add_action('init', 'setup_custom_taxonomy');
genre
というカスタムタクソノミーをbook
投稿タイプに紐付け、URLを更新します。
追加情報を取得したい場合
get_post_type()
で取得できる投稿タイプ情報
$post_type = get_post_type();
echo '現在の投稿タイプ: ' . $post_type;
出力できる情報
- name: 投稿タイプの名前
- public: 公開ステータス
- rewrite: リライトルール
想定されるトラブル
404エラーが解消されない
flush_rewrite_rules()
が適切なタイミングで実行されていない。
解決方法
init
フックのタイミング で実行する。- 管理画面からパーマリンク設定を再保存 することでリライトルールを再生成する。
flush_rewrite_rules()
の呼び出しが多すぎる
テーマやプラグインの 毎回のロード時に呼び出している。
解決方法
- テーマやプラグインの 有効化時に一度だけ呼び出す ように変更する。
- 次の例のように、
register_activation_hook()
を使う。
プラグイン有効化時に実行する
function on_plugin_activation() {
flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'on_plugin_activation');
Q&A
まとめ
flush_rewrite_rules()
は、 カスタム投稿タイプやタクソノミーの追加後に404エラーを防ぐために使用する重要なテンプレートタグ です。頻繁な呼び出しは推奨されないため、プラグインの 有効化時やテーマの切り替え時 に一度だけ実行するのが理想です。
カスタマイズ例
1