В WordPress часто возникает ситуация, когда в базе данных накапливаются пустые термины таксономий — категории, метки и пользовательские таксономии, которые не привязаны ни к одному посту. Это не только приводит к загрязнению административной панели, но и может негативно сказаться на производительности сайта и SEO. В этой статье разберём, как удалить пустые taxonomy terms в WordPress вручную и с помощью плагинов, а также рассмотрим примеры кода для автоматизации процесса.
Что такое пустые taxonomy terms и почему их нужно удалять
Термины таксономий — это элементы, которыми WordPress группирует записи: категории, метки и кастомные таксономии. Пустыми считаются те термины, у которых нет связанных записей. Например, категория, в которую не добавлен ни один пост, или пользовательская таксономия, которой не присвоена ни одна запись.
Пустые термины:
- Загромождают интерфейс администратора, затрудняя навигацию и управление контентом.
- Могут создать избыточные URL-адреса, что негативно влияет на SEO.
- Увеличивают размер базы данных без пользы.
- Могут вызывать ошибки или конфликты с некоторыми плагинами и темами.
Поэтому регулярное удаление пустых терминов — хорошая практика для поддержания чистоты и производительности сайта.
Как найти пустые taxonomy terms через админку WordPress
В стандартном интерфейсе WordPress нет встроенной функции фильтрации терминов по количеству связанных записей. Но можно просмотреть список терминов и обратить внимание на колонку «Количество» (Count). Там отображается число записей, связанных с термином. Если значение равно 0, термин пустой.
Для массового удаления пустых терминов вручную придется выбирать их по одному, что неудобно и занимает много времени.
Плагин для управления терминами и очистки пустых
Для упрощения задачи можно использовать плагин Term Management Tools. Он добавляет дополнительные возможности для массового управления терминами, включая объединение, удаление и фильтрацию.
Однако плагин не имеет прямой функции удаления всех пустых терминов за один клик, поэтому чаще применяются кастомные решения.
Как удалить пустые taxonomy terms с помощью кода
Для автоматического удаления пустых терминов можно написать кастомный скрипт. Ниже пример функции wpwebsite_delete_empty_terms(), которая удаляет пустые термины во всех таксономиях, кроме системных (например, post_tag, category).
function wpwebsite_delete_empty_terms() {
$taxonomies = get_taxonomies(['public' => true], 'names');
foreach ($taxonomies as $taxonomy) {
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
]);
foreach ($terms as $term) {
if ($term->count === 0) {
wp_delete_term($term->term_id, $taxonomy);
}
}
}
}Эту функцию можно запустить однократно, например, через wp-cli, cron-задачу или временно подключить в functions.php темы.
Как вызвать функцию вручную через WP-CLI
Если у вас есть доступ к WP-CLI, можно выполнить функцию через команду:
wp eval 'wpwebsite_delete_empty_terms();'Это безопасный и быстрый способ очистить базу без риска оставить непроверенные термины.
Удаление пустых терминов для конкретной таксономии
Если нужно очистить определённую таксономию, например, «product_cat» (категории WooCommerce), достаточно передать имя таксономии в функцию:
function wpwebsite_delete_empty_terms_for_taxonomy($taxonomy) {
$terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
]);
foreach ($terms as $term) {
if ($term->count === 0) {
wp_delete_term($term->term_id, $taxonomy);
}
}
}
// Пример вызова для таксономии product_cat
wpwebsite_delete_empty_terms_for_taxonomy('product_cat');Такой подход полезен, если вы хотите контролировать процесс для разных типов таксономий на сайте.
Автоматизация очистки пустых терминов с помощью плагина Clearfy Pro
Плагин Clearfy Pro предлагает модуль оптимизации базы данных, который способен автоматически находить и удалять пустые термины, а также удалять другие мусорные данные. Это отличное решение для тех, кто не хочет заниматься кодом и предпочитает удобный интерфейс с настройками безопасности.
Clearfy Pro позволяет настроить регулярное выполнение очистки, что особенно полезно для больших и активно развивающихся проектов.
Как избежать повторного появления пустых терминов
Пустые термины появляются, когда записи удаляются, но связанные с ними термины не удаляются автоматически. Чтобы минимизировать этот эффект:
- Используйте правильные методы удаления записей и таксономий.
- Регулярно проверяйте состояние таксономий с помощью кода или плагинов.
- При создании пользовательских типов записей и таксономий продумывайте логику удаления связанных терминов.
Можно добавить фильтр, который будет удалять термин при удалении записи, если после этого термин стал пустым. Вот пример:
function wpwebsite_delete_term_if_empty($post_id) {
$taxonomies = get_object_taxonomies(get_post_type($post_id));
foreach ($taxonomies as $taxonomy) {
$terms = wp_get_post_terms($post_id, $taxonomy);
foreach ($terms as $term) {
$count = $term->count - 1; // предположим, пост удаляется
if ($count <= 0) {
wp_delete_term($term->term_id, $taxonomy);
}
}
}
}
add_action('before_delete_post', 'wpwebsite_delete_term_if_empty');<Этот код автоматически удалит термин, если после удаления поста он станет пустым. Однако используйте такие функции с осторожностью и тестируйте на стенде.
Выводы и рекомендации
Удаление пустых taxonomy terms — важная часть технического обслуживания WordPress-сайта. Это повышает удобство работы с административной панелью, улучшает SEO и уменьшает нагрузку на базу данных.
Для очистки можно использовать:
- Ручной просмотр и удаление через админку.
- Кастомные скрипты с функциями
wpwebsite_delete_empty_terms(). - Плагины для оптимизации базы, например, Clearfy Pro.
Регулярная автоматизация таких процедур поможет держать сайт в чистоте и порядке.