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().

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, в случае несоблюдения этого условия в 99% случаях ваш коммент будет удалён, а автор заблокирован. Печалька.