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.9
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 );
}