Пустые категории и метки в WordPress — частая проблема, особенно на сайтах с большим количеством записей и длительной историей. Они не несут ценности для пользователей, ухудшают структуру сайта и могут негативно влиять на SEO. В этой статье разберём несколько эффективных способов, как удалить пустые категории и метки из вашей базы данных WordPress.
Почему важно удалять пустые категории и метки
Пустые категории и метки — это термины таксономий, которые не привязаны ни к одному посту. Они:
- создают лишний шум в админке и усложняют управление контентом;
- могут негативно влиять на индексацию сайта поисковыми системами;
- увеличивают размер базы данных, что замедляет работу сайта;
- создают неактуальные ссылки для посетителей.
Регулярное удаление таких терминов помогает поддерживать сайт в порядке и улучшает его производительность.
Как найти пустые категории и метки через админку WordPress
В WordPress по умолчанию не отображается сразу количество записей в категории или метке, но можно перейти в раздел Записи > Рубрики (для категорий) или Записи > Метки, где будет колонка «Кол-во», показывающая количество записей. Отфильтровать пустые напрямую нельзя, но можно отсортировать по количеству и вручную выделить пустые для удаления.
Этот способ подходит для небольших сайтов, но неудобен при большом количестве таксономий.
Удаление пустых категорий и меток через SQL-запросы
Для опытных пользователей и разработчиков удобнее сразу работать с базой данных. Вот пример SQL-запроса, который удалит все пустые категории (термины таксономии category), не привязанные к записям:
DELETE t, tt FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'category' AND tt.count = 0;Для меток (taxonomy = 'post_tag') запрос аналогичный:
DELETE t, tt FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'post_tag' AND tt.count = 0;<Важно: сделайте резервную копию базы данных перед выполнением запросов.
Этот метод быстро удалит пустые термины напрямую в базе, но требует доступа к phpMyAdmin или другому инструменту управления базой.
Удаление пустых категорий и меток с помощью WP CLI
WP CLI — мощный инструмент для управления WordPress из командной строки. Чтобы удалить пустые категории, можно использовать скрипт на PHP или команду:
wp term list category --format=ids --field=count --orderby=countНо удобнее написать скрипт на PHP, который проверит count и удалит пустые:
function wpexpert_delete_empty_terms($taxonomy) {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
foreach ($terms as $term) {
if ($term->count == 0) {
wp_delete_term($term->term_id, $taxonomy);
}
}
}
wpexpert_delete_empty_terms('category');
wpexpert_delete_empty_terms('post_tag');<Скрипт можно сохранить в файл и запустить через WP CLI командой wp eval-file filename.php.
Автоматизация удаления пустых категорий и меток при помощи плагина Clearfy Pro
Плагин Clearfy Pro содержит множество инструментов для очистки и оптимизации сайта. В числе функций есть возможность массово удалять пустые термины таксономий, что позволяет делать это без риска и вручную.
После установки плагина перейдите в раздел оптимизации, найдите инструмент по очистке таксономий и выберите категории и метки для удаления. Плагин сделает полный анализ и безопасно удалит пустые термины.
Как избежать появления пустых категорий и меток в будущем
Чтобы минимизировать появление пустых терминов:
- При удалении записей проверяйте, не остаются ли после этого пустые категории и метки, и удаляйте их.
- Используйте плагины или автоматические скрипты, которые периодически чистят базу.
- Планируйте структуру таксономий, не создавая лишних категорий и меток без необходимости.
- Для массового удаления записей используйте инструменты, которые одновременно будут корректировать таксономии.
Таким образом, вы поддержите базу данных в порядке и улучшите производительность сайта.
Пример функции для автоматического удаления пустых терминов при удалении постов
Можно использовать хук delete_post и функцию, которая проверяет таксономии поста и удаляет пустые термины:
add_action('delete_post', 'wpexpert_cleanup_empty_terms_after_post_delete');
function wpexpert_cleanup_empty_terms_after_post_delete($post_id) {
$taxonomies = array('category', 'post_tag');
foreach ($taxonomies as $taxonomy) {
$terms = wp_get_post_terms($post_id, $taxonomy);
foreach ($terms as $term) {
$term_data = get_term($term->term_id, $taxonomy);
if ($term_data->count <= 1) { // 1, потому что пост еще не удален
wp_delete_term($term->term_id, $taxonomy);
}
}
}
}Это позволит автоматически избавляться от пустых таксономий сразу после удаления поста, поддерживая базу в чистоте без дополнительного вмешательства.