MENU

add_rewrite_rule()

add_rewrite_rule() は、WordPress のリライトルールを追加するための関数です。

この関数を使うことで、カスタム URL 構造を定義し、特定のページやクエリへリダイレクトさせることができます。

例えば、「example.com/news/2025/03/」のようなカスタム URL を作成し、それを index.php などに適切にマッピングすることができます。カスタム投稿タイプやカスタムタクソノミーの URL 設計を柔軟に変更したい場合に役立ちます。

目次

機能の説明

add_rewrite_rule() は、WordPress のデフォルトの URL 構造とは異なるカスタム URL を処理するために使用されます。この関数を使うことで、以下のような URL のカスタマイズが可能になります。

主な用途

  • 特定のパターンの URL を動的にマッピング
  • クエリ文字列をより読みやすい URL に変換
  • カスタム投稿タイプやタクソノミーの URL を変更
  • 特定のページをリダイレクトするカスタムルールを作成

シンプルなコード例

add_rewrite_rule('news/([0-9]{4})/([0-9]{2})/?$', 'index.php?year=$1&monthnum=$2', 'top');
  • 'news/([0-9]{4})/([0-9]{2})/?$':URL のパターン(例: news/2025/03/
  • 'index.php?year=$1&monthnum=$2':クエリ文字列(year=2025monthnum=03 に変換)
  • 'top':リライトルールの優先度(top なら最優先)

このコードを追加すると、example.com/news/2025/03/ という URL が index.php?year=2025&monthnum=03 に変換されます。

使い方の説明

基本的な使い方

カスタム投稿タイプ event の URL を /event/イベントID/ の形式に変更する場合のコードです。

function custom_event_rewrite_rule() {
    add_rewrite_rule('event/([0-9]+)/?$', 'index.php?post_type=event&p=$1', 'top');
}
add_action('init', 'custom_event_rewrite_rule');
  • 'event/([0-9]+)/?$'/event/123/ という URL をキャッチ
  • 'index.php?post_type=event&p=$1':クエリ変数 p=123 を渡して event 投稿タイプの詳細ページを表示
  • init フック内で add_rewrite_rule() を実行

カスタムクエリ変数を使う

カスタムクエリ変数 city を追加し、example.com/weather/tokyo/ という URL を index.php?page_id=100&city=tokyo に変換する場合の例。

function custom_weather_rewrite_rule() {
    add_rewrite_rule('weather/([^/]+)/?$', 'index.php?page_id=100&city=$1', 'top');
}
add_action('init', 'custom_weather_rewrite_rule');

この場合、URL example.com/weather/tokyo/ にアクセスすると、ページ ID 100 が表示され、city=tokyo のクエリが渡されます。

一緒に使うことが多い関連タグ

add_rewrite_tag()

カスタムクエリ変数を追加する。

add_rewrite_tag('%city%', '([^/]+)');

このコードを functions.php に追加すると、%city% というプレースホルダーを URL ルール内で使用できます。

flush_rewrite_rules()

リライトルールをリセットする。

flush_rewrite_rules();

カスタムルールを追加した後に、管理画面で「パーマリンク設定を保存」しなくても即時反映できます。

add_query_var()

カスタムクエリ変数を追加する。

function add_custom_query_vars($vars) {
    $vars[] = 'city';
    return $vars;
}
add_filter('query_vars', 'add_custom_query_vars');

これにより、city というカスタムクエリ変数が WordPress 内で使えるようになります。

追加情報で取得したい場合

現在のリライトルールを確認

WordPress のリライトルールを一覧表示するには、次のコードを使用します。

global $wp_rewrite;
print_r($wp_rewrite->wp_rewrite_rules());

想定されるトラブル

URL にアクセスしても 404 エラーが出る

解決方法

  • flush_rewrite_rules();init フックで実行する
  • 「設定 > パーマリンク設定」で「変更を保存」をクリックしてリライトルールを更新する
  • add_rewrite_rule() の URL パターンと index.php への変換が正しいか確認する

Q&A

add_rewrite_rule() を使ったのに URL 変更が反映されません。

flush_rewrite_rules(); を実行したり、「パーマリンク設定を保存」してリライトルールを更新してください。

add_rewrite_rule()index.php?query_var=$1 のように書いたけど、カスタムクエリ変数が取得できません。

add_query_var() を使って、カスタムクエリ変数を WordPress に登録してください。

add_rewrite_rule() の優先度 'top''bottom' の違いは?

'top' は優先的に適用され、既存のルールよりも先に処理されます。'bottom' は後に適用されます。

まとめ

add_rewrite_rule() を使うと、カスタム URL 構造を柔軟に作成できます。add_rewrite_tag()add_query_var() と組み合わせることで、より高度な URL 設計が可能になります。

ルールを適用した後は flush_rewrite_rules(); でリライトルールを更新するのを忘れないようにしましょう。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次