Пользовательская страница с переменными в 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 - это статическая страница шаблона.

Author: ide79, 2011-03-24

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-адресом и просматривать результирующие переменные запроса.

 16
Author: Jan Fabry, 2017-04-13 12:37:34