В процессе работы с WordPress на сайте накапливаются термины таксономий (категории, метки и кастомные таксономии), которые больше не используются ни в одном из записей. Такие термины создают избыточные данные в базе и могут замедлять работу сайта, особенно при большом количестве. В этой статье рассмотрим, как найти и удалить неиспользуемые термины таксономий, используя как готовые плагины, так и собственный код.
Почему важно удалять неиспользуемые термины таксономий
Со временем количество терминов таксономий на сайте может расти, особенно если используется много кастомных таксономий. Неиспользуемые термины занимают место в базе данных, что увеличивает размер таблиц и время запросов. Также это может усложнять админку и запутывать редакторов.
Регулярная очистка базы от таких терминов помогает поддерживать сайт в порядке, улучшает производительность и снижает риск ошибок.
Особенно это актуально для крупных сайтов с большим количеством записей и таксономий.
Поиск неиспользуемых терминов таксономий с помощью SQL-запроса
Самый быстрый способ найти неиспользуемые термины — выполнить SQL-запрос к базе данных. В WordPress информация о терминах и их связях хранится в таблицах wp_terms, wp_term_taxonomy и wp_term_relationships.
Чтобы найти термины, у которых нет связанных записей, можно использовать следующий запрос:
SELECT t.term_id, t.name, tt.taxonomy
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tr.object_id IS NULL
AND tt.count = 0
ORDER BY tt.taxonomy, t.name;
Этот запрос выбирает все термины, которые не связаны ни с одной записью, у которых количество связанных объектов равно нулю.
Перед удалением обязательно сделайте резервную копию базы данных.
Удаление неиспользуемых терминов таксономий с помощью PHP-кода
Если вы хотите автоматизировать процесс и встроить его в админку или плагин, можно написать функцию, которая будет искать и удалять такие термины.
Вот пример функции wptavern_delete_unused_terms(), которая удаляет неиспользуемые термины для заданных таксономий:
function wptavern_delete_unused_terms(array $taxonomies = []) {
if (empty($taxonomies)) {
$taxonomies = get_taxonomies([], 'names');
}
foreach ($taxonomies as $taxonomy) {
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => true,
'fields' => 'ids',
]);
$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);
}
}
}
// Пример вызова для категорий и меток
wptavern_delete_unused_terms(['category', 'post_tag']);
В этом коде мы получаем все термины таксономии, затем фильтруем по тем, у которых нет записей, и удаляем их функцией wp_delete_term(). Такой подход безопасен и использует встроенные функции WordPress.
Использование плагинов для удаления неиспользуемых терминов
Если вы не хотите писать код, можно воспользоваться специализированными плагинами для очистки базы:
- Term Management Tools — расширяет возможности управления терминами, позволяет сливать и удалять неиспользуемые.
- WP-Optimize — популярный плагин для оптимизации базы данных, в том числе удаляет неиспользуемые термины и метаданные.
Важно: перед использованием плагина обязательно создайте резервную копию базы и тестируйте на копии сайта.
Рекомендации по безопасности и бэкапу
Удаление терминов — необратимая операция. Чтобы избежать потери данных, всегда делайте резервную копию сайта и базы данных перед выполнением очистки.
Для резервного копирования можно использовать плагин WP Backup или аналогичные инструменты.
После удаления проверьте работу сайта, убедитесь, что ссылки на таксономии корректны и не ведут на пустые страницы.
Автоматизация очистки неиспользуемых терминов с WP-Cron
Чтобы регулярно поддерживать базу в чистоте, имеет смысл автоматизировать процесс удаления через планировщик WP-Cron.
Добавьте в файл функций темы или плагина такой код:
add_action('wptavern_cron_delete_unused_terms', 'wptavern_delete_unused_terms');
if (!wp_next_scheduled('wptavern_cron_delete_unused_terms')) {
wp_schedule_event(time(), 'weekly', 'wptavern_cron_delete_unused_terms');
}
Это создаст еженедельное событие, которое будет вызывать функцию очистки. Для корректной работы убедитесь, что используете функцию wptavern_delete_unused_terms() из предыдущего примера.
Выводы и полезные ссылки
Удаление неиспользуемых терминов таксономий помогает поддерживать базу данных WordPress в оптимальном состоянии, ускоряет работу сайта и упрощает администрирование.
Рекомендуется регулярно проверять и удалять такие термины, особенно на крупных проектах.
Для удобства можно интегрировать очистку в WP-Cron или использовать надежные плагины, например, Clearfy Pro, который содержит множество инструментов для оптимизации WordPress.