MENU

flush_rewrite_rules()– Function –

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()が適切なタイミングで実行されていない

解決方法

  1. initフックのタイミング で実行する。
  2. 管理画面からパーマリンク設定を再保存 することでリライトルールを再生成する。

flush_rewrite_rules()の呼び出しが多すぎる

テーマやプラグインの 毎回のロード時に呼び出している。

解決方法

  1. テーマやプラグインの 有効化時に一度だけ呼び出す ように変更する。
  2. 次の例のように、 register_activation_hook() を使う

プラグイン有効化時に実行する

function on_plugin_activation() {
    flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'on_plugin_activation');

Q&A

flush_rewrite_rules() をどのタイミングで使えば良いですか?

カスタム投稿タイプやタクソノミーを追加したとき、またはパーマリンク構造を変更したときに使用します。

flush_rewrite_rules(false)flush_rewrite_rules(true) の違いは何ですか?

falseソフトフラッシュ で、キャッシュを一部残します。true完全なフラッシュ で、全てのリライトルールを更新します。

リライトルールの更新が反映されない場合はどうすればいいですか?

管理画面から パーマリンク設定を再保存 するか、コード内で flush_rewrite_rules() を適切なタイミングで実行 します。

まとめ

flush_rewrite_rules() は、 カスタム投稿タイプやタクソノミーの追加後に404エラーを防ぐために使用する重要なテンプレートタグ です。頻繁な呼び出しは推奨されないため、プラグインの 有効化時やテーマの切り替え時 に一度だけ実行するのが理想です。

カスタマイズ例

1