В процессе активной работы с WordPress, особенно на больших сайтах, часто накапливаются пустые термины в таксономиях. Такие термины не связаны ни с какими записями, но продолжают занимать место в базе данных и могут влиять на производительность и удобство администрирования сайта.
Что такое пустые термины и почему их стоит удалять
Термины – это элементы таксономий, например, категории, метки, кастомные таксономии. Пустые термины — это те, которые не имеют ни одной связанной записи. Они могут появляться по разным причинам: удаление записей без очистки связанных терминов, ошибки при импорте данных, тестовые категории и т.д.
Наличие большого количества пустых терминов приводит к:
- Увеличению размера базы данных без пользы.
- Замедлению запросов к базе, особенно при генерации списков таксономий.
- Запутанности в админке, усложнению выбора терминов.
Регулярное удаление пустых терминов — важный этап оптимизации и поддержки здоровья сайта.
Как вручную найти и удалить пустые термины в WordPress
В админке WordPress стандартного функционала для удаления пустых терминов нет, но можно отфильтровать термины по количеству записей и удалить вручную:
- Перейдите в раздел Записи > Рубрики или нужную кастомную таксономию.
- Найдите термины с нулевым числом записей (столбец «Количество» равен 0).
- Отметьте их и выберите действие «Удалить» в массовых действиях.
Этот способ удобен для небольшого количества терминов, но при сотнях и тысячах он становится неэффективным.
Автоматическое удаление пустых терминов через код: пример функции clearfyRemoveEmptyTerms
Для автоматизации удаления можно использовать PHP-функцию, которая будет проходить по выбранным таксономиям и удалять термины с нулевым количеством записей.
function clearfyRemoveEmptyTerms($taxonomies = array('category', 'post_tag')) {
foreach ($taxonomies as $taxonomy) {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => true,
'fields' => 'ids',
));
$all_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
));
$empty_terms = array_diff($all_terms, $terms);
foreach ($empty_terms as $term_id) {
wp_delete_term($term_id, $taxonomy);
}
}
}Эта функция сначала получает все термины, а потом только те, которые используются. Разница — пустые термины, которые и удаляются.
Использовать функцию можно так:
clearfyRemoveEmptyTerms(['category', 'post_tag', 'my_custom_taxonomy']);Рекомендуется запускать её однократно или через WP-CLI, чтобы не нагружать сайт.
Объяснение параметров и безопасности
Функция принимает массив таксономий, что удобно для кастомных проектов. Перед удалением стоит убедиться в необходимости удаления, сделать резервную копию базы.
Удаление терминов происходит через стандартную функцию wp_delete_term, что безопасно и учитывает все связанные данные.
Использование плагина Clearfy Pro для очистки таксономий
Если вы используете плагин Clearfy Pro, он содержит инструменты оптимизации базы данных, включая очистку пустых терминов.
Преимущества использования Clearfy Pro:
- Удобный интерфейс без необходимости писать код.
- Автоматизация регулярной очистки.
- Дополнительные инструменты для оптимизации и безопасности сайта.
Для запуска очистки в Clearfy Pro зайдите в раздел оптимизации и выберите очистку таксономий. Плагин отобразит список пустых терминов и предложит удалить их.
Интеграция с WP-CLI для массовой очистки
Если вы предпочитаете работать через командную строку, можно расширить функцию для использования в WP-CLI:
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('clearfy remove-empty-terms', function($args) {
$taxonomies = $args ?: array('category', 'post_tag');
clearfyRemoveEmptyTerms($taxonomies);
WP_CLI::success('Пустые термины удалены');
});
}Такую команду можно запускать автоматически по расписанию на сервере.
Как избежать появления пустых терминов в будущем
Удаление — лишь часть решения. Чтобы минимизировать появление пустых терминов:
- При удалении записей следите за очисткой связанных терминов.
- Используйте плагины и темы с корректной работой с таксономиями.
- Регулярно проводите аудит базы данных, используя Clearfy Pro или WP-CLI скрипты.
Также можно внедрить автоматический скрипт, который будет запускаться раз в месяц и удалять пустые термины без вашего участия.
Пример крон-задачи для автоматического запуска очистки
add_action('clearfy_cron_delete_empty_terms', function() {
clearfyRemoveEmptyTerms(['category', 'post_tag', 'custom_tax']);
});
if (!wp_next_scheduled('clearfy_cron_delete_empty_terms')) {
wp_schedule_event(time(), 'monthly', 'clearfy_cron_delete_empty_terms');
}Этот код регистрирует ежемесячное событие, которое будет очищать базу от ненужных терминов.
Выводы и рекомендации по удалению пустых терминов в WordPress
Удаление пустых терминов — важный аспект поддержания чистоты и производительности сайта. Ручной метод подходит для небольших проектов, а для средних и крупных сайтов лучше использовать автоматизацию через код или плагины.
Используйте функцию clearfyRemoveEmptyTerms, комбинируйте с WP-CLI и планировщиком задач. Если хотите простой и безопасный вариант — обратите внимание на Clearfy Pro.