Пустые термины (категории, метки или другие таксономии без прикрепленных записей) часто остаются в базе данных WordPress после удаления или изменения контента. Они не только создают беспорядок, но и могут ухудшать SEO и влиять на производительность сайта, особенно при большом количестве таксономий. В этой статье мы подробно разберём, как найти и удалить такие пустые термины программно, а также с помощью плагинов, чтобы поддерживать ваш WordPress-сайт в чистоте.
Что такое пустые термины и почему их стоит удалять
Термины — это элементы таксономий (например, категории и метки). Пустой термин — это термин, у которого нет ни одной прикрепленной записи. Обычно они появляются после удаления или переноса записей, либо при массовом импорте/экспорте данных.
Причины удалить пустые термины:
- Улучшение производительности запросов к базе данных, особенно при большом количестве терминов.
- Избежание дублирования и путаницы в админке и на фронтенде.
- Улучшение SEO: поисковые системы не индексируют пустые страницы архивов таксономий, что снижает качество сайта.
Удаление вручную неудобно, если терминов много. Поэтому рассмотрим автоматизированные методы.
Как найти пустые термины с помощью WP_Query и get_terms
Для поиска пустых терминов можно использовать функцию get_terms() с параметром 'hide_empty' => true или false. Но чтобы получить именно пустые термины, нужно поставить 'hide_empty' => false и отфильтровать их по полю count.
function wpqa_get_empty_terms($taxonomy = 'category') {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
$empty_terms = array();
foreach ($terms as $term) {
if (0 === intval($term->count)) {
$empty_terms[] = $term;
}
}
return $empty_terms;
}
Данная функция возвращает массив пустых терминов по указанной таксономии.
Удаление пустых терминов программно
После того, как мы получили список пустых терминов, можно удалить их через функцию wp_delete_term(). Вот пример функции, которая удаляет все пустые термины выбранной таксономии.
function wpqa_delete_empty_terms($taxonomy = 'category') {
$empty_terms = wpqa_get_empty_terms($taxonomy);
$deleted = 0;
foreach ($empty_terms as $term) {
$result = wp_delete_term($term->term_id, $taxonomy);
if (!is_wp_error($result) && $result) {
$deleted++;
}
}
return $deleted;
}
Применение:
// Удаляем пустые категории
$deleted_count = wpqa_delete_empty_terms('category');
echo 'Удалено пустых категорий: ' . $deleted_count;
С помощью этой функции можно удалять пустые метки (tag) и свои пользовательские таксономии, просто изменив параметр $taxonomy.
Автоматизация очистки пустых терминов при обновлении контента
Для удобства можно добавить автоматическое удаление пустых терминов при сохранении записи или по расписанию через WP-Cron.
Удаление при сохранении записи
Добавьте следующий код в файл functions.php вашей темы или в свой плагин:
add_action('save_post', 'wpqa_delete_empty_terms_on_save', 20, 1);
function wpqa_delete_empty_terms_on_save($post_id) {
// Проверяем тип записи, если нужно
if (get_post_type($post_id) !== 'post') {
return;
}
// Удаляем пустые категории и метки
wpqa_delete_empty_terms('category');
wpqa_delete_empty_terms('post_tag');
}
Этот код удалит пустые категории и метки после каждого сохранения записи, поддерживая базу в актуальном состоянии.
Удаление по расписанию (WP-Cron)
Можно настроить ежедневную задачу по очистке пустых терминов:
if (!wp_next_scheduled('wpqa_daily_delete_empty_terms')) {
wp_schedule_event(time(), 'daily', 'wpqa_daily_delete_empty_terms');
}
add_action('wpqa_daily_delete_empty_terms', 'wpqa_delete_empty_terms_cron');
function wpqa_delete_empty_terms_cron() {
wpqa_delete_empty_terms('category');
wpqa_delete_empty_terms('post_tag');
}
Так вы будете регулярно поддерживать чистоту таксономий без ручного вмешательства.
Использование плагинов для удаления пустых терминов
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Clearfy Pro — имеет инструменты для оптимизации базы данных и очистки таксономий, включая удаление пустых терминов.
- Term Management Tools — плагин для управления и объединения терминов, также помогает выявлять пустые термины.
Использование плагинов удобно, если вы не хотите возиться с кодом, но программный метод даёт больше гибкости и контроля.
Рекомендации по безопасности и бэкапу
Перед массовым удалением терминов всегда делайте резервную копию базы данных. Ошибки в коде или неправильное удаление могут привести к потере данных или нарушению связей.
Для создания резервной копии можно использовать плагин Backup Master или аналогичные решения.
Подводя итоги: почему стоит регулярно удалять пустые термины
Пустые термины в WordPress — частая, но решаемая проблема. Своевременная очистка помогает поддерживать порядок в базе данных, улучшать производительность и SEO сайта. В статье мы рассмотрели, как программно находить и удалять пустые термины, а также как автоматизировать этот процесс и какие плагины могут помочь.
Применяйте описанные методы, и ваш сайт будет работать быстрее и стабильнее.