wpcodes.ru wordpress WP Codеs

Как удалить пустые термины таксономий в WordPress

В работе с WordPress часто возникает ситуация, когда в базе данных остаются пустые термины таксономий — категории, метки или кастомные таксономии, которые не привязаны ни к одному посту или другому объекту. Это приводит к захламлению базы данных и может негативно сказаться на производительности сайта и удобстве управления контентом. В этой статье мы разберёмся, как эффективно находить и удалять такие пустые термины как вручную, так и автоматически, используя PHP-код и плагины.

Что такое пустые термины таксономий и почему их нужно удалять

Пустые термины — это объекты таксономий, у которых нет связанных записей. Например, категория, в которую не отнесён ни один пост. Такие термины не отображаются на сайте, но хранятся в базе, увеличивая её размер и усложняя работу с админкой.

Причины появления пустых терминов:

  • Удаление постов без очистки связанных терминов;
  • Импорт и экспорт контента с ошибками;
  • Ошибки плагинов и тем, которые создавали таксономии;
  • Тестирование и экспериментальный контент.

Удаление пустых терминов помогает:

  • Сократить размер базы данных;
  • Упростить навигацию по таксономиям в админке;
  • Избежать ошибок и конфликтов, связанных с устаревшими связями;
  • Повысить скорость загрузки страниц с таксономиями.

Как найти пустые термины таксономий с помощью SQL-запроса

Если у вас есть доступ к базе данных через phpMyAdmin или другой инструмент, можно быстро найти пустые термины таксономий с помощью следующего запроса:

SELECT t.term_id, t.name, tt.taxonomy
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
WHERE tt.count = 0;

Таблица wp_term_taxonomy содержит поле count, которое отражает количество объектов (постов, страниц и т.д.), связанных с термином. Если count равен нулю, значит термин пустой.

Этот запрос выведет список всех пустых терминов по всем таксономиям. Можно уточнить поиск, добавив фильтр по конкретной таксономии, например, для категорий:

AND tt.taxonomy = 'category'

Удаление пустых терминов через PHP: пример функции для wpCodes

Для автоматизации процесса удаления пустых терминов можно использовать кастомную функцию, которую удобно запускать через админский хук или WP-CLI. Ниже пример функции, которая удаляет пустые термины для указанной таксономии:

function wpcodes_delete_empty_terms( $taxonomy = 'category' ) {
    // Получаем все термины таксономии с count = 0
    $empty_terms = get_terms( array(
        'taxonomy' => $taxonomy,
        'hide_empty' => true, // true для исключения непустых
        'fields' => 'ids',
        'count' => 0
    ) );

    // Альтернативно: get_terms с 'hide_empty' => false и фильтрация вручную

    if ( empty( $empty_terms ) || is_wp_error( $empty_terms ) ) {
        return 'Пустых терминов не найдено.';
    }

    foreach ( $empty_terms as $term_id ) {
        wp_delete_term( $term_id, $taxonomy );
    }

    return count( $empty_terms ) . ' пустых терминов удалено из таксономии "' . $taxonomy . '".';
}

// Пример вызова функции
// echo wpcodes_delete_empty_terms( 'category' );

Обратите внимание, что параметр hide_empty по умолчанию исключает пустые термины, поэтому для их получения лучше использовать hide_empty => false и затем фильтровать по count в коде. Вот улучшенный вариант:

function wpcodes_delete_empty_terms( $taxonomy = 'category' ) {
    $terms = get_terms( array(
        'taxonomy' => $taxonomy,
        'hide_empty' => false
    ) );

    if ( empty( $terms ) || is_wp_error( $terms ) ) {
        return 'Термины не найдены или ошибка.';
    }

    $deleted_count = 0;
    foreach ( $terms as $term ) {
        if ( intval( $term->count ) === 0 ) {
            wp_delete_term( $term->term_id, $taxonomy );
            $deleted_count++;
        }
    }

    return $deleted_count . ' пустых терминов удалено из таксономии "' . $taxonomy . '".';
}

Автоматизация удаления пустых терминов с помощью Cron и WP-Cron

Чтобы не запускать функцию вручную, можно настроить автоматическое удаление пустых терминов по расписанию. Для этого используем WP-Cron. Пример добавления задачи:

// Регистрируем событие при активации плагина или темы
if ( ! wp_next_scheduled( 'wpcodes_delete_empty_terms_cron' ) ) {
    wp_schedule_event( time(), 'daily', 'wpcodes_delete_empty_terms_cron' );
}

// Обработчик события
add_action( 'wpcodes_delete_empty_terms_cron', function() {
    wpcodes_delete_empty_terms( 'category' );
    wpcodes_delete_empty_terms( 'post_tag' );
} );

// Не забудьте очистить событие при деактивации
register_deactivation_hook( __FILE__, function() {
    wp_clear_scheduled_hook( 'wpcodes_delete_empty_terms_cron' );
} );

Такой подход позволяет регулярно очищать базу от пустых терминов без вмешательства администратора.

Плагины для управления и очистки таксономий

Если хотите использовать готовые решения, обратите внимание на следующие плагины:

  • Term Management Tools — позволяет сливать, удалять и управлять терминами в WordPress. Удобен для ручной очистки.
  • WP Sweep — инструмент для оптимизации базы данных, включая удаление неиспользуемых терминов и метаданных.
  • Clearfy Pro — комплексный плагин оптимизации с возможностью очистки мусора, включая пустые термины таксономий. Подробнее на wpshop.ru.

Использование плагинов подходит для пользователей, не желающих писать код, однако для точечного управления и автоматизации лучше создавать собственные решения.

Пример интеграции с плагином Clearfy Pro для автоматической очистки

Если на вашем сайте установлен Clearfy Pro, можно воспользоваться встроенными инструментами для удаления пустых терминов:

  • Перейдите в настройки Clearfy Pro;
  • Выберите раздел «Оптимизация базы данных»;
  • Активируйте опцию удаления пустых терминов;
  • Настройте расписание автоматической очистки.

Это позволит эффективно поддерживать базу данных в чистоте без дополнительных усилий.

Рекомендации по безопасности и резервному копированию

Перед удалением терминов, особенно автоматизированным, настоятельно рекомендуется сделать резервную копию базы данных. Удаление терминов — необратимая операция, и ошибки могут привести к потере важных связей и данных.

Используйте плагины для бэкапов, например, WPBackup, или настраивайте автоматическое резервное копирование на сервере.

Также стоит тщательно тестировать кастомные функции на тестовом сайте перед применением на боевом ресурсе.

Итоги и лучшие практики

Удаление пустых терминов таксономий — важная задача для поддержания чистоты и эффективности сайта на WordPress. Используйте SQL-запросы для быстрого анализа, пишите кастомные функции для автоматизации и применяйте проверенные плагины для удобства.

Помните о безопасности — всегда делайте резервные копии. Настройте регулярное удаление пустых терминов через WP-Cron, чтобы база данных не захламлялась со временем.

Такой подход улучшит работу сайта и упростит управление контентом как для разработчиков, так и для контент-менеджеров.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее