wpwebsite.ru wordpress WPWebSite

Как удалить все вариации товара WooCommerce с помощью кода

Проблема: как массово удалить все вариации товара WooCommerce через код

В WooCommerce при импорте или создании товаров с вариациями иногда возникает задача быстро удалить все вариации конкретного товара без использования сторонних плагинов. Особенно актуально это при ошибках импорта, необходимости очистить товар для нового набора вариантов или при оптимизации базы данных. В стандартной админке WooCommerce удалять вариации поштучно неудобно, а массового функционала нет.

Диагностика проблемы

Чтобы понять, что вариации действительно привязаны к товару и их можно удалить, проверьте в базе данных или через WP-CLI. Вариации — это дочерние записи типа product_variation, у которых родитель — основной товар (post_type product).

Пример запроса для проверки вариаций товара по ID:

SELECT ID, post_title FROM wp_posts WHERE post_parent = YOUR_PRODUCT_ID AND post_type = 'product_variation';

Если запрос возвращает записи — вариации есть.

Пошаговое решение: удаление вариаций через пользовательский код

1. Создайте резервную копию сайта и базы данных

Перед удалением данных — обязательно сделайте бэкап. В случае ошибки можно будет восстановить.

2. Добавьте следующий код в файл functions.php активной темы или в отдельный плагин:

function wpwebsite_delete_all_product_variations( $product_id ) {
    if ( ! current_user_can( 'manage_woocommerce' ) ) {
        return 'Недостаточно прав';
    }
    $args = array(
        'post_type'      => 'product_variation',
        'post_parent'    => $product_id,
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'post_status'    => array('any'),
    );
    $variations = get_posts( $args );
    if ( empty( $variations ) ) {
        return 'Вариации не найдены';
    }
    foreach ( $variations as $variation_id ) {
        wp_delete_post( $variation_id, true );
    }
    return count( $variations ) . ' вариаций удалено';
}

3. Вызовите функцию для конкретного товара

Например, вызов из шаблона или административного скрипта:

echo wpwebsite_delete_all_product_variations( 123 ); // 123 — ID товара

Проверка результата после внедрения

  • Перейдите в админку WooCommerce → Товары → откройте нужный товар. Вкладка вариаций должна быть пустой.
  • Повторите SQL-запрос из раздела диагностики — он должен вернуть пустой результат.
  • Проверьте, что товар отображается без вариаций на фронтенде.

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

  • Ошибка: функция возвращает "Недостаточно прав" — вызов функции производится не от имени пользователя с правами администратора или менеджера WooCommerce. Проверьте права.
  • Вариации не удаляются, но функция говорит "0 вариаций удалено" — возможно, указан неверный ID товара или вариации уже удалены. Проверьте ID и статус вариаций.
  • Удаление не происходит из-за кеша — очистите кеш сайта и плагинов, чтобы изменения отобразились.

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

  • Не запускайте удаление вариаций на страницах с большим трафиком или в цикле — это может замедлить сайт.
  • Используйте wp_delete_post с вторым параметром true, чтобы принудительно удалить записи без помещения в корзину.
  • Обязательно проверяйте права пользователя перед выполнением удаления.
  • Если вариаций много, разбивайте удаление на партии, чтобы избежать таймаутов.

Сравнение способов удаления вариаций WooCommerce

СпособПреимуществаНедостатки
Через админку WooCommerceПростота, не требует кодаУдаление по одной вариации, долго при большом количестве
Через WP-CLI (wp post delete)Быстро, подходит для массовых операцийТребует доступа к серверу и знаний WP-CLI
Через пользовательский PHP-кодАвтоматизация, интеграция в бизнес-процессыТребует навыков программирования, риск ошибок
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙