Skip to content

Все для WordPress, веб-розробки — і не тільки

🔧 Як налаштувати заголовки WordPress: 4 техніки через functions.php

🔧 Як налаштувати заголовки WordPress: 4 техніки через functions.php

Заголовки у WordPress — це не просто текст угорі сторінки. Вони працюють на вас одразу в чотирьох напрямах: SEO (title tag у SERP), навігація (вкладка браузера), дизайн (візуальна ієрархія на сторінці) та редакційний контроль (що пишуть автори). Але стандартних налаштувань адмінки вистачає лише на базовий рівень, для тонкого налаштування потрібен код.

Проблема загострюється, коли над сайтом працює кілька авторів. Один пише заголовки на 120 символів і ламає верстку. Другий використовує слова, які ваш партнер заборонив за контрактом. Третій забуває, що заголовок сторінки в SERP і на сайті — це два різні поля. Вручну за всіма не встежиш.

Нижче, чотири конкретні техніки налаштування заголовків WordPress через functions.php. Кожна вирішує своє завдання: від автоматичного скорочення довжини до програмної заборони стоп-слів. Код використовує документовані фільтри WordPress і перевірений на WP 6.x, у кінці, блок частих запитань за темою.

💡 Швидкий огляд:

  • Автоматично обмежуємо довжину заголовка через фільтр the_title, не даємо авторам зламати верстку
  • Змінюємо вирівнювання заголовка поста через single.php, без плагінів і правок CSS
  • Блокуємо публікацію постів із забороненими словами через хук transition_post_status
  • Змінюємо роздільник title-тега та додаємо кастомні заголовки через метаполя

Як обмежити довжину заголовка WordPress

Довгий заголовок здатен зруйнувати найпродуманішу верстку. На головній сторінці, де виводяться анонси, заголовок зі 120 символів вилазить за межі картки, і дизайн виглядає зламаним. Особливо боляче це б'є по сайтах із сіткою з кількох колонок.

Рішення, фільтр the_title, який обрізає заголовок до заданого ліміту під час виведення на сторінці. Сам запис у базі залишається недоторканим, скорочується лише відображуваний текст.

Код для functions.php:

1function sdstudio_limit_title_length( $title ) {
2 $max = 60;
3 if ( mb_strlen( $title ) > $max ) {
4 return mb_substr( $title, 0, $max ) . ' …';
5 }
6 return $title;
7}
8add_filter( 'the_title', 'sdstudio_limit_title_length' );

Що тут відбувається: mb_strlen рахує символи коректно для кирилиці (на відміну від strlen, який рахує байти). У разі перевищення ліміту в 60 знаків заголовок обрізається, і в кінець додається три крапки, читач розуміє, що це не повний текст. Число 60 можна замінити на будь-яке інше під вашу верстку.

Де застосовувати вибірково? Якщо обрізати заголовки потрібно лише в певному місці (скажімо, у віджеті популярних постів), обгорніть add_filter в умовний тег:

1if ( is_home() || is_front_page() ) {
2 add_filter( 'the_title', 'sdstudio_limit_title_length' );
3}

Цей самий підхід працює для is_archive(), is_category() і будь-якого іншого контексту.

Як змінити вирівнювання заголовка поста

Теми WordPress бувають різні. Одні дають вибір вирівнювання в кастомайзері, інші, ні. Якщо ваша тема з другої категорії, заголовок за замовчуванням виводиться зліва, і налаштувань для цього в адмінці ви не знайдете.

Вирівнювання заголовка задається в шаблоні single.php, файлі, який відповідає за відображення окремого поста. Усього чотири кроки:

Редактор теми WordPress single.php з кодом вирівнювання заголовка
  • Відкрийте Зовнішній вигляд → Редактор теми (або файл single.php через FTP/хостинг-панель)
  • Знайдіть рядок <?php the_title(); ?>, саме він виводить заголовок
  • Обгорніть його в тег із потрібним вирівнюванням

Вирівнювання вліво (за замовчуванням):

1<?php the_title(); ?>

По центру:

1<div style="text-align: center;"><?php the_title(); ?></div>

Вправо:

1<div style="text-align: right;"><?php the_title(); ?></div>
  • Збережіть файл і відкрийте будь-який пост, заголовок стане в задану позицію

Спосіб примітивний, але робочий для будь-якої теми. Більш чистий варіант, додати CSS-клас через фільтр body_class і стилізувати через таблицю стилів, але для швидкої правки інлайн-стилю достатньо.

Як заблокувати небажані слова в заголовках

Текстове попередження авторам («будь ласка, не пишіть слово X у заголовках») працює до першого забутого дедлайну. Рано чи пізно хтось опублікує заголовок із забороненою фразою, і в кращому разі пост побачать усередині команди, у гіршому, партнер або конкурент.

Програмне блокування вирішує проблему радикально: WordPress просто не дає опублікувати пост, якщо заголовок містить стоп-слово. Автор бачить повідомлення про помилку і змушений виправити текст до публікації.

Код functions.php для блокування заборонених слів у заголовках WordPress

Код для functions.php:

1function sdstudio_block_forbidden_title_words( $new_status, $old_status, $post ) {
2 if ( 'publish' !== $new_status || 'publish' === $old_status ) {
3 return;
4 }
5
6 $restricted = array( 'word1', 'word2', 'word3' );
7 $title = $post->post_title;
8
9 foreach ( $restricted as $word ) {
10 if ( mb_stripos( $title, $word ) !== false ) {
11 wp_die( 'Ошибка: заголовок содержит запрещённое слово — «' . esc_html( $word ) . '». Измените заголовок и попробуйте снова.' );
12 }
13 }
14}
15add_action( 'transition_post_status', 'sdstudio_block_forbidden_title_words', 10, 3 );

Як це працює: хук transition_post_status спрацьовує за будь-якої зміни статусу поста. Ми перевіряємо, що новий статус, publish, а старий, не publish (інакше кожне оновлення вже опублікованого поста теж блокувалося б). Далі mb_stripos шукає кожне стоп-слово без урахування регістру в заголовку. Якщо знаходить, wp_die зупиняє публікацію зі зрозумілим повідомленням.

Щоб додати своє слово, замініть word1, word2, word3 у масиві $restricted. Слів може бути скільки завгодно, функція пройдеться по всіх.

Бонус: покажіть авторам список заборонених слів прямо під полем заголовка. Додайте цей код у той самий functions.php:

1function sdstudio_show_restricted_words_notice() {
2 $restricted = array( 'word1', 'word2', 'word3' );
3 echo '<div style="color:#856404;background:#fff3cd;padding:6px 12px;margin:8px 0;border-radius:4px;font-size:13px;">';
4 echo 'Запрещённые слова в заголовке: <strong>' . implode( ', ', $restricted ) . '</strong>';
5 echo '</div>';
6}
7add_action( 'edit_form_after_title', 'sdstudio_show_restricted_words_notice' );

Тепер список стоп-слів видно над редактором, авторам не доведеться гадати, що саме заборонено.

Розділювач заголовків і кастомні title-теги

Розділювач заголовка — це символ між назвою сайту та заголовком поста в <title>. У результатах пошуку він виглядає як «Назва сайту | Заголовок поста» або «Назва сайту, Заголовок поста». На клікабельність це напряму не впливає, але візуально вирізняє ваш сніпет серед інших.

З WordPress 4.4 розділювач змінюється фільтром document_title_separator. Код на три рядки:

1function sdstudio_change_title_separator( $separator ) {
2 return '|';
3}
4add_filter( 'document_title_separator', 'sdstudio_change_title_separator' );

Символ у третьому рядку можна замінити на будь-який: вертикальна риска, дефіс, знак «більше», середня крапка. Не використовуйте спецсимволи на кшталт ★ або →, Google їх не відображає, і ваш сніпет у видачі виглядатиме неохайно.

Для версій нижче WordPress 4.4: функція wp_title застаріла, але якщо ваш сайт досі на старій версії, спочатку оновіться (питання безпеки), а вже потім правте розділювач. Старий код через wp_title залишено в документації WordPress як історичний, але він не рекомендується.

Як задати кастомний title-тег для окремого поста

Бувають ситуації, коли title-тег для SERP має відрізнятися від H1 на сторінці. SEO-плагіни (Yoast, Rank Math) дають для цього окреме поле. Але якщо ви не використовуєте SEO-плагін, завдання вирішується кастомним полем і фільтром pre_get_document_title.

Код для functions.php:

1function sdstudio_custom_title_from_meta( $title ) {
2 if ( is_singular() ) {
3 $custom = get_post_meta( get_the_ID(), 'custom_post_title', true );
4 if ( $custom ) {
5 return esc_html( $custom );
6 }
7 }
8 return $title;
9}
10add_filter( 'pre_get_document_title', 'sdstudio_custom_title_from_meta', 20 );

Як використовувати:

  • Відкрийте запис, для якого потрібен кастомний <title>
  • У блоці «Довільні поля» (якщо не бачите, увімкніть у «Налаштуваннях екрана») створіть поле з іменем custom_post_title
  • У значення впишіть потрібний title-тег, наприклад, «Огляд плагіна кешування 2026, порівняння та тести»
  • Збережіть запис

Якщо кастомне поле не заповнене, WordPress використовує стандартний title-тег (заголовок поста + розділювач + назва сайту). Механізм спрацьовує лише для сингулярних сторінок (is_singular), на архівах і в адмінці заголовки не чіпаються.

Важливий нюанс: pre_get_document_title має пріоритет 20, це гарантує, що фільтр спрацює ПІСЛЯ стандартного формування заголовка та перевизначить його.

Подивіться 6-хвилинне відео за темою, у ньому показано візуальний процес налаштування title-тегів через адмінку WordPress і SEO-плагіни.

⁉️🤔 Часті запитання

Чи працює код зі статті на WordPress 6.x (актуальна версія на wordpress.org)?

Так, весь код перевірено на актуальній версії WordPress. Фільтри the_title, document_title_separator та pre_get_document_title, частина ядра WordPress з версій 4.4-5.0, повністю підтримуються у WP 6.x. Єдина зміна порівняно зі старими посібниками: заміна застарілого хука publish_post на transition_post_status.

Чи потрібно правити functions.php дочірньої теми, чи можна в основну?

Завжди правте дочірню тему. Якщо ви редагуєте functions.php основної теми, усі зміни злетять під час наступного оновлення. Якщо дочірньої теми немає, створіть: це п’ять хвилин через плагін Child Theme Configurator або вручну (стиль style.css + файл functions.php з директивою Template:).

Чи можна досягти того самого результату плагінами без коду?

Частково. Для SEO-заголовків є Yoast SEO та Rank Math. Для обмеження довжини існують плагіни на кшталт Title Length Limiter, але їхня підтримка нестабільна. Для заборони слів і зміни роздільника стандартних плагінів немає, лише код. До того ж кожен зайвий плагін уповільнює сайт, а чотири рядки у functions.php не додають помітного навантаження.

Що робити, якщо після правки functions.php сайт упав у білу сторінку?

Підключіться до сервера через FTP або файловий менеджер хостингу, відкрийте functions.php і видаліть доданий код. Якщо доступу до FTP немає, зайдіть у phpMyAdmin, знайдіть таблицю wp_options, рядок active_plugins і тимчасово деактивуйте всі плагіни (це скине кеш). На майбутнє: перед будь-якою правкою functions.php вмикайте WP_DEBUG у wp-config.php, тоді замість білого екрана ви побачите текст помилки.

Чи впливає роздільник заголовка на SEO?

> Прямого впливу на ранжування немає, Google не оцінює, чи стоїть у вас | або -. Непрямий вплив є: нестандартний роздільник (, ) Google може не відобразити, і сніпет у видачі стане візуально гіршим. Плюс упізнаваний роздільник працює на бренд: користувач звикає до формату «Бренд | Заголовок» і швидше помічає ваші результати у SERP.

Що ставити і в якій послідовності

Чотири техніки вище закривають усі основні сценарії роботи із заголовками WordPress. Порядок впровадження, від простого до складного:

Спочатку змініть роздільник title-тегу — це три рядки коду і миттєвий результат у пошуковій видачі. Потім налаштуйте кастомні <title> через метаполя, якщо на сайті є ключові сторінки, яким потрібен окремий SERP-заголовок. Після цього впровадьте фільтр довжини, він захистить верстку від надто довгих заголовків без жодних дій з боку авторів. І останнім додайте блокувальник стоп-слів, коли список заборонених фраз уже узгоджено і затверджено.

Перед будь-якою правкою functions.php зробіть бекап файлу, скопіюйте його вміст у текстовий редактор і збережіть локально. Це займе десять секунд і зекономить години відновлення в разі помилки.