В WordPress с течением времени в базе данных накапливаются пустые термины таксономий — категории, теги и кастомные таксономии, к которым не привязаны записи. Такие термины не несут пользы, загромождают админку и могут негативно влиять на производительность сайта. В этой статье подробно разберем, как найти и удалить пустые термины таксономий программно, а также с помощью плагинов.
Почему важно удалять пустые термины таксономий в WordPress
Пустые термины таксономий — это записи в таблице wp_terms и связанные с ними в wp_term_taxonomy, у которых нет связанных записей в wp_term_relationships. Основные проблемы, которые они создают:
- Загромождение интерфейса админки — пустые категории и теги мешают ориентироваться.
- Накопление мусора в базе данных — увеличивается размер таблиц и снижается скорость запросов.
- Потенциальные ошибки в плагинах и темах, которые перебирают все термины.
Регулярное удаление пустых терминов — хороший способ поддерживать сайт в порядке и улучшить его производительность.
Как найти пустые термины таксономий через SQL-запрос
Для начала полезно понять, какие термины считать пустыми. В таблице wp_term_taxonomy поле count хранит количество записей, связанных с термином. Если count=0, термин пустой.
Для получения списка пустых терминов для определенной таксономии используйте SQL-запрос:
SELECT t.term_id, t.name FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.count = 0 AND tt.taxonomy = 'category';
Замените 'category' на нужную таксономию, например post_tag или кастомную таксономию.
Так вы получите список пустых терминов, которые можно удалить.
Удаление пустых терминов программно с помощью PHP-функции
Для автоматизации удаления пустых терминов можно написать функцию, которую удобно запускать через WP-CLI, CRON или вручную в админке.
Ниже пример функции wpacademy_delete_empty_terms, удаляющей пустые термины для заданной таксономии:
function wpacademy_delete_empty_terms($taxonomy = 'category') {
$empty_terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => true,
'fields' => 'ids'
]);
// get_terms с hide_empty=true возвращает непустые термины, нужно наоборот
$all_terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids'
]);
$empty_terms = array_diff($all_terms, $empty_terms);
if (empty($empty_terms)) {
return 'Пустых терминов не найдено.';
}
foreach ($empty_terms as $term_id) {
wp_delete_term($term_id, $taxonomy);
}
return count($empty_terms) . ' пустых терминов удалено.';
}
Пример вызова функции:
echo wpacademy_delete_empty_terms('post_tag');
Обратите внимание: функция сначала получает все термины и те, которые не пустые, затем вычисляет разницу — это и есть пустые термины. После этого они удаляются функцией wp_delete_term.
Использование плагинов для удаления пустых терминов
Если вы не хотите писать код, можно использовать проверенные плагины:
- Term Management Tools — плагин с функцией массового удаления терминов, включая пустые.
- Bulk Delete — позволяет удалять записи и термины по разным критериям, в том числе пустые.
- Clearfy Pro — профессиональный инструмент оптимизации WordPress с функцией очистки базы, включая удаление пустых терминов.
Эти плагины облегчают задачу и подходят для регулярной очистки.
Автоматизация удаления пустых терминов через WP-Cron
Чтобы поддерживать базу данных в порядке, можно настроить автоматический запуск функции удаления пустых терминов.
Пример добавления задачи в WP-Cron:
function wpacademy_schedule_empty_terms_cleanup() {
if (!wp_next_scheduled('wpacademy_empty_terms_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpacademy_empty_terms_cleanup_hook');
}
}
add_action('wp', 'wpacademy_schedule_empty_terms_cleanup');
add_action('wpacademy_empty_terms_cleanup_hook', function() {
wpacademy_delete_empty_terms('category');
wpacademy_delete_empty_terms('post_tag');
});
Этот код запустит очистку пустых терминов категорий и тегов ежедневно.
Важные рекомендации при работе с терминами
Перед удалением терминов сделайте резервную копию базы данных — в случае ошибки можно восстановить данные.
Если на сайте используются кастомные таксономии, обязательно проверяйте, что удаление пустых терминов не нарушит логику работы плагинов и тем.
Для сайтов с большим количеством терминов и сложной структурой рекомендуем выполнять операции на тестовом окружении.
Итоги
Удаление пустых терминов таксономий — важная часть регулярного обслуживания WordPress сайта. Приведенные методы и кодовые примеры помогут вам быстро найти и удалить ненужные термины, повысить удобство работы с админкой и снизить нагрузку на базу данных.
Если хотите более удобный способ с графическим интерфейсом и дополнительными возможностями оптимизации, обратите внимание на Clearfy Pro.