В процессе работы с WordPress у вас может накопиться большое количество пустых категорий и меток (тегов), которые не используются для публикаций. Такие "мертвые" таксономии не только создают беспорядок в админке, но и могут негативно влиять на производительность базы данных и SEO сайта. В этой статье мы подробно рассмотрим, как найти и удалить пустые категории и метки из базы данных WordPress с помощью SQL-запросов и PHP-кода, а также обратим внимание на полезные плагины для автоматизации этого процесса.
Причины появления пустых категорий и меток
Пустые категории и метки появляются по нескольким причинам:
- Удаление записей, которым были присвоены эти таксономии, но сами категории и метки не удалились;
- Импорт контента с ошибками или некорректным сопоставлением таксономий;
- Эксперименты с организацией контента, когда создаются категории и метки, которые потом не используются;
- Ошибки в плагинах, которые создают таксономии без привязки к записям.
Поддержание базы данных в чистоте особенно важно для крупных сайтов с тысячами публикаций и таксономий.
Как найти пустые категории и метки через SQL
В WordPress категории и метки хранятся в таблицах wp_terms (сам список), wp_term_taxonomy (тип таксономии и счетчик), и wp_term_relationships (связи с записями). Пустые категории и метки — это те, у которых счетчик count в wp_term_taxonomy равен нулю.
Вот SQL-запрос, который покажет пустые категории:
SELECT t.term_id, t.name, tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'category' AND tt.count = 0;
Аналогичный запрос для пустых тегов:
SELECT t.term_id, t.name, tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'post_tag' AND tt.count = 0;
Эти запросы помогут вам оценить, сколько пустых таксономий у вас есть.
Удаление пустых категорий и меток через SQL
Чтобы полностью удалить пустые категории и метки из базы данных, нужно удалить записи из трех таблиц: wp_terms, wp_term_taxonomy и wp_term_relationships. Но так как пустые таксономии не связаны с записями, то в wp_term_relationships таких связей нет.
Для удаления пустых категорий:
DELETE tt, t
FROM wp_term_taxonomy tt
JOIN wp_terms t ON tt.term_id = t.term_id
WHERE tt.taxonomy = 'category' AND tt.count = 0;
Для удаления пустых тегов:
DELETE tt, t
FROM wp_term_taxonomy tt
JOIN wp_terms t ON tt.term_id = t.term_id
WHERE tt.taxonomy = 'post_tag' AND tt.count = 0;
Обратите внимание, что команда DELETE tt, t FROM ... работает в MySQL и удаляет записи из обеих таблиц одновременно. Перед выполнением таких операций обязательно сделайте резервную копию базы данных!
Автоматизация удаления пустых таксономий с помощью PHP-функций
Если вы хотите регулярно очищать базу от пустых категорий и меток, можно использовать код на PHP, который выполняет очистку через WP API. Вот пример функции для wpstart, которая удаляет пустые категории:
function wpstart_delete_empty_terms( $taxonomy = 'category' ) {
$empty_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => true, // Вернет только непустые термы
'fields' => 'ids',
));
$all_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
));
$empty_only = array_diff($all_terms, $empty_terms);
foreach ( $empty_only as $term_id ) {
wp_delete_term( $term_id, $taxonomy );
}
}
// Удаляем пустые категории
wpstart_delete_empty_terms('category');
// Удаляем пустые метки
wpstart_delete_empty_terms('post_tag');
Эта функция получает список всех терминов таксономии, затем тех, что используются, и вычисляет пустые. Далее удаляет их через стандартную функцию wp_delete_term. Этот способ безопаснее, чем прямые SQL-запросы, так как вызывает все необходимые хуки и обновляет кэш.
Плагины для очистки таксономий
Если вы не хотите писать код, можно использовать специализированные плагины для управления таксономиями:
- Term Cleaner — плагин для удаления пустых терминов, удобный и простой;
- Clearfy Pro — более мощный инструмент для оптимизации WordPress, включает функции очистки базы и таксономий;
- WPRemark — плагин с функциями управления комментариями и чистки базы.
Плагины значительно упрощают задачу и подходят для пользователей без технических навыков.
Важные рекомендации при удалении пустых категорий и меток
Перед тем как удалять таксономии, убедитесь, что они действительно не используются. Иногда счетчик count может быть некорректен из-за сбоев или ошибок плагинов. Для проверки можно использовать WP CLI команду:
wp term recount category
wp term recount post_tag
Эти команды пересчитают количество записей в каждой таксономии и обновят счетчики в базе.
Также рекомендуется делать резервную копию базы данных, чтобы безопасно откатить изменения при ошибках.
Итоговые советы
Удаление пустых категорий и меток — это важный этап оптимизации и поддержания чистоты WordPress-сайта. Используйте SQL-запросы, PHP-код или плагины в зависимости от уровня вашей подготовки и объема работы. Регулярно проверяйте и очищайте базу, чтобы избежать накопления «мусора» и сохранить быстрый отклик сайта.