Skip to content

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

🔖 Як увімкнути теги на сторінках WordPress

🔖 Як увімкнути теги на сторінках WordPress

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

Але на практиці це обмеження обходять за п’ять хвилин. Два способи: рядок коду в functions.php або мікроплагін, який можна вмикати й вимикати без правлення теми. Нижче, обидва варіанти з поясненням, що саме відбувається під капотом.

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

  • Реєструємо таксономію post_tag для типу запису page, одна функція register_taxonomy_for_object_type

  • Додаємо підтримку тегів в архіви через хук pre_get_posts, щоб сторінки потрапляли у видачу за тегом

  • Код працює для будь-яких кастомних типів записів, достатньо повторити виклик із потрібним іменем типу

  • Усе згортається в окремий плагін за хвилину: файл → заголовок плагіна → код → активація

Теги — це не просто хмара в сайдбарі. Це навігаційна вісь, яка пов’язує розрізнені сторінки в тематичні групи швидше, ніж категорії чи меню.

Сторінки WordPress часто розростаються: контакти, політика, умови, лендинги послуг, портфоліо, документація. Без тегів зв’язок між ними тримається лише на ручних посиланнях у тексті. З тегами одна сторінка «Доставка» автоматично опиняється в групі «логістика» поруч зі сторінкою «Повернення», а відвідувач переходить за тегом і бачить усе пов’язане.

Для SEO теги на сторінках дають додаткове перелінковування та знижують показник відмов: користувач не йде після першої сторінки, а провалюється в тематичну добірку. Плюс теги потрапляють у карту сайту, пошуковик краще розуміє структуру.

Спосіб 1: Код у functions.php

Найпряміший шлях, додати сніпет у файл functions.php активної теми. Відкрийте wp-content/themes/ВАША_ТЕМА/functions.php і вставте код перед закриваючим ?> або в самий кінець файлу:

1/**
2 * Добавляем поддержку тегов на страницы WordPress.
3 * Код — в functions.php дочерней темы или через плагин Code Snippets.
4 */
5function sdstudio_add_tags_to_pages() {
6 register_taxonomy_for_object_type( 'post_tag', 'page' );
7}
8add_action( 'init', 'sdstudio_add_tags_to_pages' );
9
10/**
11 * Включаем страницы в архивные запросы по тегам.
12 * Без этого страницы не появятся на /tag/название-тега/
13 */
14function sdstudio_pages_in_tag_archives( $wp_query ) {
15 if ( $wp_query->get( 'tag' ) ) {
16 $wp_query->set( 'post_type', 'any' );
17 }
18}
19add_action( 'pre_get_posts', 'sdstudio_pages_in_tag_archives' );

Що тут відбувається. Функція register_taxonomy_for_object_type() пов’язує вже наявну таксономію post_tag із типом запису page. Це ядерна функція WordPress, документація на developer.wordpress.org. Вона не створює нову таксономію, а лише додає зв’язок «сторінки → теги».

Хук pre_get_posts модифікує SQL-запит до його виконання. Коли WordPress будує сторінку архіву тега (/tag/название/), він за замовчуванням шукає лише записи типу post. Рядок $wp_query->set( 'post_type', 'any' ) розширює вибірку на всі типи: сторінки, пости, кастомні типи.

Після вставлення коду зайдіть у будь-яку сторінку, збоку з’явиться блок «Мітки» як у звичайних записах. Працює одразу, кеш чистити не потрібно.

Адаптація під кастомні типи записів

Якщо у вас є довільні типи записів (CPT), портфоліо, відгуки, товари, і їм теж потрібні теги, додайте стільки ж викликів register_taxonomy_for_object_type() усередині init-функції:

1register_taxonomy_for_object_type( 'post_tag', 'portfolio' );
2register_taxonomy_for_object_type( 'post_tag', 'testimonials' );

Ім’я CPT другим аргументом, те саме, що вказане під час реєстрації типу через register_post_type(). Нічого додатково правити в pre_get_posts не потрібно: 'any' уже включає всі зареєстровані типи.

Спосіб 2: Окремий плагін

Правити functions.php напряму, робоче рішення, але крихке. Змінили тему, код зник, теги зі сторінок щезли. Для тих, хто веде кілька сайтів або часто змінює теми, надійніше винести сніпет в окремий плагін.

Створіть файл wp-content/plugins/sdstudio-tags-for-pages.php із таким вмістом:

1<?php
2/**
3 * Plugin Name: Tags for Pages
4 * Description: Enables post tags on WordPress pages and custom post types
5 * Version: 1.0
6 * Author: SDStudio
7 * License: GPL-2.0+
8 */
9
10// Прямой доступ — запрещён
11if ( ! defined( 'ABSPATH' ) ) {
12 exit;
13}
14
15// Теги → страницы
16function sdstudio_tags_for_pages() {
17 register_taxonomy_for_object_type( 'post_tag', 'page' );
18}
19add_action( 'init', 'sdstudio_tags_for_pages' );
20
21// Страницы → архив тегов
22function sdstudio_pages_in_tag_queries( $wp_query ) {
23 if ( ! is_admin() && $wp_query->is_main_query() && $wp_query->get( 'tag' ) ) {
24 $wp_query->set( 'post_type', 'any' );
25 }
26}
27add_action( 'pre_get_posts', 'sdstudio_pages_in_tag_queries' );

Відмінність від першого способу, перевірка ! is_admin() && $wp_query->is_main_query(). Вона гарантує, що запити в адмінці не зачеплені: pre_get_posts спрацьовує всюди, включно зі списком сторінок у консолі, і без цієї перевірки можна отримати неочікувану поведінку в адмінці під час фільтрації.

Файл готовий, зайдіть у Плагіни, знайдіть «Tags for Pages» і активуйте. Усе. При зміні теми плагін залишається активним, теги не зникають. На мультисайті плагін можна вмикати посайтово або активувати одразу для всієї мережі.

Спосіб 3: Готові плагіни з каталогу

Якщо код писати не хочеться, задачу закривають готові рішення з WordPress.org. Вони додають не лише теги, а й категорії для сторінок, плюс інтерфейс керування.

Add Categories to Pages, легковагий плагін, який однією галочкою вмикає і категорії, і теги для сторінок. Без налаштувань, без реклами. Підходить, коли потрібно просто «щоб працювало» без зайвих екранів.

Ось відеодемонстрація встановлення тегів на сторінки через код і через плагін, 4 хвилини, усі кроки показано в реальному часі:

Ключовий момент: сторонні плагіни тягнуть за собою додатковий код і хуки. Якщо сайт уже навантажений десятком плагінів, зайвий — це зайва точка відмови. Код зі способів 1 і 2 важить лічені байти й не додає запитів до бази понад штатні.

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

Чи працює це на мультисайті? Так, код універсальний. Можна активувати плагін посайтово або ввімкнути на всю мережу через «Network Activate».

На мультисайті WordPress код працює однаково на всіх сайтах мережі. Функція register_taxonomy_for_object_type() прив’язана до таксономії post_tag, яка існує в кожному сайті мережі окремо, теги не перетинаються між сайтами. Для кожного дочірнього сайту теги на сторінках вмикаються незалежно: активували плагін на одному сайті, теги з’явилися тільки там.

Чи потрібно оновлювати постійні посилання після вставлення коду? Ні, структура URL не змінюється. Теги на сторінках не додають нових правил перезапису.

WordPress зберігає зв’язок «сторінка, тег» у таблиці wp_term_relationships, тій самій, що використовується для постів. Жодні rewrite-правила не зачіпаються: архів тега вже існує (/tag/название/), а pre_get_posts просто включає сторінки в його вибірку. Permalinks можна не чіпати, усе працює одразу після активації коду.

Чи пропадуть теги при зміні теми? Залежить від способу. Код у functions.php теми, пропадуть. Код у плагіні або Code Snippets, залишаться.

При зміні теми WordPress завантажує новий functions.php, тому сніпет зі старої теми перестає виконуватися, і метабокс тегів на сторінках зникає. Самі зв’язки «сторінка, тег» у базі при цьому не видаляються. Достатньо повернути код (у новій темі або через плагін), і всі раніше призначені теги відновлюються в адмінці.

Чи можна призначити теги програмно під час імпорту сторінок? Так, через wp_set_object_terms( $page_id, array( 'тег1', 'тег2' ), 'post_tag' ).

Функція wp_set_object_terms() приймає ID сторінки, масив назв тегів і назву таксономії. Якщо тег із такою назвою не існує, WordPress створить його автоматично. Це зручно під час міграції: скрипт пробігає по всіх сторінках і проставляє теги з CSV-файлу або старої CMS. Важливо запускати скрипт після init, інакше таксономія ще не зареєстрована.

Що з хмарою тегів, сторінки потраплять до неї? Так, стандартний віджет «Хмара міток» підхопить теги зі сторінок без додаткових налаштувань.

Віджет wp_tag_cloud() за замовчуванням збирає всі об’єкти таксономії post_tag незалежно від типу запису. Щойно на сторінці з’явився хоча б один тег, він потрапляє в хмару нарівні з тегами постів. Частотність теж рахується коректно: тег на трьох сторінках і двох постах дасть вагу «5» і відобразиться більшим.

Що ставити: код чи плагін

Конкретний вибір залежить від сценарію, а не від «правильної відповіді».

Односайтовикам, які не змінюють тему роками, вистачить сніпета в functions.php: скопіював, вставив, працює. Фрилансерам із десятком клієнтських сайтів зручніше плагін: скинув zip-файл замовнику або активував на новому проєкті за секунду. Тим, хто вже сидить на Code Snippets або WPCodeBox, простіше додати сніпет у колекцію, він не загубиться при оновленні теми й не потребує окремого плагіна.

Якщо потрібно більше ніж теги, категорії, довільні таксономії, розширена фільтрація, подивіться готові плагіни з WordPress.org. Але для задачі «увімкнути теги на сторінках» семи рядків коду достатньо. Усе інше, перебір.

Далі налаштуйте структуру тегів: продумайте 5-7 ключових тем для сторінок і призначте їх. За місяць хмара тегів сама покаже, які теми сайту пов’язані найсильніше.