web-dev-qa-db-ja.com

URLに変数を含むカスタムページ。 add_rewrite_ruleのいいURL

WP3.1を使う

WP_Queryを持つカスタムページがあり、クエリがURLから動的変数を取得します。そして安全な変数ときれいなURLが欲しいのです。

例:

carpage /?carmodel =ホンダ&ロケーション=フィンランド

カーページ/ホンダ/フィンランド/

私はfunctions.phpにadd_rewrite_ruleを作り、それは動作しますが、iamがこれを使用しても安全であるかどうかわからない。

Functions.php

  function fcars() {

  add_rewrite_rule('carpage/[/]?([a-zA-Z-]*)[/]?([a-zA-Z-]*)$', 'index.php?pagename=carpage&var1=$matches[1]&var2=$matches[2]');

  add_rewrite_tag('%var1%', '[a-zA-Z]+');
  add_rewrite_tag('%var2%', '[a-zA-Z]+');
}

add_action('init', 'fcars');

そしてカスタムテンプレートで私はvarsを得ます

誰かが私を助けてください。どうすればこれを安全に使用できますか。これはWP3.1での正しい方法です。

この場合add_rewrite_ruleを作成する正しい方法は何ですか?

カーページ/ホンダ/フィンランド/

(urlにハイフンと小文字のみ)carpageは静的なテンプレートページです。

7
ide79

add_rewrite_tag()は必要ではないと思いますし、変数をパブリッククエリvarsに直接追加することで置き換えることができます。

// Either directly (in your init hook):
$wp->add_query_var( 'var1' );
$wp->add_query_var( 'var2' );

// Or via a filter:
add_filter( 'query_vars', 'wpse12965_query_vars' );
function wpse12965_query_vars( $query_vars )
{
    $query_vars[] = 'var1';
    $query_vars[] = 'var2';
    return $query_vars;
}

また、現在前面に1つまたは2つのスラッシュを許可しますが、背面には許可しません。 /?を正規表現の末尾に移動したいと思います。スラッグの[a-zA-Z-]部分は、[^/](スラッシュを除くすべて)と書かれていることもありますが、この場合はおそらく違いはありません。

書き換え規則を次のように書きます。

add_action( 'init', 'wpse12065_init' );
function wpse12065_init()
{
    add_rewrite_rule(
        'carpage(/([^/]+))?(/([^/]+))?/?',
        'index.php?pagename=carpage&var1=$matches[2]&var2=$matches[4]',
        'top'
    );
}

(/([^/]+))?は、グループ全体をオプションにします。したがって、/carpage/carpage/hondaおよび/carpage/honda/finlandは、末尾にオプションのスラッシュを付けて機能するはずです。 /用の追加のグループが必要なので、変数は次のキャプチャグループ内にあります。したがって、$matches[1]$matches[2]になり、$matches[2]$matches[4]になります。

書き換え規則をデバッグしたい場合は、 私のRewriteアナライザプラグイン をお勧めします。これを使用すると、URLを使用して結果のクエリ変数を確認できます。

16
Jan Fabry