web-dev-qa-db-ja.com

カスタムURLルートを作成する方法

私は非常に独特な要求を持っています、うまくいけば、私は混乱し過ぎずにそれを説明することができます。外部XMLファイルから取得したいくつかのプロパティをリストしたページテンプレートを作成しました。これまでのところ問題はありません。URLは次のようになっているとしましょう。

http://www.example.com/properties/

各プロパティには、それに関する詳細情報を表示する「単一プロパティ」ページにユーザーをリダイレクトする必要があるリンクがあります。私はこのようなリンクを作る方法があるかどうか疑問に思いました:

http://www.example.com/properties/123

123はプロパティのIDです。 properties/some_idのようなURLを持っているのであれば(single.phppage.phpファイルのような)ビューファイルをロードできるようにしたいのですが、このURL条件に固有のものです。

これは可能ですか?

46

これをあなたのテーマのfunctions.phpに追加するか、 プラグインに入れてください

add_action( 'init', 'wpse26388_rewrites_init' );
function wpse26388_rewrites_init(){
    add_rewrite_rule(
        'properties/([0-9]+)/?$',
        'index.php?pagename=properties&property_id=$matches[1]',
        'top' );
}

add_filter( 'query_vars', 'wpse26388_query_vars' );
function wpse26388_query_vars( $query_vars ){
    $query_vars[] = 'property_id';
    return $query_vars;
}

これは、クエリ変数/properties/を設定して、ページ名propertiesに続く数字の任意の組み合わせで、property_idへのリクエストを指示する書き換え規則を追加します。パーマリンク設定ページにアクセスして書き換えルールをフラッシュして保存するようにしてください。そうすれば、この新しいルールが含まれます。

page-properties.phpテンプレートでは、get_query_var('property_id')はプロパティIDが設定されていればそれを返し、そうでなければデフォルトのプロパティページを表示します。

54
Milo

それを行う別の方法:

add_action('init', function() {
    add_rewrite_rule( '^properties/([0-9]+)/?',
                      'index.php?pagename=properties&property_id=$matches[1]',
                      'top' );
}, 10, 0);

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

コーデックスリライトAPI /リライトルールを追加

コーデックスリライトAPI /リライトタグを追加

9