ide
  • 0
Новичок

Пользовательская страница с переменными в URL. Хороший URL с add_rewrite_rule

  • 0

Использование WP3.1

У меня есть пользовательская страница с WP_Query, и запрос получает динамические переменные из URL-адреса. И я хочу безопасные переменные и чистые URL-адреса.

Пример:

carpage/?carmodel=honda&location=finland

К

carpage/honda/finland/

Я сделал add_rewrite_rule в functions.php, и это работает, но я не уверен, что это безопасно.

Функции.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');

И в пользовательском шаблоне я получаю вары

Может кто-нибудь, пожалуйста, помогите мне с этим. Как я могу сделать это безопасным для использования и правильно ли это в WP3.1?

Как правильно сделать add_rewrite_rule в этом случае:

carpage/honda/finland/

(просто дефисы и строчные буквы в URL) carpage — это статическая страница шаблона.

Share
  1. Я думаю, что add_rewrite_tag() это не нужно, и его можно заменить прямым добавлением переменных в общедоступные переменные запроса:

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

    • 0

Оставить ответ

You must login to add an answer.