wp_title
Позволяет изменить текст заголовка страницы, сформированный функцией wp_title().
Обычно этот текст выводится в HTML-теге <title> и отображается во вкладке браузера.
Обработчик должен возвращать строку. Если забыть return, заголовок может стать пустым, а последующие обработчики могут работать неправильно.
Фильтр применяется после сборки заголовка и добавления разделителя, перед выводом или возвратом результата.
Для изменения отдельных частей до сборки используйте wp_title_parts.
Функция wp_title() и этот хук условно считается устаревшими, однако они по-прежнему доступны и не помечены как устаревшие.
Рекомендуется использовать используйте поддержку title-tag, при котором WordPress формирует заголовок через wp_get_document_title(), без вызова фильтра wp_title.
Для настройки такого заголовка доступны хуки:
- pre_get_document_title - подмена заголовка до формирования. Непустое значение прерывает дальнейшую сборку.
- document_title_separator - изменение разделителя.
- document_title_parts - изменение частей заголовка.
- document_title - изменение собранной строки.
Использование
add_filter( 'wp_title', 'wp_kama_title_filter', 10, 3 );
/**
* Function for `wp_title` filter-hook.
*
* @param string $title Page title.
* @param string $sep Title separator.
* @param string $seplocation Location of the separator (either 'left' or 'right').
*
* @return string
*/
function wp_kama_title_filter( $title, $sep, $seplocation ){
// filter...
return $title;
}
- $title(строка)
- Сформированный заголовок, включая разделитель и пробелы вокруг него.
По умолчанию не содержит название сайта. На главной странице сайта обычно передаётся пустая строка. - $sep(строка)
- Разделитель, переданный в wp_title(). По умолчанию
»(»). Может быть пустой строкой.
На момент вызова фильтра разделитель уже включён в$title. Изменение переменной$sepвнутри обработчика не заменит его в готовой строке. - $seplocation(строка)
Расположение разделителя, переданное в wp_title():
right- справа от заголовка. Порядок частей составного заголовка также разворачивается.leftили другое значение - слева от заголовка.
По умолчанию передаётся пустая строка
'', которая работает какleft.
Примеры
#1 Добавление названия сайта, описания и номера страницы
Пример для темы, которая выводит <title> через wp_title().
В header.php, внутри <head>:
<title><?php wp_title( '|', true, 'right' ); ?></title>
В functions.php:
add_filter( 'wp_title', 'mytheme_filter_wp_title', 10, 3 );
function mytheme_filter_wp_title( $title, $sep, $seplocation ) {
if ( is_feed() ) {
return $title;
}
$site_name = get_bloginfo( 'name', 'display' );
if ( 'right' === $seplocation ) {
$title .= $site_name;
} else {
$title = $site_name . $title;
}
$description = get_bloginfo( 'description', 'display' );
if ( $description && ( is_home() || is_front_page() ) ) {
$title .= " $sep $description";
}
$page_number = max(
(int) get_query_var( 'paged' ),
(int) get_query_var( 'page' )
);
if ( $page_number >= 2 && ! is_404() ) {
$title .= " $sep " . sprintf(
__( 'Page %s', 'mytheme' ),
$page_number
);
}
return esc_html( $title );
}
Код добавляет название сайта, на главной и странице записей дописывает описание сайта, а при пагинации добавляет номер страницы. Учитывается как пагинация списка записей (paged), так и разбиение одной записи на страницы (page). При вызове в контексте ленты заголовок остаётся без изменений.
При разделителе справа результат для записи будет выглядеть так: Название записи | Название сайта.
Замените mytheme на текстовый домен своей темы. Название сайта дополнительно выводить в header.php не нужно.
WordPress подключает к этому хуку esc_html() с приоритетом 10. Обработчик из functions.php с таким же приоритетом обычно выполняется уже после него. Поэтому добавленный текст нужно экранировать самостоятельно, как в примере.
Список изменений
| С версии 2.0.0 | Введена. |
Где вызывается хук
$title = apply_filters( 'wp_title', $title, $sep, $seplocation );
Где используется хук в WordPress
add_filter( $filter, 'wptexturize' );
add_filter( $filter, 'convert_chars' );
add_filter( $filter, 'esc_html' );
add_filter( $filter, 'capital_P_dangit', 11 );