В процессе работы с WordPress накапливается множество терминов в таксономиях (категории, метки, кастомные таксономии), которые могут оказаться пустыми — то есть не привязанными ни к одному посту. Пустые термины не оказывают прямого влияния на работу сайта, но они загромождают админку, усложняют навигацию и могут негативно влиять на производительность при большом объёме данных. В этой статье рассмотрим, как удалить такие пустые термины из таксономий вручную и автоматически с помощью кода и плагинов.
Почему важно удалять пустые термины в WordPress
Пустые термины — это записи в базе данных, которым не назначены посты. Их наличие может привести к нескольким проблемам:
- Загромождение интерфейса администратора, особенно если используется много категорий и меток.
- Увеличение объёма запросов к базе данных при выборках таксономий.
- Потенциальное снижение удобства SEO-оптимизации — пустые страницы таксономий могут индексироваться поисковыми системами.
Регулярное удаление таких терминов помогает держать базу данных в порядке и оптимизировать работу сайта.
Как найти пустые термины в стандартных таксономиях WordPress
Для начала разберёмся, как обнаружить пустые термины вручную и программно:
Использование встроенной админки
В разделе Записи - Рубрики или Записи - Метки в админке WordPress можно увидеть количество записей рядом с каждым термином. Если количество равно нулю, термин пустой. Однако, если терминов много, искать вручную неудобно.
Пример запроса для получения пустых терминов в PHP
Для программного поиска пустых терминов используйте функцию get_terms() с параметром 'hide_empty' => true для вывода только используемых терминов, или 'hide_empty' => false для всех. Чтобы получить пустые, можно сделать так:
$all_terms = get_terms([
'taxonomy' => 'category',
'hide_empty' => false
]);
$empty_terms = array_filter($all_terms, function($term) {
return $term->count === 0;
});В этом коде мы получаем все термины таксономии «category» и фильтруем те, у которых количество записей равно нулю.
Как удалить пустые термины вручную через код
Для удаления терминов можно использовать функцию wp_delete_term(). Ниже пример функции, которая удаляет все пустые термины из указанной таксономии:
function wp_pro_delete_empty_terms($taxonomy = 'category') {
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false
]);
foreach ($terms as $term) {
if ($term->count === 0) {
wp_delete_term($term->term_id, $taxonomy);
}
}
}
// Вызов функции для категорий
wp_pro_delete_empty_terms('category');Такой код можно запускать через файл темы functions.php или в виде отдельного плагина для разовой очистки базы.
Автоматизация удаления пустых терминов: cron-задачи и хуки
Для регулярного поддержания порядка в базе удобно настроить автоматическую очистку пустых терминов. Рассмотрим пример добавления WP-Cron задачи, которая будет запускать функцию удаления раз в неделю.
function wp_pro_schedule_empty_terms_cleanup() {
if (!wp_next_scheduled('wp_pro_empty_terms_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wp_pro_empty_terms_cleanup_hook');
}
}
add_action('wp', 'wp_pro_schedule_empty_terms_cleanup');
add_action('wp_pro_empty_terms_cleanup_hook', function() {
wp_pro_delete_empty_terms('category');
wp_pro_delete_empty_terms('post_tag');
// Добавьте свои кастомные таксономии здесь
});Такой подход позволяет автоматически удалять пустые термины без вашего участия, поддерживая порядок в базе данных.
Плагины для работы с таксономиями и удалением пустых терминов
Если вы предпочитаете не писать код, существуют плагины, которые помогут:
- Term Management Tools — расширяет возможности управления терминами, позволяет объединять и удалять термины, включая пустые.
- WP Bulk Delete — мощный инструмент для массового удаления данных, включая пустые термины таксономий с гибкими фильтрами.
Для установки плагина перейдите в админку WordPress > Плагины > Добавить новый, введите название и установите. После активации настройте фильтры для удаления пустых терминов.
Особенности удаления пустых терминов в кастомных таксономиях
Если на вашем сайте используются кастомные таксономии, процедура удаления аналогична. Важно знать точное имя таксономии. Например, для таксономии product_category вызов будет:
wp_pro_delete_empty_terms('product_category');Также стоит проверить, что удаление терминов не нарушит работу плагинов или тем, которые могут использовать данные термины.
Заключение по теме удаления пустых терминов
Удаление пустых терминов — простая, но важная задача для поддержания чистоты базы данных WordPress. Используйте приведённые примеры кода для разовой или регулярной очистки, либо плагин для удобства и безопасности. Не забывайте делать резервные копии базы перед массовыми изменениями.
Если хотите попробовать удобный плагин для массового удаления терминов, рекомендую WP Bulk Delete — надежное решение с широкими возможностями фильтрации и настройки.