В процессе работы с WordPress накапливается множество терминов в таксономиях (например, категории, теги), которые не связаны ни с одной записью — они считаются пустыми. Наличие таких терминов негативно влияет на скорость работы сайта, усложняет навигацию и может снизить качество SEO. В этой статье разберёмся, как автоматически находить и удалять пустые термины таксономий с помощью кода и плагинов, а также как избежать их появления в будущем.
Почему важно удалять пустые термины таксономий в WordPress
Пустые термины — это термины, у которых не привязано ни одной записи. Такие термины часто остаются после удаления контента или при массовом изменении таксономий. Вот основные проблемы, которые они создают:
- Увеличивают размер базы данных, замедляя запросы.
- Создают «мёртвые» ссылки и страницы архивов без контента.
- Портят структуру сайта и навигацию.
- Могут негативно сказываться на SEO, так как поисковые системы видят пустые страницы.
Удаление таких терминов — отличный способ поддерживать чистоту и оптимальную производительность сайта.
Автоматическое удаление пустых терминов с помощью WP-Cron и кода
Создание функции для очистки пустых терминов
Для начала напишем функцию, которая будет проверять все таксономии и удалять термины без записей. В WordPress для удаления термина используется функция wp_delete_term(). Для получения терминов с условием количества записей можно использовать get_terms() с параметром hide_empty.
function wpbe_delete_empty_terms() {
// Получаем все таксономии, кроме системных, если нужно
$taxonomies = get_taxonomies(['public' => true], 'names');
foreach ($taxonomies as $taxonomy) {
$empty_terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => true,
'fields' => 'ids',
'count' => 0,
'pad_counts' => false
]);
// На самом деле get_terms с hide_empty = true возвращает только непустые,
// поэтому используем hide_empty = false и фильтруем вручную
$all_terms = get_terms([
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'ids'
]);
foreach ($all_terms as $term_id) {
$term = get_term($term_id, $taxonomy);
if ($term->count == 0) {
wp_delete_term($term_id, $taxonomy);
}
}
}
}Обратите внимание, что мы перебираем все публичные таксономии и удаляем термины с count == 0. Это гарантирует, что будут удалены именно пустые термины.
Добавление WP-Cron для регулярного запуска очистки
Чтобы регулярно поддерживать базу данных в порядке, добавим задание в WP-Cron, которое будет запускать нашу функцию, например, раз в неделю.
add_action('wpbe_weekly_cleanup', 'wpbe_delete_empty_terms');
function wpbe_activate_cron() {
if (!wp_next_scheduled('wpbe_weekly_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpbe_weekly_cleanup');
}
}
add_action('wp', 'wpbe_activate_cron');
// Для очистки при деактивации
function wpbe_deactivate_cron() {
$timestamp = wp_next_scheduled('wpbe_weekly_cleanup');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpbe_weekly_cleanup');
}
}
register_deactivation_hook(__FILE__, 'wpbe_deactivate_cron');После добавления этого кода функция wpbe_delete_empty_terms будет запускаться автоматически каждую неделю, очищая таксономии от пустых терминов.
Использование плагинов для удаления пустых терминов
Если вы предпочитаете готовые решения, существуют плагины, которые помогут удалить пустые термины без программирования. Например:
- Term Management Tools — позволяет массово удалять и объединять термины.
- WP Sweep — оптимизирует базу данных, в том числе удаляет пустые термины и другие мусорные данные.
Установка таких плагинов происходит через админку WordPress. После активации вы сможете запускать очистку вручную или по расписанию.
Пример ссылки на плагин с utm-метками: WP Sweep на WPSHOP.RU
Как предотвратить появление пустых терминов в будущем
Проверка перед созданием и удалением терминов
Часто пустые термины появляются из-за ошибок в логике плагинов или тем, которые создают термины, но не присваивают их записям. Важно контролировать процесс создания терминов. Если вы пишете собственный код для работы с таксономиями, используйте проверку наличия записей перед созданием или удалением терминов.
Ограничение возможности создания терминов в интерфейсе
Можно запретить пользователям создавать новые термины без привязки к записям, например, с помощью плагинов для управления ролями и правами. Также можно отключить автоматическое создание терминов при загрузке меток или категорий пользователями.
Регулярное обслуживание и очистка
Наконец, рекомендуется периодически выполнять очистку базы данных с помощью WP-Cron или вручную, чтобы поддерживать порядок. Это поможет избежать накопления мусора и снизит нагрузку на сервер.
Заключение по теме удаления пустых терминов таксономий
Удаление пустых терминов таксономий — важный этап оптимизации любого WordPress-сайта. С помощью представленных методов вы сможете автоматизировать этот процесс, улучшить производительность и качество навигации. Используйте готовые плагины или собственный код с WP-Cron, чтобы сделать сайт чище и быстрее.