В процессе управления сайтом на WordPress количество категорий может значительно разрастаться, и многие из них перестают использоваться. Неиспользуемые категории создают избыточность, усложняют навигацию и могут негативно влиять на SEO. В этой статье мы рассмотрим, как автоматизировать отключение или скрытие таких категорий, чтобы поддерживать структуру сайта в порядке без лишних ручных действий.
Почему важно управлять неиспользуемыми категориями в WordPress
Категории — это способ структурировать контент и помочь пользователям и поисковым системам быстрее находить нужные материалы. Однако со временем появляются категории, которые либо не имеют постов, либо содержат слишком мало контента, что делает их малоинформативными и даже вредными для юзабилити и SEO.
Автоматизация отключения таких категорий помогает:
- Сократить время на ручное администрирование таксономий.
- Улучшить пользовательский опыт за счет чистой и логичной структуры меню и архивов.
- Повысить качество внутренней перелинковки и снизить количество «пустых» страниц.
Давайте рассмотрим, как это реализовать на практике.
Как определить неиспользуемые категории
Для начала нам нужно определить, что считать неиспользуемой категорией. Обычно это категории с нулевым количеством записей, либо с количеством постов ниже определенного порога, например, менее 3.
Для получения списка таких категорий можно использовать WP_Query и функции таксономии WordPress.
Пример функции для выборки неиспользуемых категорий
function wpdetect_get_unused_categories($min_posts = 1) {
$args = [
'taxonomy' => 'category',
'hide_empty' => false
];
$categories = get_terms($args);
$unused = [];
foreach ($categories as $category) {
if ($category->count < $min_posts) {
$unused[] = $category;
}
}
return $unused;
}Вызов wpdetect_get_unused_categories(1) вернет все категории с 0 постов, а wpdetect_get_unused_categories(3) — все категории с менее 3 постов.
Автоматическое отключение и скрытие неиспользуемых категорий
Отключение категории в WordPress можно реализовать разными способами, поскольку стандартного статуса «отключена категория» нет. Чаще всего применяются следующие методы:
- Удаление категории (не всегда желательно).
- Скрытие категории из меню и виджетов.
- Отключение возможности назначения категории к новым постам.
Мы рассмотрим метод скрытия категории из фронтенда и административных форм, чтобы не потерять данные и не удалять категории.
Как скрыть категорию из меню и виджетов
Для скрытия категории можно использовать фильтр get_terms, чтобы исключить неиспользуемые категории из выборки.
function wpdetect_exclude_unused_categories($terms, $taxonomies, $args) {
if (in_array('category', $taxonomies)) {
$min_posts = 1; // порог для исключения
foreach ($terms as $key => $term) {
if ($term->count < $min_posts) {
unset($terms[$key]);
}
}
}
return $terms;
}
add_filter('get_terms', 'wpdetect_exclude_unused_categories', 10, 3);Этот код исключит все категории с количеством постов меньше 1 из выборки, используемой WordPress в меню, виджетах и других элементах.
Отключение выбора неиспользуемых категорий в админке
Для предотвращения назначения неиспользуемых категорий к новым постам можно применить фильтр wp_terms_checklist_args — он позволяет модифицировать список категорий в метабоксе.
function wpdetect_disable_unused_categories_selection($args, $post_id) {
$min_posts = 1;
$unused_cats = wpdetect_get_unused_categories($min_posts);
$disabled_ids = wp_list_pluck($unused_cats, 'term_id');
$args['disabled_categories'] = $disabled_ids;
return $args;
}
add_filter('wp_terms_checklist_args', 'wpdetect_disable_unused_categories_selection', 10, 2);Далее нужно добавить скрипт, который сделает эти категории неактивными в чеклистах:
function wpdetect_disable_categories_script() {
?>
<script>
document.addEventListener('DOMContentLoaded', function () {
let disabledCats = <?php echo json_encode($disabled_ids); ?>;
disabledCats.forEach(function(catId) {
let checkbox = document.querySelector('input[type="checkbox"][value="'+catId+'"][name="post_category[]"]');
if (checkbox) {
checkbox.disabled = true;
checkbox.parentElement.style.color = '#aaa';
}
});
});
</script>
<?php
}
add_action('admin_footer-post.php', 'wpdetect_disable_categories_script');
add_action('admin_footer-post-new.php', 'wpdetect_disable_categories_script');<Этот скрипт сделает неиспользуемые категории в списке выбора недоступными для выбора.
Плагины для управления и оптимизации категорий
Если вы не хотите писать код, можно использовать готовые решения. Например:
- Term Management Tools — расширяет возможности управления категориями и метками.
- Clearfy Pro — плагин для оптимизации WordPress, включая управление таксономиями и отключение неиспользуемых элементов.
Использование Clearfy Pro существенно упрощает задачу. В нем есть модуль для очистки и скрытия неиспользуемых категорий и таксономий, что экономит время и минимизирует ошибки.
Автоматизация с помощью WP-Cron для периодического контроля категорий
Чтобы не запускать скрипты вручную, можно настроить WP-Cron задачу, которая будет периодически проверять категории и отключать или скрывать неиспользуемые.
Пример регистрации WP-Cron задачи:
function wpdetect_schedule_category_cleanup() {
if (!wp_next_scheduled('wpdetect_category_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpdetect_category_cleanup_hook');
}
}
add_action('wp', 'wpdetect_schedule_category_cleanup');
function wpdetect_category_cleanup() {
$unused = wpdetect_get_unused_categories(1);
// Здесь логика для отключения или уведомления админа
// Например, можно отправить email с перечнем неиспользуемых категорий
}
add_action('wpdetect_category_cleanup_hook', 'wpdetect_category_cleanup');Такой подход позволяет автоматизировать процесс и не пропускать появление лишних категорий.
Заключение
Автоматизация отключения и скрытия неиспользуемых категорий — важный шаг для поддержания чистоты структуры WordPress сайта. С помощью приведенных функций и фильтров можно эффективно исключить из интерфейса категории без контента, не удаляя их физически и не рискуя потерять данные. Для упрощения управления рекомендуем рассмотреть использование плагинов типа Clearfy Pro. А для регулярного обслуживания — настроить WP-Cron задачи, чтобы процесс был полностью автоматическим.