Skip to content

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

🔒 Как скрыть категорию в WordPress: 4 способа шаг за шагом

🔒 Как скрыть категорию в WordPress: 4 способа шаг за шагом

Главная страница WordPress по умолчанию выводит всё подряд: записи из каждой созданной рубрики смешиваются в общую ленту. Для блога это нормально. Но если вы запускаете интернет-магазин, портфолио или корпоративный сайт, часть категорий на главной просто не нужна.

Хуже того: поисковые роботы индексируют всё, включая служебные и черновые рубрики. Результат, дубли страниц в выдаче, размытый индекс и падение позиций. А посетитель, наткнувшийся на закрытый раздел, получает пустую страницу вместо контента.

К счастью, скрыть категорию в WordPress можно за 5-10 минут, и для этого не нужен разработчик. Ниже четыре работающих способа: от плагина в два клика до аккуратного кода в functions.php. Выбирайте под свою задачу.

💡 Быстрый обзор:

  • Установить Ultimate Category Excluder и отметить категории для скрытия.
  • Настроить WP Categories Widget для выборочного скрытия в сайдбаре.
  • Добавить хук pre_get_posts в functions.php и исключить рубрику по ID.
  • Использовать плагин Members со сниппетом для скрытия по ролям пользователей.

Зачем вообще скрывать категории?

WordPress не делает различий между «публичной» и «технической» рубрикой. Всё, что вы создали в «Записи → Рубрики», автоматически попадает в главную ленту и архивы. В одних случаях это удобно, в других, создаёт проблемы:

  • Служебные рубрики (например, «Черновики» или «Для редакторов») индексируются и попадают в поиск.
  • Категории со старым или неактуальным контентом размывают впечатление от сайта.
  • Закрытые разделы (премиум-статьи, материалы для клиентов) становятся видны всем посетителям.

Важный момент: не пытайтесь решить проблему через CSS, display: none скрывает категорию визуально, но поисковики всё равно видят контент и могут расценить это как клоакинг. Штраф от Google в таких случаях почти гарантирован. Правильный путь, исключить рубрику на уровне запросов к базе данных, а не маскировать её стилями.

Способ 1. Ultimate Category Excluder, скрыть категорию за минуту

Самый простой и надёжный метод, плагин Ultimate Category Excluder. На июнь 2026 года у него 50 000+ активных установок, рейтинг 4,2/5 и совместимость с WordPress 6.5+. Разработчик обновляет плагин стабильно, последний релиз вышел в декабре 2025.

Установка плагина Ultimate Category Excluder из панели WordPress

Порядок действий:

  • В панели WordPress перейдите в Плагины → Добавить новый.
  • В поиске наберите «Ultimate Category Excluder», нажмите Установить и затем Активировать.
  • После активации в меню «Настройки» появится пункт Category Exclusion, зайдите туда.
  • Отметьте галочками категории, которые нужно скрыть с главной, архивов, RSS-ленты и поиска.
  • Нажмите Обновить.
Отметка категорий для скрытия в Ultimate Category Excluder

Готово. Откройте сайт в режиме инкогнито и убедитесь, что записи из отмеченных рубрик исчезли с главной. Плагин работает на уровне WP_Query, он модифицирует запрос к базе данных, а не прячет блоки через CSS. Поэтому для SEO это полностью безопасно.

Плюсы: ноль кода, подходит новичкам, выборочное исключение (главная, архивы, RSS, по отдельности). Минусы: если вам нужно скрыть категорию только в определённом виджете, этот плагин не помощник, для этого есть инструмент поточнее.

Способ 2. WP Categories Widget, скрыть категорию в виджете

Если задача уже, убрать конкретную рубрику из сайдбара или футера, а не со всего сайта, берите WP Categories Widget. На февраль 2026 года у плагина версия 2.8.1, полная совместимость с актуальным WordPress и 3 000+ активных установок.

Что он умеет:

  • Показывать категории любой таксономии (не только стандартные рубрики, но и метки, произвольные таксономии).
  • Скрывать заголовок виджета.
  • Включать или выключать счётчик постов у каждой категории.
  • Выборочно показывать или скрывать любые рубрики прямо из настроек виджета.

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

  • Установите и активируйте плагин через Плагины → Добавить новый.
  • Перейдите во Внешний вид → Виджеты.
  • Найдите виджет «WP Categories Widget» и перетащите его в нужную область (сайдбар, футер).
Перетаскивание виджета WP Categories Widget в сайдбар WordPress
  • В настройках виджета задайте заголовок, при желании скройте его. В выпадающем списке «Показать» выберите вариант All Categories или укажите конкретные рубрики, которые должны отображаться.
Выбор скрываемых категорий в настройках WP Categories Widget
  • Сохраните изменения.

Всё, что не попало в список «показываемых», автоматически скрыто из этого виджета. Обратите внимание: плагин управляет видимостью только внутри своего виджета. На главную ленту и архивы он не влияет, для этого возвращайтесь к способу 1.

Способ 3. Хук pre_get_posts, скрыть категорию через код

Если вы не хотите ставить лишний плагин ради одной функции, можно обойтись парой строк в functions.php. Этот метод изменяет главный цикл WordPress до выполнения запроса, категория исключается на уровне базы данных, а не маскируется.

Важно: перед правкой functions.php сделайте полный бэкап сайта. Ошибка в этом файле положит весь сайт, восстановить его без резервной копии будет непросто.

Вот рабочий сниппет. Он использует хук pre_get_posts и указывает, какую категорию исключить из главной страницы:

1/**
2 * Исключает заданную категорию с главной страницы.
3 * Замените -5 на ID вашей категории (со знаком минус).
4 */
5function sdstudio_exclude_category_from_home( $query ) {
6 if ( ! is_admin() && $query->is_home() && $query->is_main_query() ) {
7 $query->set( 'cat', '-5' );
8 }
9 return $query;
10}
11add_action( 'pre_get_posts', 'sdstudio_exclude_category_from_home' );

В строке 'cat', '-5' число 5, идентификатор категории, которую нужно скрыть. Знак минуса означает «исключить». Как узнать ID нужной рубрики:

  • В панели WordPress откройте Записи → Рубрики.
  • Наведите курсор на название категории.
  • Внизу экрана (в строке состояния браузера) появится URL вида ...taxonomy=category&tag_ID=6, число после tag_ID= и есть ID.
Просмотр ID категории через наведение на название рубрики в админке WordPress

На скриншоте ID категории «Страны» равен 6. Подставьте своё число, сохраните файл, и записи из этой рубрики исчезнут с главной.

Где разместить код:

  • Через FTP: подключитесь к серверу, перейдите в /wp-content/themes/ваша-тема/, скачайте functions.php, добавьте код в конец файла (перед ?>, если он есть) и загрузите обратно.
  • Через админку: откройте Внешний вид → Редактор тем, выберите активную тему, найдите functions.php в правой колонке, вставьте код и нажмите «Обновить файл».
Редактирование файла functions.php через редактор тем WordPress

Некоторые хостинг-провайдеры закрывают доступ к редактору тем из соображений безопасности. В этом случае только FTP, или возвращайтесь к плагину из способа 1, он решит задачу без доступа к файлам.

Что улучшено по сравнению с оригинальным рецептом из старых руководств: добавлена проверка ! is_admin() (чтобы не ломать админку) и $query->is_main_query() (чтобы не задеть вторичные запросы виджетов и меню). Без этих проверок код может поломать фильтрацию в админке или сломать вывод меню, проверено на практике.

Способ 4. Скрытие категорий по ролям пользователей

Представьте ситуацию: у вас есть премиум-статьи, доступные только платным подписчикам. Или внутренняя документация для сотрудников. Или закрытый раздел для оптовых клиентов. Обычные методы скрывают категорию от всех, а здесь нужно, чтобы админ и привилегированные пользователи её видели, а гость и базовый подписчик, нет.

Раньше для этой задачи использовали плагин CaPa Protect, но он удалён из репозитория WordPress. На смену пришла более мощная связка: плагин Members (300 000+ установок, рейтинг 4,7/5, версия 3.2.22 на июнь 2026) и небольшой код.

Плагин Members, управление ролями и правами в WordPress

Алгоритм:

  • Установите и активируйте Members через «Плагины → Добавить новый».
  • Перейдите в Пользователи → Роли. Создайте роль, например «Премиум-подписчик», или используйте существующие.
  • Назначьте нужным пользователям эту роль.
  • Добавьте в functions.php сниппет, который проверяет роль текущего пользователя и исключает категорию для всех, кроме разрешённых:
1/**
2 * Скрывает категорию с ID 5 от всех, кроме администраторов
3 * и пользователей с ролью premium_subscriber.
4 */
5function sdstudio_hide_category_by_role( $query ) {
6 if ( is_admin() || ! $query->is_main_query() ) {
7 return $query;
8 }
9
10 $restricted_cat_id = 5; // замените на ID вашей категории
11
12 if ( current_user_can( 'administrator' )
13 || current_user_can( 'premium_subscriber' ) ) {
14 return $query;
15 }
16
17 $query->set( 'cat', '-' . $restricted_cat_id );
18 return $query;
19}
20add_action( 'pre_get_posts', 'sdstudio_hide_category_by_role' );

Как это работает: функция проверяет роль текущего пользователя через current_user_can(). Администраторы и премиум-подписчики проходят мимо фильтра, для них категория видна. Все остальные получают модифицированный запрос с исключением рубрики. Тот же хук pre_get_posts, но с привязкой к правам, а не к странице.

Плюс Members в том, что это не просто «костыль для категорий», а полноценный редактор ролей и прав. После установки вы сможете управлять видимостью любых элементов сайта: блоков Gutenberg, страниц, пунктов меню, всё через роли.

Видеоинструкция

Посмотрите наглядное руководство по всем четырём способам, от установки плагина до правки кода:

⁉️🤔 Частые вопросы

Почему нельзя просто скрыть категорию через CSS?

display: none убирает блок визуально, но поисковые роботы всё равно читают контент. Google расценивает такое расхождение между видимым и индексируемым содержимым как попытку манипуляции (клоакинг). Санкция, ручное понижение позиций или исключение страниц из индекса. Правильное решение, исключение на уровне WP_Query, а не CSS.

Как скрыть категорию не только с главной, но и из RSS-ленты?

Ultimate Category Excluder (способ 1) умеет это из коробки. В настройках плагина на вкладке «Category Exclusion» отметьте нужные категории и поставьте галочку напротив «RSS Feeds». Если работаете через код (способ 3), замените условие $query->is_home() на $query->is_home() || $query->is_feed(), категория исчезнет и из ленты.

Что будет с SEO после скрытия категории?

Если вы скрыли рубрику корректно (через плагин или pre_get_posts), страницы самой категории и её записи остаются доступными по прямым URL и индексируются. Меняется только главная страница и архивы, дубли уходят, а полезный контент остаётся в индексе. Для верности после изменений отправьте карту сайта в Google Search Console на переобход.

Можно ли скрыть категорию от определённого пользователя, а не от роли?

Штатных средств WordPress для этого нет. Способ 4 рассчитан именно на роли, это архитектурное ограничение системы прав. В качестве обходного пути можно создать отдельную роль под конкретного пользователя через Members и применить код из способа 4. Технически это два клика в интерфейсе плагина.

Плагин или код, что выбрать для долгосрочной поддержки сайта?

Зависит от количества правок. Одно скрытие одной категории, код в functions.php (способ 3) легче и не добавляет лишней нагрузки. Несколько категорий с разными условиями (главная, RSS, поиск), Ultimate Category Excluder (способ 1) удобнее в управлении. Главное правило: не ставьте плагин ради одной галочки, которую можно закрыть тремя строками кода.

Что выбрать под вашу задачу

Четыре способа закрывают все реальные сценарии. Сориентироваться поможет простая матрица:

  • Нужно быстро и без кода → Ultimate Category Excluder. Пара кликов, результат сразу, подходит для большинства типовых сайтов.
  • Категория мешается только в сайдбаре → WP Categories Widget. Точечное решение без побочных эффектов.
  • На сайте и так минимум плагинов, хочется лёгкости → хук pre_get_posts в functions.php. Три строки PHP, ноль лишнего кода.
  • Контент с разграничением доступа по ролям → Members + сниппет из способа 4. Гибкая система прав, которая пригодится и для других задач.

Попробуйте способ, который ближе к вашей ситуации. Если что-то пойдёт не так, возвращайтесь к бэкапу (вы же его сделали?) и пробуйте следующий. А в комментариях расскажите, какой метод сработал у вас и для какого именно проекта вы скрывали категории.