В процессе работы с WordPress на сайтах часто накапливаются пустые термины в таксономиях, которые не связаны ни с одним материалом. Эти термины не несут пользы и могут замедлять работу сайта, а также создавать путаницу в админке. Сегодня разберём, как автоматически удалять пустые термины, используя собственные функции на PHP, а также рассмотрим полезные плагины для решения этой задачи.
Почему важно удалять пустые термины в WordPress
Со временем, особенно если сайт активно редактируется, категории, метки и другие термины таксономий могут остаться без привязанных записей. Это происходит, например, при удалении постов, перемещении материалов или неправильном импорте данных.
Пустые термины:
- Не отображаются на сайте, но занимают место в базе данных.
- Затрудняют навигацию и управление таксономиями в админке.
- Могут влиять на SEO, создавая лишние URL с пустыми архивами.
Удаление таких терминов помогает поддерживать базу в чистоте и повышает производительность.
Автоматическое удаление пустых терминов с помощью кода
Для удаления пустых терминов в определённой таксономии можно написать функцию, которая перебирает все термины и удаляет те, у которых count равен нулю. Ниже пример функции, которая удаляет пустые термины из таксономии category. Функцию можно адаптировать под любые таксономии.
function wp5_remove_empty_terms( $taxonomy = 'category' ) {
$terms = get_terms( array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
) );
if ( is_wp_error( $terms ) ) {
return;
}
foreach ( $terms as $term ) {
if ( $term->count == 0 ) {
wp_delete_term( $term->term_id, $taxonomy );
}
}
}
// Вызов функции для удаления пустых категорий
wp5_remove_empty_terms( 'category' );Эта функция получает все термины таксономии, включая пустые (hide_empty => false), и удаляет те, что не связаны ни с одним постом (count == 0).
Для удаления пустых меток используйте wp5_remove_empty_terms('post_tag'); или замените на название своей таксономии.
Автоматизация через WP Cron
Чтобы не запускать функцию вручную, её удобно повесить на регулярное событие WP Cron. Например, запускать раз в неделю.
function wp5_schedule_empty_terms_cleanup() {
if ( ! wp_next_scheduled( 'wp5_empty_terms_cleanup_hook' ) ) {
wp_schedule_event( time(), 'weekly', 'wp5_empty_terms_cleanup_hook' );
}
}
add_action( 'wp', 'wp5_schedule_empty_terms_cleanup' );
add_action( 'wp5_empty_terms_cleanup_hook', function() {
wp5_remove_empty_terms( 'category' );
wp5_remove_empty_terms( 'post_tag' );
});Такой подход поможет держать таксономии в порядке без вашего вмешательства.
Использование плагинов для очистки таксономий
Если вы не хотите писать код, можно воспользоваться плагинами, которые помогут удалить пустые термины.
1. Term Management Tools
Плагин позволяет массово удалять термины, в том числе пустые. Удобен, если нужно разово почистить таксономии.
2. WP Sweep
WP Sweep помогает очищать базу данных от мусора, включая пустые термины таксономий. Просто выберите нужные опции и выполните очистку.
3. Clearfy Pro
Если вы используете Clearfy Pro, эта оптимизационная надстройка также содержит инструменты для управления таксономиями и удаления неиспользуемых терминов, что особенно полезно на больших и сложных сайтах.
Советы по работе с терминами для разработчиков
При разработке тем и плагинов важно контролировать создание и удаление терминов, чтобы не засорять базу.
- Используйте функции WordPress для безопасного создания терминов
wp_insert_term()с проверкой существования. - Удаляйте термины при удалении связанных записей, если они больше не нужны.
- Регулярно проводите аудит таксономий и чистите пустые термины с помощью кода или плагинов.
Также стоит помнить, что массовое удаление терминов лучше выполнять в моменты минимальной нагрузки на сайт, чтобы избежать проблем с производительностью.
Пример расширенной функции с логированием и выбором таксономий
Для более продвинутого использования можно создать функцию с параметрами и логированием удалённых терминов.
function wp5_remove_empty_terms_with_log( $taxonomies = array( 'category', 'post_tag' ) ) {
foreach ( $taxonomies as $taxonomy ) {
$terms = get_terms( array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
) );
if ( is_wp_error( $terms ) ) {
error_log("[wp5] Ошибка получения терминов таксономии: " . $taxonomy);
continue;
}
foreach ( $terms as $term ) {
if ( $term->count == 0 ) {
$deleted = wp_delete_term( $term->term_id, $taxonomy );
if ( ! is_wp_error( $deleted ) ) {
error_log("[wp5] Удалён пустой термин " . $term->name . " в таксономии " . $taxonomy);
}
}
}
}
}
// Вызов функции
wp5_remove_empty_terms_with_log();Такой подход удобен для отладки и контроля.
Выводы и рекомендации
Удаление пустых терминов — важный этап поддержки WordPress-сайта, особенно при большом объёме контента и частых изменениях. Применяйте программные методы для автоматизации, используйте WP Cron для периодического запуска и при необходимости подключайте проверенные плагины.
Если хотите интегрировать эффективные инструменты оптимизации, обратите внимание на Clearfy Pro, который поможет не только с таксономиями, но и с другими аспектами оптимизации WordPress.