В процессе работы с WordPress накапливаются термины таксономий (категории, метки, кастомные таксономии), которые со временем могут перестать использоваться в записях. Такие неиспользуемые термины не несут пользы, но занимают место в базе данных и могут замедлять запросы, особенно на крупных проектах. В этой статье рассмотрим, как автоматически находить и удалять неиспользуемые термины таксономий, как сделать это безопасно и эффективно, и приведём примеры кода для реализации автоматизации.
Почему важно удалять неиспользуемые термины таксономий
С каждым созданием и удалением записей в WordPress таксономии могут накапливать «мусор» — термины, к которым не прикреплено ни одной записи. Это происходит по разным причинам: удаление записей без очистки связей, ошибки в администрировании, импорт и экспорт контента и т.д.
Последствия накопления неиспользуемых терминов:
- Рост размера базы данных, что может повлиять на скорость работы и резервное копирование;
- Загрязнение интерфейса админки — лишние категории и метки усложняют навигацию;
- Потенциальные ошибки в логике сайта, если код обращается к таким терминам.
Поэтому регулярная очистка — важный этап оптимизации любого сайта на WordPress.
Как определить неиспользуемые термины таксономий
Каждый термин в WordPress хранит количество объектов (posts), к которым он привязан, в поле count таблицы wp_terms и связанной таблице wp_term_taxonomy. Значение count показывает, сколько записей связано с термином. Если count равен нулю, термин не используется.
Однако иногда из-за ошибок в базе данных счётчик может быть некорректным. Поэтому лучше дополнительно проверять наличие связей через SQL-запросы или функции WordPress.
Пример SQL-запроса для поиска неиспользуемых терминов
SELECT t.term_id, t.name, tt.taxonomy FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.count = 0;Этот запрос возвращает список терминов в любых таксономиях с нулевым счётчиком.
Автоматическое удаление неиспользуемых терминов через код
Чтобы регулярно очищать базу, можно написать функцию, которая будет удалять все термины с count = 0. Для безопасности рекомендуется ограничиваться определёнными таксономиями, например, только категорий и меток.
Пример функции для удаления терминов с count=0
function wpma_delete_unused_taxonomy_terms() {
$taxonomies = array('category', 'post_tag'); // Укажите нужные таксономии
foreach ($taxonomies as $taxonomy) {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
));
if (is_wp_error($terms) || empty($terms)) {
continue;
}
foreach ($terms as $term_id) {
$term = get_term($term_id, $taxonomy);
if ($term && $term->count == 0) {
wp_delete_term($term_id, $taxonomy);
}
}
}
}Эта функция перебирает все категории и метки, и удаляет те, что не привязаны ни к одной записи.
Как запускать функцию автоматически
Для автоматизации можно использовать WP Cron и запускать очистку, например, раз в неделю. Вот пример добавления задачи в cron:
function wpma_schedule_term_cleanup() {
if (!wp_next_scheduled('wpma_term_cleanup_event')) {
wp_schedule_event(time(), 'weekly', 'wpma_term_cleanup_event');
}
}
add_action('wp', 'wpma_schedule_term_cleanup');
add_action('wpma_term_cleanup_event', 'wpma_delete_unused_taxonomy_terms');<Этот код добавляет еженедельную задачу, которая вызывает функцию удаления неиспользуемых терминов.
Использование плагинов для управления терминами
Если хочется получить более гибкий и визуальный инструмент, можно использовать готовые плагины. Например:
- Term Management Tools — позволяет сливать, удалять и переносить термины вручную;
- WP Sweep — плагин для очистки базы данных, включая удаление неиспользуемых терминов;
- Clearfy Pro (https://wpshop.ru/plugins/clearfy-pro/?utm_source=wpma.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-udaljat-neispolzuemye-taxonomy-terms-v-wordpress) — комплексный плагин для оптимизации сайта, включая работу с таксономиями.
При использовании плагинов внимательно проверяйте функции удаления и делайте резервные копии базы.
Как избежать ошибок при удалении терминов
Удаление терминов может повлиять на работу сайта, если темы или плагины ссылаются на них напрямую. Поэтому:
- Перед автоматическим удалением выполняйте резервное копирование базы данных;
- Тестируйте удаление на копии сайта или в режиме разработчика;
- Ограничивайте удаление только теми таксономиями, которые точно не содержат важных терминов;
- При необходимости реализуйте логи удаления для последующего анализа.
Также стоит учитывать, что кастомные таксономии могут иметь иные правила использования, поэтому внимательно изучайте структуру сайта.
Дополнительные советы по оптимизации таксономий
Кроме удаления неиспользуемых терминов, полезно:
- Объединять похожие термины с помощью плагина Term Management Tools;
- Использовать кастомные таксономии для специфичных типов контента, чтобы не смешивать данные;
- Очищать кэш после массовых изменений терминов, особенно если используется плагин кеширования;
- Автоматизировать задачи с помощью WP Cron для регулярного поддержания порядка.
Такой подход поможет поддерживать базу данных сайта в хорошем состоянии и повысит скорость обработки запросов.