Skip to main content

Filter document_title_parts

Хороший вопрос 👍
document_title_parts — это низкоуровневый фильтр WordPress, который управляет частями заголовка <title>, до того как они будут склеены в одну строку.

Разберём подробно.


🧠 Как WordPress формирует <title>

Современный WordPress (4.4+) делает так:

  1. Собирает массив частей заголовка

  2. Пропускает его через фильтр document_title_parts

  3. Склеивает части через разделитель

  4. Пропускает итог через pre_get_document_title

  5. Выводит <title>

Схема:

document_title_parts  →  pre_get_document_title  →  <title>

🔎 Что такое document_title_parts

Это фильтр, который возвращает массив:

array(
    'title'   => 'Заголовок страницы',
    'page'    => 'Page 2',
    'tagline' => 'Описание сайта',
    'site'    => 'Название сайта',
);

WordPress сам решает, какие части включать.


📌 Пример стандартного массива

Для поста:
array(
    'title' => 'Название поста',
    'site'  => 'Название сайта',
);
Для главной:
array(
    'site'    => 'Название сайта',
    'tagline' => 'Описание сайта',
);

✅ Как использовать document_title_parts

Пример: заменить только title
add_filter('document_title_parts', function ($parts) {

    if (is_singular()) {
        $seo_title = get_field('seo_title');

        if ($seo_title) {
            $parts['title'] = $seo_title;
        }
    }

    return $parts;
});

✔ меняется только заголовок
✔ имя сайта остаётся
✔ слоган остаётся (если включён)


🔥 Пример: убрать название сайта

add_filter('document_title_parts', function ($parts) {

    unset($parts['site']);

    return $parts;
});

Результат:

<title>Заголовок страницы</title>

🔥 Пример: кастомный порядок

add_filter('document_title_parts', function ($parts) {

    return array(
        'title' => $parts['title'],
        'site'  => $parts['site'],
    );
});

🆚 document_title_parts vs pre_get_document_title

Фильтр Что меняет Когда использовать
document_title_parts части title тонкая настройка
pre_get_document_title весь title строкой полный контроль

👉 SEO-плагины используют оба.


⚠ Важно помнить

  • document_title_parts не выводит <title>

  • он НЕ строка, а массив

  • pre_get_document_title срабатывает позже


✅ Рекомендация для SEO

Для кастомного SEO:

  • использовать document_title_parts → управлять логикой

  • использовать pre_get_document_title → крайний приоритет


🎯 Итог

document_title_parts — управляет частями <title>
✔ Работает до склейки
✔ Позволяет убрать site/tagline/page
✔ Идеален для SEO без дублирования