В процессе работы с WordPress накапливаются пустые термины — категории, теги и другие таксономии, к которым не привязано ни одной записи. Это засоряет базу данных, мешает SEO и усложняет администрирование сайта. В этой статье мы разберём, как автоматически находить и удалять такие пустые термины с помощью кода и плагинов, а также как настроить регулярное выполнение этой задачи.
Почему важно удалять пустые термины в WordPress
Пустые термины занимают место в базе данных и могут негативно влиять на структуру сайта. Во-первых, излишние категории и теги усложняют выбор для пользователей и администраторов. Во-вторых, поисковые системы могут воспринимать их как дублирующий контент или мусор, что снижает SEO-показатели.
Регулярное удаление пустых терминов помогает держать таксономии в порядке, ускоряет работу админки и оптимизирует размер базы данных. Особенно это актуально для крупных сайтов и магазинов на WooCommerce, где таксономий и терминов тысячи.
Как найти пустые термины в WordPress вручную
Для начала рассмотрим, как определить пустые термины без использования кода. В админке WordPress перейдите в раздел «Записи» → «Рубрики» или «Метки». Там вы увидите список терминов с колонкой «Записей» — если у термина значение 0, значит он пустой.
Этот способ подходит для визуального контроля, но при большом количестве терминов неудобен и не автоматизирован.
Автоматическое удаление пустых терминов с помощью кода
Создание функции для удаления пустых терминов
Давайте напишем функцию, которая будет удалять все пустые термины в заданной таксономии. Для универсальности сделаем её с параметром таксономии.
function wponline_delete_empty_terms($taxonomy = 'category') {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => true,
'fields' => 'ids'
));
$all_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids'
));
$empty_terms = array_diff($all_terms, $terms);
foreach ($empty_terms as $term_id) {
wp_delete_term($term_id, $taxonomy);
}
}Объяснение:
get_termsсhide_empty = trueвозвращает ID терминов с записями;get_termsсhide_empty = false— все термины;- Разница между ними — это пустые термины, которые мы и удаляем через
wp_delete_term.
Пример запуска функции для нескольких таксономий
add_action('init', 'wponline_delete_empty_terms_all');
function wponline_delete_empty_terms_all() {
$taxonomies = array('category', 'post_tag', 'product_cat'); // добавьте свои таксономии
foreach ($taxonomies as $taxonomy) {
wponline_delete_empty_terms($taxonomy);
}
}Этот код можно добавить в файл functions.php вашей темы или в отдельный плагин. Он удалит пустые термины при каждом вызове init. Для экономии ресурсов можно запускать его вручную или по расписанию.
Автоматизация удаления пустых терминов с помощью WP-Cron
Чтобы не запускать функцию вручную, полезно настроить WP-Cron для регулярной очистки базы.
if (!wp_next_scheduled('wponline_cron_delete_empty_terms')) {
wp_schedule_event(time(), 'daily', 'wponline_cron_delete_empty_terms');
}
add_action('wponline_cron_delete_empty_terms', 'wponline_delete_empty_terms_all');Этот код добавляет ежедневное событие, которое будет вызывать функцию очистки пустых терминов.
Если хотите изменить период, используйте фильтр cron_schedules для добавления новых интервалов.
Использование плагинов для удаления пустых терминов
Если вы не хотите писать код, можно воспользоваться готовыми плагинами:
- Term Management Tools — позволяет массово удалять и объединять термины, включая пустые.
- WP Sweep — очищает базу от мусора, в том числе пустых категорий и тегов.
- Clearfy Pro с сайта WPSHOP — содержит инструменты для оптимизации базы, включая очистку таксономий.
Плагины хороши для быстрого решения, но для регулярной автоматизации и кастомных условий лучше использовать код.
Рекомендации по безопасности и тестированию
Перед внедрением автоматического удаления терминов обязательно сделайте резервную копию базы данных. Некорректное удаление может привести к потере данных.
Тестируйте код на локальной или тестовой среде, чтобы убедиться, что удаляются только пустые термины, и не затрагиваются нужные.
Для контроля можно добавить логирование удалённых терминов в файл или базу, чтобы отслеживать изменения.
Заключение
Автоматическое удаление пустых терминов — важная задача для поддержания чистоты и оптимизации WordPress. Используя приведённые функции и примеры, вы сможете регулярно очищать базу данных от ненужных категорий и тегов, улучшая производительность и SEO вашего сайта.
Для расширенного управления таксономиями и оптимизации можно рассмотреть плагин Clearfy Pro, который кроме прочего предлагает удобные инструменты для работы с терминами.