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


50

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

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

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

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

123プロパティのIDはどこになりますか。以下のように私はURLを持っているのであればproperties/some_id、私は、ビュー(のようなファイルをロードできるようにするsingle.phpか、page.phpこのURLの状態へのファイル)が、特定の。

これは可能ですか?

回答:


57

これをテーマの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/れたpagename propertiesに続く数字の任意の組み合わせで要求を送信する書き換えルールが追加property_idされます。必ずパーマリンク設定ページにアクセスして、書き換えルールをフラッシュして保存してください。この新しいルールが含まれるようになります。

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


4
これは私にとっては作業に近いものでしたが、次を追加する必要がありました:add_filter( 'init'、 'flushRules'); function flushRules(){global $ wp_rewrite; $ wp_rewrite-> flush_rules(); }
tooshel

19
@tooshelリクエストごとにルールをフラッシュしたくないのは間違いありません。高価な操作であり、サイトのクロールが遅くなります。ルールをフラッシュする必要があるのは、プラグインのアクティベーション時、またはパーマリンク設定ページにアクセスするだけです。
ミロ

ええ、私はそれを得る。。。しかし、あなたがテストしているとき、それがそこにあるのは素晴らしいことです!
tooshel

3
賢く書き換えURLの正規表現は次のようになります^properties/([0-9]+)/?。そうでなければ、次のようなものに一致しますexample/properties/1
ライアンテイラー14

@RyanTaylorそれについて確かですか?example/properties/1テストしてもキャプチャされません。
ミロ

9

別の方法:

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);

Codex Rewrite API /書き換えルールの追加

Codex Rewrite API /書き換えタグの追加


2
受け入れられた答えは4.7(および4.8)で機能しますが、なぜそうならないのかはわかりません。コードは基本的に同じことをadd_rewrite_tag実行しており、クエリ変数をquery_varsフィルターと同じ配列に追加します。
ミロ

@Miloはおそらく私には機能しませんでしたが、4.7が手元にないので確認できません。回答を編集します。
クリスチャンレスキュー

@Milo個人的にはタグを書き換えることを好みますが、受け入れられた答えをテストし、動作します。ただし、個人的な好みもあります。
ジャックヨハンソン

1
@JackJohansson書き換えタグは、permastructで使用するときに必要です。この場合、WordPressが決して使用しない余分なデータです。
ミロ

両方のルールを同じメソッドに追加し、
最終的に
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.