В WordPress часто накапливаются пустые термины — категории, метки или другие таксономии, которые не связаны ни с одним постом или пользовательским типом записи. Они не только создают беспорядок в админке, но и могут влиять на производительность сайта. В этой статье подробно рассмотрим, как автоматически находить и удалять пустые термины в WordPress с помощью кода и плагинов.
Что такое пустые термины и почему их стоит удалять
Пустые термины — это записи в базе данных WordPress, которые не имеют связанных с ними объектов. Например, категория, в которой нет ни одной публикации, или метка, которой не отмечен ни один пост.
Причины появления пустых терминов:
- Удаление записей без очистки терминов
- Импорт/экспорт данных с ошибками
- Автоматическое создание терминов плагинами или темами
Удаление таких терминов помогает поддерживать базу в порядке, облегчает навигацию по админке и может немного снизить нагрузку на запросы таксономий.
Как найти пустые термины в WordPress вручную
В админке WordPress не предусмотрена встроенная функция фильтрации терминов по количеству связанных с ними записей. Но вы можете увидеть количество записей в списке терминов. Те, у которых указано 0, и есть пустые.
Однако, если терминов много, вручную искать неудобно. Для автоматизации лучше использовать код.
Удаление пустых терминов через код: пример функции
Ниже представлен пример функции wpbloger_delete_empty_terms, которая находит и удаляет пустые термины из указанной таксономии. Вы можете вызвать её через хук или вручную.
function wpbloger_delete_empty_terms($taxonomy = 'category') {
if (!taxonomy_exists($taxonomy)) {
return 'Таксономия не найдена';
}
$empty_terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids',
]);
$deleted = 0;
foreach ($empty_terms as $term_id) {
$term = get_term($term_id, $taxonomy);
if ($term && $term->count === 0) {
wp_delete_term($term_id, $taxonomy);
$deleted++;
}
}
return "Удалено пустых терминов в таксономии {$taxonomy}: {$deleted}";
}
// Пример вызова функции
add_action('admin_init', function() {
if (current_user_can('manage_options') && isset($_GET['delete_empty_terms'])) {
echo wpbloger_delete_empty_terms('category');
}
});
Вы можете добавить этот код в файл functions.php вашей темы или создать отдельный плагин. После добавления, вызовите удаление, перейдя в админку по ссылке типа https://ваш-сайт/wp-admin/?delete_empty_terms=1.
Автоматизация удаления пустых терминов при сохранении записи
Можно настроить автоматическое удаление пустых терминов при публикации или обновлении записи, чтобы база данных не загрязнялась. Пример:
add_action('save_post', function($post_id) {
if (wp_is_post_revision($post_id)) {
return;
}
wpbloger_delete_empty_terms('post_tag');
});
В этом примере мы очищаем пустые метки при сохранении любой записи.
Плагины для управления и очистки терминов
Если вы предпочитаете использовать готовые решения, обратите внимание на плагины:
- Term Management Tools — позволяет сливать, удалять и управлять терминами, включая удаление пустых.
- WP Sweep — очищает базу данных, в том числе удаляет пустые термины.
- Clearfy Pro — комплексный плагин для оптимизации, включает функции по очистке базы и удалению ненужных терминов.
Использование плагинов удобно для тех, кто не хочет погружаться в код.
Советы по безопасности при удалении терминов
Удаление терминов напрямую влияет на структуру сайта и ссылки на категории или метки. Перед удалением:
- Создайте резервную копию базы данных
- Проверяйте, что термины действительно пустые
- Тестируйте функции на тестовом сайте
Так вы защитите сайт от потери данных и ошибок.
Расширение: удаление пустых терминов из всех таксономий
Чтобы очистить сразу все таксономии, используйте функцию ниже:
function wpbloger_delete_empty_terms_all_taxonomies() {
$taxonomies = get_taxonomies(['public' => true], 'names');
foreach ($taxonomies as $taxonomy) {
wpbloger_delete_empty_terms($taxonomy);
}
}
Эту функцию можно запускать по расписанию через WP-Cron или вручную.