add_rewrite_tag() WP 2.1.0
Добавляет/обновляет тег запроса ( например: '%pagetype%' ), который можно использовать в ЧПУ. Этот тег будет заменен на регулярное выражение, а оно затем на конструкцию запроса вида: ?pagetype=mypage
.
Обычно эта функция используется в связке с add_rewrite_rule(), которая создает новое правило перезаписи для ЧПУ. Часто используется в WordPress для постоянных страниц с отдельным шаблоном.
Если использовать add_rewrite_tag()
, для регистрации новой переменной запроса, которая уже существует в WordPress, прежняя переменная будет перезаписана.
Важно: функцию нужно вызывать во время или до события init
.
Хуков нет.
Возвращает
Ничего не возвращает.
Использование
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 5.6.2
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 );
}