При работе с WordPress часто возникает ситуация, когда в базе данных копятся неиспользуемые термины таксономий — категории, метки и кастомные таксономии, которые больше не связаны ни с одним постом. Это может замедлять сайт, усложнять админку и создавать лишний «мусор» в базе данных. В этой статье разберем, как безопасно и эффективно удалить такие термины с помощью кода и плагинов, а также как автоматизировать этот процесс.
Почему важно удалять неиспользуемые термины taxonomy в WordPress
С каждой новой записью, импортом или удалением контента в WordPress, структуру таксономий может засорять большое количество терминов, которые уже не используются. Проблемы от этого:
- Нагрузка на базу данных. Запросы, например, на вывод списка категорий, будут дольше выполняться.
- Путаница для администраторов. В админке становится сложнее ориентироваться в списках терминов, когда там много ненужных элементов.
- SEO риски. Неиспользуемые термины могут порождать пустые архивные страницы с низкой ценностью.
Удаление таких терминов — важный этап поддержания чистоты и оптимизации вашего сайта.
Способы удаления неиспользуемых терминов taxonomy
Ручное удаление через админку WordPress
Самый простой способ — зайти в раздел Записи > Рубрики или другую таксономию и удалить термины, которые не используются. Но это неэффективно, если терминов много или если нужно очистить кастомные таксономии.
Удаление неиспользуемых терминов через SQL-запросы
Можно выполнить SQL-запрос напрямую в базе данных. Например, чтобы удалить категории без привязанных постов:
DELETE FROM wp_terms
WHERE term_id IN (
SELECT t.term_id
FROM wp_terms t
LEFT JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tr.object_id IS NULL AND tt.taxonomy = 'category'
);
Но такой способ опасен, если вы не уверены в структуре базы данных, и его не стоит использовать без резервной копии.
Автоматизация удаления с помощью пользовательской функции в WordPress
Гораздо безопаснее и удобнее использовать PHP-код, который проверит и удалит неиспользуемые термины программно.
Пример функции для удаления неиспользуемых терминов из категории:
function wpmeta_delete_unused_terms($taxonomy = 'category') {
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => true, // получаем только используемые
'fields' => 'ids',
'exclude' => [],
'orderby' => 'count',
]);
// Получаем все термины
$all_terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
]);
// Определяем неиспользуемые
$unused_terms = array_diff($all_terms, $terms);
foreach ($unused_terms as $term_id) {
wp_delete_term($term_id, $taxonomy);
}
}
// Запускаем удаление для категорий
wpmeta_delete_unused_terms('category');
Эту функцию можно добавить в файл functions.php вашей темы или в отдельный плагин для разовой очистки.
Удаление неиспользуемых терминов из кастомных таксономий
Для кастомных таксономий принцип такой же, но важно указать правильное имя таксономии. Например, если у вас есть таксономия product_tag, можно запустить:
wpmeta_delete_unused_terms('product_tag');
Перед вызовом функции убедитесь, что таксономия зарегистрирована и доступна. Если нужно очистить несколько таксономий, вызовите функцию для каждой.
Обработка ошибок и безопасность
При удалении терминов важно учитывать, что они могут использоваться другими плагинами или зависимостями. Рекомендуется создавать резервные копии базы данных перед массовыми операциями. Также не стоит запускать такие функции на каждом запросе, чтобы не получить нагрузку. Оптимально запускать по Cron или вручную через административную панель.
Плагины для очистки неиспользуемых терминов в WordPress
Если вы предпочитаете графический интерфейс и готовые решения, можно обратить внимание на следующие плагины:
- Term Cleaner — плагин, который автоматически выявляет и удаляет неиспользуемые термины таксономий. Поддерживает кастомные таксономии.
- Clearfy Pro — расширенный плагин для оптимизации и очистки WordPress, включающий инструмент работы с таксономиями, удаление мусора и оптимизацию базы данных.
Использование плагинов удобно для регулярной автоматической очистки и минимизации ошибок.
Реализация удаления неиспользуемых терминов по Cron для автоматизации
Чтобы не запускать функцию вручную, можно добавить ее вызов в планировщик WordPress — WP-Cron.
function wpmeta_schedule_term_cleanup() {
if ( ! wp_next_scheduled( 'wpmeta_term_cleanup_hook' ) ) {
wp_schedule_event( time(), 'weekly', 'wpmeta_term_cleanup_hook' );
}
}
add_action('wp', 'wpmeta_schedule_term_cleanup');
add_action('wpmeta_term_cleanup_hook', function() {
wpmeta_delete_unused_terms('category');
wpmeta_delete_unused_terms('post_tag');
// Добавьте кастомные таксономии при необходимости
});
Этот код запустит очистку один раз в неделю, что удобно для поддержания базы в порядке без постоянных ручных действий.
Выводы и рекомендации
Удаление неиспользуемых терминов таксономий — важная часть технической поддержки WordPress сайтов, особенно при активном использовании категорий, меток и кастомных таксономий. Лучший способ — сочетать автоматизацию через безопасные функции и использование проверенных плагинов, таких как Clearfy Pro. Не забывайте делать резервные копии и тестировать изменения на тестовом сайте.