wp_get_document_title() – вывод тайтла страницы

Когда-то давно, для того, чтобы вывести заголовок страницы (тут я имею ввиду то, что у нас находится между тегами <title>, мы производили различные махинации с функцией wp_title(), больше этого делать не нужно, так как wp_get_document_title() более правильная, универсальная и автоматизированная в этом отношении.

Существует два возможных способа использования этой функции.

Первый – вставляем между тегами <head> это:

<title><?php echo wp_get_document_title() ?></title>

Второй – используем функцию add_theme_support() в вашем файле functions.php и больше ничего делать не нужно – функция wp_get_document_title() сработает автоматически через функцию/хук wp_head(). В этому случае тегов <title>, прописаных в файлах темы быть не должно!

add_theme_support( 'title-tag' );

Как формируются заголовки:

  • is_front_page(),
    главная страница,
    {Название сайта} – {Описание сайта}
  • is_404(),
    страница ошибки 404,
    Страница не найдена – {Название сайта}
  • is_search(), страница результатов поиска,
    Результаты поиска «{Поисковая фраза}» – {Название сайта}
  • is_post_type_archive(),
    архивы типа записей,
    {Множественное число названия CPT} – {Название сайта}
  • is_tax(), is_category(), is_tag(),
    архивы любых таксономий,
    {Заголовок элемента таксономии} – {Название сайта}
  • is_home() ИЛИ is_singular(),
    страница блога не на главной, либо страница записи/страницы
    {Заголовок страницы} – {Название сайта}
  • is_author()
    страница архива автора
    {Отображаемое имя автора} – {Название сайта}
  • is_year()
    страница архива по годам
    {Год} – {Название сайта}
  • is_month()
    страница архива по месяцам
    {Месяц и год} – {Название сайта}
  • is_day()
    страница архива по дням
    {Тупо дата} – {Название сайта}

Также при нахождении на страницах постраничной навигации is_paged() будет добавляться  – Страница {Номер страницы}.

Изменение разделителя заголовка «–» через хук

Функция имеет внутри себя несколько хуков, самой простой позволяет изменить знак разделения, использующийся в заголовке, например если вы вдруг захотите использовать запятую или «|», то можете поменять это следующим кодов в ваш functions.php:

add_filter( 'document_title_separator', function() {
	return '|';
});

Удаление / Изменение некоторых частей заголовков

Окей, вы наверное заметили, что {Название сайта} (ну заметили же?) добавляется в каждой из ситуаций, а что если вы не хотите, чтобы оно добавлялось? Тут нас спасает хук document_title_parts.

add_filter( 'document_title_parts', function( $title ) {
 
	// $title['title'] – первая часть заголовка
	// $title['page'] – существует при нахождении на 2 и далее странице постраничной навигации
	// $title['tagline'] – описание сайта во второй части заголовка после разделителя
	// $title['site'] – название сайта во второй части заголовка
 
	if( ! empty( $title['site'] ) ) {
		unset( $title['site'] );
	}
 
	return $title;
 
} );

Хочется отметить, что хук довольно умный, если мы удаляем вторую часть, то и разделитель тоже исчезнет! Ну и конечно же вы можете не только удалять какие-то определённые части заголовков, но и изменять их:

add_filter( 'document_title_parts', function( $title ) {
 
	if( ! empty( $title['site'] ) ) {
		$title['site'] = 'Версия для печати';
	}
 
	return $title;
 
} );

Создание собственных правил формирования произвольных заголовков

А это уже место для творчества различных SEO-плагинов, а именно – хук pre_get_document_title. Он работает таким образом, что если возвращает что-либо, а не пустой результат, то функция дальше не выполняется и лишь возвращает результат из хука. Как-то так.

В качестве примера давайте попробуем использовать этот хук для того, чтобы получать заголовок поста из произвольных полей, если они заданы, если же нет, то выводим значение по умолчанию.

add_filter( 'pre_get_document_title', function(){
 
	if( is_singular() && ( $title = get_post_meta( get_the_ID(), 'seo_title', true ) ) ) {
		return $title;
	}
 
	return '';
 
} );
  • Используйте is_singular(), если хотите, чтобы код срабатывал для записей, страниц и любых произвольных типов постов, is_single() – если вам это нужно только для записей, is_page() – только для страниц
  • Можете также почитать и про функцию get_post_meta().

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

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

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал