В WordPress со временем в базу данных накапливаются термины таксономий (категории, метки, кастомные таксономии), которые не связаны ни с одним постом. Это может замедлять работу сайта, усложнять управление контентом и создавать беспорядок в административной панели. В этой статье рассмотрим, как эффективно находить и удалять такие неиспользуемые термины с помощью кода и плагинов.
Почему важно удалять неиспользуемые термины таксономий
Неиспользуемые термины — это термины, у которых счетчик привязанных записей равен нулю. Они могут появляться при удалении постов, изменении таксономий, импортных ошибках или просто при тестировании. Если таких терминов много, это:
- Увеличивает размер базы данных и время запросов.
- Затрудняет навигацию по административной панели.
- Может привести к ошибкам или конфликтам, если некоторые плагины работают с таксономиями.
Регулярная очистка помогает поддерживать базу в порядке и ускоряет работу сайта.
Как найти неиспользуемые термины с помощью SQL-запроса
Для начала полезно получить список терминов с нулевой связью. Вот пример запроса для стандартной таксономии category:
SELECT t.term_id, t.name FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'category' AND tt.count = 0;Если у вас кастомная таксономия, замените 'category' на её название. Этот запрос покажет все категории без постов.
На основе этого результата можно принимать решение об удалении.
Удаление неиспользуемых терминов через PHP: пример функции для wpone
Автоматизируем процесс удаления с помощью кода. Ниже функция wpone_delete_unused_terms удаляет все термины указанной таксономии с нулевым счетчиком:
function wpone_delete_unused_terms($taxonomy = 'category') {
if (!taxonomy_exists($taxonomy)) {
return new WP_Error('invalid_taxonomy', 'Таксономия не найдена');
}
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => true,
));
// Получаем все термины, включая пустые
$all_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
$deleted_count = 0;
foreach ($all_terms as $term) {
if ($term->count == 0) {
wp_delete_term($term->term_id, $taxonomy);
$deleted_count++;
}
}
return $deleted_count;
}
// Пример вызова
$deleted = wpone_delete_unused_terms('category');
echo "Удалено терминов: " . $deleted; // Выведет количество удалённых терминовОбратите внимание, что функция проверяет наличие таксономии, получает все термины и удаляет только те, у которых счетчик равен 0.
Особенности безопасности и бэкапа
Перед удалением всегда делайте резервную копию базы данных! Удаление терминов необратимо из интерфейса.
Также можно добавить подтверждение удаления через административный интерфейс или безопасный AJAX-запрос.
Использование плагинов для удаления неиспользуемых терминов
Если вы не хотите писать код, есть несколько плагинов, которые помогут:
- Term Management Tools — расширяет возможности управления терминами, включая массовое удаление.
- WP Sweep — очищает базу данных от мусора, в том числе неиспользуемых терминов.
- Advanced Database Cleaner — инструмент для очистки и оптимизации БД, включая таксономии.
Эти плагины удобны тем, что предоставляют интерфейс для поиска и удаления, а также делают бэкап перед очисткой.
Как автоматизировать очистку неиспользуемых терминов с помощью WP-Cron
Для регулярной очистки можно настроить задачу WP-Cron. Вот пример регистрации задачи и обработчика:
add_action('wpone_delete_unused_terms_cron', 'wpone_delete_unused_terms_cron_handler');
function wpone_delete_unused_terms_cron_handler() {
// Очистка категории
wpone_delete_unused_terms('category');
// Очистка кастомной таксономии
wpone_delete_unused_terms('my_custom_taxonomy');
}
// Регистрация задачи при активации плагина или темы
if (!wp_next_scheduled('wpone_delete_unused_terms_cron')) {
wp_schedule_event(time(), 'daily', 'wpone_delete_unused_terms_cron');
}
// При деактивации отменяем задачу
register_deactivation_hook(__FILE__, function() {
$timestamp = wp_next_scheduled('wpone_delete_unused_terms_cron');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpone_delete_unused_terms_cron');
}
});Эта реализация запускает очистку ежедневно, что позволяет поддерживать базу данных в порядке без ручного вмешательства.
Как избежать повторного появления неиспользуемых терминов
Удаление — это только часть решения. Чтобы не создавать новые пустые термины, соблюдайте правила:
- При удалении постов проверяйте и удаляйте связанные термины, если они больше не нужны.
- Используйте кастомные функции для управления таксономиями, которые контролируют создание терминов.
- Оптимизируйте процессы импорта и миграции данных, чтобы не создавать пустые термины.
Если вы используете популярные плагины для SEO, например Clearfy Pro, они могут автоматически управлять таксономиями, уменьшая количество мусорных терминов.
Выводы и полезные ссылки
Удаление неиспользуемых терминов таксономий — важная задача для оптимизации WordPress-сайта. Это ускоряет работу, облегчает управление и поддерживает чистоту базы данных. Используйте как SQL-запросы, так и PHP-функции, а также проверенные плагины для автоматизации процесса.
Для удобства рекомендуем плагин Clearfy Pro — он поможет с оптимизацией и очисткой таксономий.
Также изучите документацию по функциям get_terms() и wp_delete_term() на официальном сайте WordPress для расширения возможностей.