wp_title │ хук-фильтр │ WP 2.0.0

Позволяет изменить текст заголовка страницы, сформированный функцией wp_title().

Обычно этот текст выводится в HTML-теге <title> и отображается во вкладке браузера.

Обработчик должен возвращать строку. Если забыть return, заголовок может стать пустым, а последующие обработчики могут работать неправильно.

Фильтр применяется после сборки заголовка и добавления разделителя, перед выводом или возвратом результата.

Для изменения отдельных частей до сборки используйте wp_title_parts.

Функция wp_title() и этот хук условно считается устаревшими, однако они по-прежнему доступны и не помечены как устаревшие.

Рекомендуется использовать используйте поддержку title-tag, при котором WordPress формирует заголовок через wp_get_document_title(), без вызова фильтра wp_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 Введена.

Где вызывается хук

wp_title()
wp_title
wp-includes/general-template.php 1701
$title = apply_filters( 'wp_title', $title, $sep, $seplocation );

Где используется хук в WordPress

wp-includes/default-filters.php 164
add_filter( $filter, 'wptexturize' );
wp-includes/default-filters.php 165
add_filter( $filter, 'convert_chars' );
wp-includes/default-filters.php 166
add_filter( $filter, 'esc_html' );
wp-includes/default-filters.php 171
add_filter( $filter, 'capital_P_dangit', 11 );