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(); でリライトルールを更新するのを忘れないようにしましょう。
コメント