Как в WordPress красиво передать параметры пользовательскому шаблону (custom template) в адресной строке (т.е. методом GET)?

Вопрос

Предположим, я создал свой собственный шаблон страницы под названием «films.php». Я хочу передавать в него параметры через URL. У меня получилось сделать это так: http://www.yoursite.com/?page_id=4&genre=vestern&country=usa

А если задать постоянные ссылки в «/%postname%», то можно ещё и так: http://www.yoursite.com/films?country=vestern&country=usa

Но мне такой вариант кажется не очень красивым и не очень ЧПУ-шным. Я бы хотел передать параметры вот-так: http://www.yoursite.com/films/vestern/usa
Как такое реализовать на WordPress?

Ответ №1

Добавьте в «function.php» следующий код:

add_action(''init'', ''rewrite_rules'');
function rewrite_rules(){
add_rewrite_tag(''%genre%'',''([^&]+)''); // Регистрируем параметр genre
add_rewrite_tag(''%country%'',''([^&]+)''); // // Регистрируем параметр country
add_rewrite_rule(''^films/([^/]*)/([^/]*)/?$'',''index.php?pagename=films&genre=$matches[1]&country=$matches[2]'',''top''); // Добавляем новое правило, 3-й параметр top говорит о том, что правило необходимо проверять первым.
}

Здесь мы с помощью регулярного выражения создали новое правило, которое мы поставили в соответствие с запросом адресной строки. Теперь если WordPress встретит в URL имя нашей страницы «films», а после неё будет идти косая черта и какая-то строка, то эта строка будет восприниматься как параметр «genre», а за следующей косой чертой будет «country». Доступ в нашем шаблоне к этим параметрам можно будет получить не через массив $_GET, а с помощью другого, специального массива $wp_query, содержащего параметры адресной строки.

Как работать с параметрами в шаблоне:

<php
// Template Name: My template name
if (isset($wp_query->query_vars[''genre''])&&isset($wp_query->query_vars[''country''])) { // Если оба параметра заданы
$genre = urldecode($wp_query->query_vars[''genre'']);
$country = urldecode($wp_query->query_vars[''country'']);
echo ''Жанр: '' . $genre . ''<br>'';
echo ''Страна: '' . $country;
}
?>

Возможно, после добавления этого кода потребуется зайти в меню настроек «Постоянные ссылки» и пересохранить их (просто нажать кнопку «Сохранить изменения»), чтобы начали действовать новые правила. Вот так.

No responses yet

Добавить комментарий