# 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>`

Схема:

```text
document_title_parts  →  pre_get_document_title  →  <title>

```

---

#### 🔎 Что такое `document_title_parts`

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

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

```

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

---

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

##### Для поста:

```php
array(
    'title' => 'Название поста',
    'site'  => 'Название сайта',
);

```

##### Для главной:

```php
array(
    'site'    => 'Название сайта',
    'tagline' => 'Описание сайта',
);

```

---

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

##### Пример: заменить только title

```php
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;
});

```

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

---

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

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

    unset($parts['site']);

    return $parts;
});

```

Результат:

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

```

---

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

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

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

```

---

#### 🆚 document\_title\_parts vs pre\_get\_document\_title

<table id="bkmrk-%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80-%D0%A7%D1%82%D0%BE-%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D1%82-%D0%9A%D0%BE"><thead><tr><th>Фильтр</th><th>Что меняет</th><th>Когда использовать</th></tr></thead><tbody><tr><td>`document_title_parts`</td><td>части title</td><td>тонкая настройка</td></tr><tr><td>`pre_get_document_title`</td><td>весь title строкой</td><td>полный контроль</td></tr></tbody></table>

👉 **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 без дублирования