add_rewrite_tag()
Добавляет/обновляет тег запроса ( например: '%pagetype%' ), который можно использовать в ЧПУ. Этот тег будет заменен на регулярное выражение, а оно затем на конструкцию запроса вида: ?pagetype=mypage
.
Обычно эта функция используется в связке с add_rewrite_rule(), которая создает новое правило перезаписи для ЧПУ. Часто используется в WordPress для постоянных страниц с отдельным шаблоном.
Если регистрируется переменная запроса, которая уже существует в WordPress, прежняя переменная будет перезаписана.
Важно: функцию нужно вызывать на событии init или ранее.
Смотрите список занятых названий для переменных запроса.
Хуков нет.
Возвращает
null
. Ничего не возвращает.
Использование
add_rewrite_tag( $tagname, $regex );
- $tagname(строка) (обязательный)
- Название переменной, которая будет использована в качестве переменной запроса. Название нужно обернуть в
%
. Например,pagetype
указывается как%pagetype%
. - $regex(строка) (обязательный)
- Часть регулярного выражения, которому должно подходить значение $tagname. Выражение оборачивается скобками. Например, если переменная запроса:
?pagetype=pages
, нужно регуляркой описать pages:([^&]+)
- $query(строка)
- Строка запроса, которая будет добавлена в конце запроса, должна оканчиваться на
=
. Например:post_type=book&name=
. В результате, в правиле перезаписи, после = будет установлен match элемент соответствующий параметру $regex (например $matches[1])
По умолчанию: ''
Примеры
#1 Регистрация новой переменной запроса в WP
Этот пример зарегистрирует тег запроса pagetype
:
add_action('init', 'rewrite_rule_my'); function rewrite_rule_my(){ add_rewrite_tag( '%pagetype%', '([^&]+)' ); }
Процедура необходима, когда создается правило перезаписи функцией add_rewrite_rule(). Обычно такое правило создается для постоянных страниц с уникальным шаблоном.
Получение значений
Значение переменных запроса с перезаписанных УЛРов получается через $wp_query
.
Например, у нас была ссылка sitemap?pagetype=pages
мы указали правило перезаписи и ссылка превратилась в sitemap/pages
, теперь чтобы правильно получить значение pages
для использования в PHP и быть уверенным что оно относится именно к переменной запроса pagetype
, в шаблоне используем:
get_query_var('pagetype');
или
global $wp_query; $wp_query->query_vars['pagetype'];
Получить $_GET параметр когда используется ЧПУ невозможно. Т.е. при /sitemap/pages
$_GET['pagetype']
будет пуста.
Заметки
- Global. WP_Rewrite. $wp_rewrite WordPress rewrite component.
- Global. WP. $wp Current WordPress environment instance.
Список изменений
С версии 2.1.0 | Введена. |
Код add_rewrite_tag() add rewrite tag WP 6.7.1
function add_rewrite_tag( $tag, $regex, $query = '' ) { // Validate the tag's name. if ( strlen( $tag ) < 3 || '%' !== $tag[0] || '%' !== $tag[ strlen( $tag ) - 1 ] ) { return; } global $wp_rewrite, $wp; if ( empty( $query ) ) { $qv = trim( $tag, '%' ); $wp->add_query_var( $qv ); $query = $qv . '='; } $wp_rewrite->add_rewrite_tag( $tag, $regex, $query ); }