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は静的なテンプレートページです。
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を使用して結果のクエリ変数を確認できます。