add_rewrite_rule() の使い方|説明・引数・注意点

説明

add_rewrite_rule() は、独自のURLの規則(リライトルール)を追加する関数です。追加したあとは、ルールの更新が必要です。

基本構文

add_rewrite_rule( string $regex, string|array $query, string $after = 'bottom' ): void

引数

  • $regex:URLにマッチする、正規表現
  • $query:対応するクエリ(index.php?... の形)
  • $after:top か bottom(ルールを置く位置)

戻り値

戻り値はありません。

使い方(サンプル)

add_action( 'init', function () {
	add_rewrite_rule( '^shop/([0-9]+)/?$', 'index.php?post_type=product&p=$matches[1]', 'top' );
} );

注意点

  • init フックの中で、呼びます。
  • 追加したあとは、ルールを、一度だけ更新します(flush_rewrite_rules()、またはパーマリンク設定の保存)。
  • 独自のクエリ変数を使うときは、query_vars フィルターで、登録します。

実務での使いどころ

  • カスタムのURL(/shop/123/ など)を、投稿や、クエリに、結びつけるとき。

よくあるミスと対処

  • init フックの外で、呼んでいる。
  • 追加しただけで、ルールを更新しておらず、404になる。
  • ルールの更新(flush_rewrite_rules())を、毎回のリクエストで呼んでいる。
  • 独自のクエリ変数を、登録していない。値が、取得できない。

NG例

add_action( 'init', function () {
	add_rewrite_rule( '^shop/([0-9]+)/?$', 'index.php?shop_id=$matches[1]', 'top' );
	flush_rewrite_rules(); // 毎回のリクエストで、実行される
} );

OK例

add_action( 'init', function () {
	add_rewrite_rule( '^shop/([0-9]+)/?$', 'index.php?shop_id=$matches[1]', 'top' );
} );
add_filter( 'query_vars', function ( $vars ) {
	$vars[] = 'shop_id';
	return $vars;
} );
// ルールの更新は、有効化時などに、一度だけ

使い分け早見表

関数 役割
add_rewrite_rule() リライトルールを追加する
flush_rewrite_rules() ルールを更新する
get_query_var() クエリ変数の値を取得する

関連項目

flush_rewrite_rules()、get_query_var()、register_post_type()

公式リファレンス:add_rewrite_rule() | WordPress Developer Resources

コメント

タイトルとURLをコピーしました