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 ключевых тем для страниц и присвойте их. Через месяц облако тегов само покажет, какие темы сайта связаны сильнее всего.