Функция add_rewrite_tag()
в WordPress используется для добавления новых тегов перезаписи, которые могут быть использованы в ЧПУ (человеко-понятные URL). Это позволяет разработчикам создавать более читабельные URL для своих сайтов. В данной статье мы рассмотрим, как использовать эту функцию, а также приведем несколько уникальных примеров.
add_rewrite_tag( string $tag, string $regex, string $query = '' )
- $tag: имя нового тега перезаписи (обязательный параметр).
- $regex: регулярное выражение для замены тега в правилах перезаписи (обязательный параметр).
- $query: строка, которую нужно добавить к переписанному запросу. Должна заканчиваться знаком
=
(необязательный параметр, по умолчанию — пустая строка).
Зачем использовать add_rewrite_tag()
?
Эта функция помогает WordPress распознавать пользовательские переменные запроса. Чаще всего она используется в сочетании с add_rewrite_rule()
для создания правил перезаписи для страниц с пользовательскими шаблонами. При использовании этой функции необходимо помнить, что если вы регистрируете тег, который уже существует, он будет перезаписан.
Пример 1: Регистрация пользовательского тега перезаписи
В этом примере мы создадим тег перезаписи %city%
, который будет использоваться для создания URL, содержащих название города:
add_action('init', 'register_city_rewrite_tag');
function register_city_rewrite_tag() {
add_rewrite_tag('%city%', '([^&]+)', 'city=');
}
В этом коде мы регистрируем новый тег %city%
, который принимает любое значение, и связываем его с переменной city
в запросе.
Пример 2: Создание правила перезаписи с использованием пользовательского тега
Теперь давайте создадим правило перезаписи, которое будет использовать наш новый тег:
add_action('init', 'add_city_rewrite_rule');
function add_city_rewrite_rule() {
add_rewrite_rule('^visit/([^/]*)/?', 'index.php?city=$matches[1]', 'top');
}
Теперь URL вида example.com/visit/moscow/
будет правильно обрабатываться, и переменная city
будет установлена на moscow
.
Пример 3: Получение значений из переписанных URL
После того как вы зарегистрировали тег и правило, вы можете получить значение переменной запроса в своем шаблоне:
if (isset($wp_query->query_vars['city'])) {
$city = $wp_query->query_vars['city'];
echo "Добро пожаловать в " . esc_html($city) . "!";
}
Этот код выведет приветственное сообщение с названием города, извлеченным из URL.
Пример 4: Обновление ссылки с использованием фильтра
Чтобы использовать тег %city%
в ваших ссылках, вы можете использовать фильтр post_link
:
add_filter('post_link', 'filter_city_permalink', 10, 2);
function filter_city_permalink($permalink, $post) {
if (false === strpos($permalink, '%city%')) {
return $permalink;
}
$terms = wp_get_post_terms($post->ID, 'city');
$city = !empty($terms) ? $terms[0]->slug : 'default-city';
return str_replace('%city%', urlencode($city), $permalink);
}
еперь, если в вашем URL присутствует тег %city%
, он будет заменен на актуальное значение.
Не забудьте сбросить правила перезаписи!
После добавления или изменения тегов перезаписи обязательно сбросьте правила. Это можно сделать, зайдя в настройки постоянных ссылок и нажав «Сохранить изменения». Даже если вы не вносили изменений, это приведет к сбросу правил.
Заключение
Функция add_rewrite_tag()
является мощным инструментом для создания читабельных URL в WordPress. Используя ее в сочетании с add_rewrite_rule()
, вы можете значительно улучшить структуру URL вашего сайта и сделать его более удобным для пользователей и поисковых систем. Не забудьте всегда сбрасывать правила после внесения изменений, чтобы ваши настройки вступили в силу.