Пользовательская страница с переменными в URL. Хороший URL-адрес с правилом добавления перезаписи
Использование WP3.1
У меня есть пользовательская страница с WP_Query, и запрос получает динамические переменные из URL-адреса. И мне нужны безопасные переменные и чистые URL-адреса.
Пример:
Карпаж/?модель автомобиля=honda и местоположение= финляндия
ДО
Карпаж/honda/финляндия/
Я сделал add_rewrite_rule в functions.php и это работает, но я не уверен, что это безопасно использовать.
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 в этом случае:
Карпаж/honda/финляндия/
(только дефисы и маленькие буквы в URL) carpage - это статическая страница шаблона.
1 answers
Я думаю, что 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;
}
Кроме того, в настоящее время вы разрешаете одну или две косые черты спереди, но ни одной сзади. Я думаю, вы хотите переместить /?
в конец регулярного выражения. Часть [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]
.
Если вы хотите отладить свои правила перезаписи, я рекомендую мой плагин анализатора перезаписи , он позволяет вам играть с URL-адресом и просматривать результирующие переменные запроса.