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=2025
、monthnum=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 構造を柔軟に作成できます。add_rewrite_tag()
や add_query_var()
と組み合わせることで、より高度な URL 設計が可能になります。
ルールを適用した後は flush_rewrite_rules();
でリライトルールを更新するのを忘れないようにしましょう。
コメント