wpcodes.ru wordpress WP Codеs

WooCommerce: как автоматически удалять неактивные вариации товаров

Проблема: Накопление неактивных вариаций товаров в WooCommerce

На крупных магазинах WooCommerce с вариативными товарами часто возникают ситуации, когда множество вариаций становятся неактивными (например, сняты с производства, неактуальны по параметрам), но остаются в базе. Это увеличивает размер базы, замедляет загрузку страниц и усложняет администрирование.

Как диагностировать наличие неактивных вариаций

  • Перейдите в админку WooCommerce → Товары → выберите вариативный товар.
  • Посмотрите список вариаций – неактивные отмечены как отключённые (статус «нет в наличии» или «черновик»).
  • Выполните SQL-запрос для подсчёта неактивных вариаций:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation' AND post_status != 'publish';

Если число большое, стоит рассмотреть автоматизацию их удаления.

Пошаговое решение: автоматическое удаление неактивных вариаций с помощью кода

1. Создание WP-CLI команды для удаления

WP-CLI позволяет удобно выполнять задачи через командную строку. Ниже пример команды для удаления вариаций с статусом draft или private (неактивные):

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    WP_CLI::add_command( 'wc-remove-inactive-variations', function() {
        global $wpdb;

        $statuses = ['draft', 'private'];
        $placeholders = implode( ',', array_fill( 0, count( $statuses ), '%s' ) );

        $query = $wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_status IN ($placeholders)",
            ...$statuses
        );

        $ids = $wpdb->get_col( $query );
        $count = 0;

        foreach ( $ids as $id ) {
            wp_delete_post( $id, true );
            $count++;
        }

        WP_CLI::success( "Удалено {$count} неактивных вариаций товаров" );
    } );
}

2. Добавление периодической задачи для автоматизации

Чтобы регулярно чистить базу, добавим cron-задачу, которая будет выполнять очистку раз в неделю:

function schedule_remove_inactive_variations() {
    if ( ! wp_next_scheduled( 'remove_inactive_variations_hook' ) ) {
        wp_schedule_event( time(), 'weekly', 'remove_inactive_variations_hook' );
    }
}
add_action( 'wp', 'schedule_remove_inactive_variations' );

add_action( 'remove_inactive_variations_hook', function() {
    $args = [
        'post_type'   => 'product_variation',
        'post_status' => ['draft', 'private'],
        'numberposts' => -1,
        'fields'      => 'ids',
    ];
    $variations = get_posts( $args );

    foreach ( $variations as $variation_id ) {
        wp_delete_post( $variation_id, true );
    }
});

Проверка результата

  • Запустите команду WP-CLI: wp wc-remove-inactive-variations. В консоли должно отобразиться количество удалённых вариаций.
  • В админке WooCommerce проверьте, что неактивные вариации исчезли из товаров.
  • Запустите SQL-запрос из раздела диагностики повторно – количество неактивных вариаций должно уменьшиться.

Частые ошибки и как их исправить

  • Ошибка: WP-CLI команда не регистрируется.
    Причина: Код добавлен в файл, который загружается до инициализации WP-CLI.
    Решение: Поместите код в functions.php или в отдельный плагин с проверкой defined('WP_CLI') && WP_CLI.
  • Ошибка: Вариации не удаляются.
    Причина: Неправильный статус вариаций или вариации защищены другими плагинами.
    Решение: Проверьте статусы в базе, убедитесь что запрос ищет правильные статусы. Отключите временно плагины, которые могут блокировать удаление.
  • Ошибка: Cron-задача не запускается.
    Причина: Сайт не получает посещений, WP-Cron не срабатывает.
    Решение: Настройте системный cron для запуска wp-cron.php или используйте плагин для контроля cron.

Практические советы по безопасности и производительности

  • Удаляйте вариации только с проверенными статусами, чтобы не потерять активные данные.
  • Перед массовым удалением сделайте резервную копию базы данных.
  • Для больших сайтов запускайте WP-CLI команду в off-peak время, чтобы снизить нагрузку.
  • При добавлении cron-задачи убедитесь, что она не запускается чаще, чем нужно (например, раз в неделю, а не каждый час).

Сравнение методов удаления неактивных вариаций

МетодПреимуществаНедостатки
Ручное удаление через админкуПросто, не требует кодаТрудозатратно при большом количестве вариаций
WP-CLI командаАвтоматизация, быстрое выполнение, подходит для больших сайтовТребует доступа к серверу и знаний WP-CLI
Cron-задача с кодомПолная автоматизация без участия админаЗависит от корректной работы WP-Cron, возможны ошибки при неправильной настройке
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее