В стандартной установке WordPress все рубрики автоматически отображаются в архивных записях, виджетах и в структуре URL. Однако бывают случаи, когда определённую рубрику необходимо скрыть от пользователей сайта – например, если она используется для технических целей или внутренних меток. Это можно реализовать без использования плагинов, вручную изменив шаблоны темы или добавив код в functions.php.
Для исключения рубрики из основного цикла записей, используйте фильтр pre_get_posts. Например, чтобы скрыть рубрику с ID 12, добавьте следующий код в functions.php активной темы:
add_action('pre_get_posts', 'exclude_category_from_blog');
function exclude_category_from_blog($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set('cat', '-12');
}
}
Если нужно скрыть рубрику из виджета «Рубрики», примените фильтр get_terms. Добавьте условие для исключения нужной рубрики по её ID:
add_filter('get_terms', 'exclude_category_from_widget', 10, 3);
function exclude_category_from_widget($terms, $taxonomies, $args) {
if (in_array('category', $taxonomies)) {
foreach ($terms as $key => $term) {
if ($term->term_id == 12) {
unset($terms[$key]);
}
}
}
return $terms;
}
Удаление рубрики из основного меню сайта
Чтобы исключить рубрику из основного меню WordPress, перейдите в админ-панель и откройте раздел Внешний вид → Меню. Найдите пункт меню, соответствующий нежелательной рубрике, и нажмите «Удалить». После этого сохраните изменения.
Если меню формируется автоматически через функцию wp_list_categories()
в файле шаблона, используйте параметр exclude
. Например:
<?php wp_list_categories('exclude=5'); ?>
Замените 5
на ID рубрики, которую нужно скрыть. Чтобы узнать ID, откройте редактирование рубрики в админке – номер будет в URL, например: tag_ID=5.
Если используется wp_nav_menu()
с кастомным меню, то рубрики добавляются вручную. В этом случае удаление производится только через интерфейс редактирования меню, без вмешательства в код.
Для динамического скрытия рубрики по условию, добавьте фильтр в functions.php
:
add_filter('wp_get_nav_menu_items', 'hide_category_from_menu', 10, 3);
function hide_category_from_menu($items, $menu, $args) {
foreach ($items as $key => $item) {
if ($item->object == 'category' && $item->object_id == 5) {
unset($items[$key]);
}
}
return $items;
}
Этот код удалит элемент меню, связанный с рубрикой с ID 5, из всех меню сайта без удаления вручную.
Исключение рубрики из виджета «Рубрики»
Чтобы скрыть конкретную рубрику из стандартного виджета «Рубрики» без использования плагинов, потребуется отредактировать файл functions.php
активной темы. Найдите ID нужной рубрики в админке (в адресной строке при редактировании рубрики, параметр tag_ID
).
Добавьте следующий код в конец файла functions.php
:
function exclude_category_from_widget($args) {
$args['exclude'] = 'ID_РУБРИКИ';
return $args;
}
add_filter('widget_categories_args', 'exclude_category_from_widget');
Замените ID_РУБРИКИ
на фактический числовой ID рубрики, которую нужно исключить. Для исключения нескольких рубрик перечислите ID через запятую, например: 'exclude' => '3,7,12'
.
Изменения вступают в силу сразу. Виджет больше не будет отображать исключённые рубрики, даже если в них есть опубликованные записи.
Скрытие рубрики с главной страницы через functions.php
Чтобы исключить отображение определённой рубрики на главной странице WordPress, используйте хук pre_get_posts
в файле functions.php
вашей темы. Ниже приведён пример кода, скрывающего рубрику по её ID:
function exclude_category_from_home( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-5' ); // Замените 5 на ID нужной рубрики
}
}
add_action( 'pre_get_posts', 'exclude_category_from_home' );
Отрицательное значение 'cat'
исключает указанную рубрику. Чтобы скрыть несколько рубрик, перечислите их ID через запятую с минусом:
$query->set( 'cat', '-5,-12,-23' );
Проверьте ID рубрик в админке WordPress, перейдя в «Рубрики» и наведя курсор на нужную – ID будет отображён в URL как tag_ID
.
Изменения вступают в силу сразу после сохранения functions.php
. Очистите кэш, если используете кеширующие плагины или серверные технологии.
Фильтрация записей по рубрике в запросах WP_Query
Чтобы исключить определённую рубрику из результатов WP_Query, указывайте её ID с минусом в параметре cat
. Например, 'cat' => '-12'
исключит рубрику с ID 12.
Если необходимо вывести записи только из конкретной рубрики, используйте 'cat' => '5'
, где 5 – ID нужной рубрики. Для фильтрации по слагу применяйте параметр 'category_name'
: 'category_name' => 'novosti'
.
При использовании таксономического запроса задавайте массив tax_query
. Пример исключения рубрики по слагу:
'tax_query' => [
[
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'skrytaya-rubrika',
'operator' => 'NOT IN',
],
]
Чтобы исключить сразу несколько рубрик, передайте массив ID в параметре cat
с минусами: 'cat' => '-4,-7,-9'
. Альтернатива через tax_query
с оператором NOT IN
:
'tax_query' => [
[
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => [4, 7, 9],
'operator' => 'NOT IN',
],
]
Фильтрация влияет только на отображение записей. Если цель – полностью скрыть рубрику, включая её URL и архивы, потребуется дополнительно перехватывать шаблоны с помощью фильтров template_redirect
и pre_get_posts
.
Скрытие URL-адресов рубрики в хлебных крошках
Если тема WordPress использует функцию get_the_category()
или сторонние хлебные крошки (например, от Yoast SEO), URL рубрики могут отображаться автоматически. Чтобы убрать их, необходимо модифицировать соответствующий шаблон или хук.
- Для хлебных крошек Yoast SEO подключите фильтр
wpseo_breadcrumb_links
. Добавьте в файлfunctions.php
следующее:
add_filter('wpseo_breadcrumb_links', 'remove_category_links_from_breadcrumbs');
function remove_category_links_from_breadcrumbs($links) {
foreach ($links as $key => $link) {
if (strpos($link['url'], '/category/') !== false) {
$links[$key]['url'] = '';
}
}
return $links;
}
$categories = get_the_category();
if ($categories) {
echo esc_html($categories[0]->name);
}
- Если используется
get_category_link()
, удалите его и оставьте только имя рубрики:
$category = get_the_category();
if ($category) {
echo esc_html($category[0]->name); // без ссылки
}
Эти изменения устраняют переход по URL рубрики из хлебных крошек, сохраняя при этом визуальную структуру навигации.
Отключение отображения рубрики в шаблоне single.php
<div class="post-categories">
<?php the_category(', '); ?>
</div>
Удалите или закомментируйте этот блок, чтобы рубрики не отображались на страницах отдельных записей:
<!-- <div class="post-categories">
<?php the_category(', '); ?>
</div> -->
После удаления или отключения вызова функции рубрики перестанут отображаться только в шаблоне single.php
. Архивы и другие части сайта останутся без изменений.
Настройка исключений рубрик в ленте RSS
Чтобы исключить определённые рубрики из RSS-ленты WordPress, необходимо внести изменения в файл functions.php активной темы. Добавьте следующий код:
function exclude_categories_from_rss($query) {
if ($query->is_feed && $query->is_main_query()) {
$excluded = array(3, 7); // ID рубрик, которые нужно исключить
$query->set('cat', '-' . implode(',-', $excluded));
}
}
add_action('pre_get_posts', 'exclude_categories_from_rss');
Важно: используйте отрицательные значения ID, чтобы исключить рубрики. Например, -3,-7 исключит рубрики с ID 3 и 7. Убедитесь, что ID указаны правильно. Их можно найти в панели администратора, наведя курсор на нужную рубрику в разделе «Рубрики».
После добавления кода проверьте RSS-ленту (/feed) и убедитесь, что записи из указанных рубрик отсутствуют. Кэширование может повлиять на результат – при необходимости сбросьте кэш сайта и браузера.
Этот способ не влияет на видимость рубрик в других частях сайта – исключение применяется только к RSS-ленте.
Скрытие рубрики с карты сайта вручную
Если карта сайта создаётся с помощью wp-sitemap.xml
, встроенного в WordPress 5.5 и выше, скрыть рубрику можно через фильтр wp_sitemaps_taxonomies
.
- Откройте файл
functions.php
активной темы. - Добавьте следующий код:
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['category'] );
return $taxonomies;
});
Этот код полностью исключает рубрику category
из карты сайта. Если нужно скрыть только конкретную рубрику, используйте фильтр wp_sitemaps_posts_query_args
:
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['tax_query'] = [
[
'taxonomy' => 'category',
'field' => 'slug',
'terms' => [ 'slug-rubriki' ],
'operator' => 'NOT IN',
],
];
}
return $args;
}, 10, 2 );
Замените slug-rubriki
на слаг рубрики, которую требуется исключить. После этого очистите кэш, если он используется.
Вопрос-ответ:
Как узнать ID рубрики, которую нужно скрыть?
Чтобы узнать ID рубрики, откройте панель управления WordPress, перейдите в раздел «Рубрики» (в меню «Записи») и наведите курсор на нужную рубрику. В нижнем левом углу браузера появится ссылка, содержащая что-то вроде `tag_ID=5` — это и есть ID. Также можно открыть страницу редактирования рубрики и посмотреть на адресную строку браузера.