• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

Rewrite API/add rewrite rule

提供: WordPress Codex 日本語版
移動先: 案内検索

説明

add_rewrite_rule()を使用すると WordPress に追加でリライトルールを指定できます。ほとんどの場合、add_rewrite_tag() /en と組み合わせ使用されます。add_rewrite_tag() /en は WordPress にカスタム POST/GET 変数(クエリ文字列)を認識させます。

使い方

<?php add_rewrite_rule($regex, $redirect, $after); ?>

引数

$regex
文字列) (必須) リクエストされたURLにマッチする正規表現。オプションで1つ以上のグループを使用できる。
初期値: なし
$redirect
文字列) (必須) $regexがマッチした場合に、実際にフェッチしたいURL。マッチしたキャプチャグループを挿入するには $matches[] を使用する。
初期値: なし
$after
文字列) (オプション) 'top' または 'bottom'。'top' の場合、ルールは WordPressのすべての既存ルールに優先する。'bottom' の場合、ルールはすべての既存ルールがマッチしない場合に検査される。
初期値: "bottom"


用例

基本的な使い方

WordPressでは IDを指定することで任意のページを取得できます。

http://example.com/?p=95

次のルールをfunctions.php/en ファイルに追加すると、独自形式のURLでアクセスできるようになります。

function custom_rewrite_basic() {
  add_rewrite_rule('^leaf/([0-9]+)/?', 'index.php?page_id=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');

注意: $matches[] を使用してマッチしたURLの値を取得する際、キャプチャされたグループのデータは、0からでなく、1から始まります。

重要: リライトルールの変更後は、忘れずにリライトルールデータベースの内容をフラッシュし、再作成してください。WordPress の 管理画面から、「設定」->「パーマリンク設定」を選択し、何も変更せずに「変更を保存」をクリックしてください。

これで同じページに対して、以下の形式でアクセスできます。

http://example.com/leaf/95

カスタムクエリ文字列およびカスタムテンプレートとの使用

「Nutrition(栄養学)」のページを作成し、栄養成分を表示したいとします。ページはカスタムテンプレートを使用し、2つの引数 food variety を取ります。

テーマのルートディレクトリに以下のファイル my-custom-template.php を作成してください。

<?php
/**
 * Template Name: Nutritional Information
 */
get_header(); 

global $wp_query;
echo 'Food : ' . $wp_query->query_vars['food'];
echo '<br />';
echo 'Variety : ' . $wp_query->query_vars['variety'];
// ... more ...
get_footer(); 
?>

次に、このカスタムテンプレートを使用して固定ページを作成します。新規固定ページ作成の画面で、「テンプレート」ドロップボックスから「Nutritional Information」を選択します。タイトルや内容は空白で構いません。作成したページを公開します。

固定ページ一覧で作成したページのページIDを調べます。作成したページのタイトル上にマウスを移動すると、ブラウザのステータスバーにリンク先情報が表示されます。URLの中の POST= に続く番号がページIDです。ここでは、固定ページのページIDを 12 とします。

add_rewrite_tag() /en を使用して WordPressにカスタムクエリ文字列変数 foodvariety を認識させます。次のコードをファイル functions.php/en に追加します。

function custom_rewrite_tag() {
  add_rewrite_tag('%food%', '([^&]+)');
  add_rewrite_tag('%variety%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

作成したページは次のように呼び出すことができます。

http://example.com/index.php?page_id=12&food=milkshake&variety=strawberry

正常に呼び出されると、画面には引数で指定された値が表示されます。

さて、ページに煩雑なクエリ文字列変数を渡す代わりに、リライトルールを設定し、ユーザーフレンドリーなカスタムURLを作成できます。次のコードをファイル functions.php /en に追加し、コード中の「12」を上で調べたページIDで置換してください。忘れずにパーマリンク設定で「変更の保存」をクリックすること(上の重要参照)

function custom_rewrite_rule() {
    add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?page_id=12&food=$matches[1]&variety=$matches[2]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);

同じページを以下のURLでアクセスできます。

http://example.com/nutrition/milkshakes/strawberry/

ソースファイル

add_rewrite_rulewp-includes/rewrite.php で定義されています。


関連

API リファレンス

記事

フック

  • フィルター: root_rewrite_rules /en - ブログのルート用に生成されたリライトルールをフィルターする。
  • フィルター: post_rewrite_rules /en - パーマリンク URL 向けに生成されたリライトルールをフィルターする。
  • フィルター: page_rewrite_rules /en - 固定ページ向けに生成されたリライトルールをフィルターする。
  • フィルター: date_rewrite_rules /en - 日付ごとのアーカイブ URL 向けに生成されたリライトルールをフィルターする。
  • フィルター: search_rewrite_rules /en - 検索 URL 向けに生成されたリライトルールをフィルターする。
  • フィルター: comments_rewrite_rules /en - 最新コメントフィード URL 向けに生成されたリライトルールをフィルターする。
  • フィルター: author_rewrite_rules /en - 投稿者アーカイブ URL 向けに生成されたリライトルールをフィルターする。
  • フィルター: rewrite_rules_array /en - すべてのリライトルールを一度にフィルターする。
  • フィルター: {$permastruct}_rewrite_rules /en - タクソノミーやカスタム投稿タイプなどのカスタムパーマストラクト向けのリライトルールを作成・編集するために使える。
  • アクション: generate_rewrite_rules /en - すべてのルールが生成された後に実行される。

関数

  • add_rewrite_tag() / en - WordPress にカスタム変数 (特に、カスタムクエリストリング変数) を認識させるために使える。
  • add_rewrite_rule() / en - 新しいカスタムリライトルールを指定できる。
  • add_rewrite_endpoint() / en - /trackback/ などの新規エンドポイントを追加する。
  • flush_rules() / en - リライトルールを再生成してデータベースに保存する。
  • flush_rewrite_rules() / en - リライトルールを削除して再生成する。
  • generate_rewrite_rules() / en - パーマリンク構造からリライトルールを生成する。
  • add_permastruct() / en - 新規パーマストラクトを追加する。
  • add_feed() / en - /atom1/ のような新規フィードタイプを追加する。


外部リソース

最新英語版: WordPress Codex » Rewrite_API/add_rewrite_rule最新版との差分