wplang.ru wordpress WP Lang

WooCommerce: как удалить вариант товара через хук с примером кода

Что значит удалить вариант товара в WooCommerce и зачем это нужно

В WooCommerce вариант товара — это один из вариантов вариативного продукта, например, футболка разного размера или цвета. Иногда возникает задача программно удалить конкретный вариант товара (product variation) без захода в админку, чтобы автоматизировать управление каталогом.

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

Диагностика: как понять, что вариант нужно удалять программно

Перед удалением варианта нужно:

  • Убедиться, что вариант действительно есть и связан с родительским товаром.
  • Проверить, что вариант не используется в заказах или не имеет связанных данных, которые могут сломать сайт после удаления.
  • Понять, что удаление повлияет только на вариант, а не на основной продукт.

Как найти ID варианта

Вариант — это отдельный пост с типом product_variation. Чтобы получить ID варианта, можно посмотреть в админке WooCommerce или через код:

$variations = wc_get_products(array('parent' => $parent_product_id, 'type' => 'variation'));

Где $parent_product_id — ID родительского товара.

Пошаговое решение: удаление варианта через хук

Удаление варианта товара нужно делать аккуратно, используя стандартные функции WooCommerce и WordPress, чтобы не нарушить целостность базы данных. Вот пример решения, которое срабатывает при сохранении товара и удаляет вариант по ID:

add_action('save_post_product', 'delete_product_variation_on_save', 20, 3);
function delete_product_variation_on_save($post_ID, $post, $update) {
    // ID варианта, который нужно удалить
    $variation_id_to_delete = 1234; // Замените на реальный ID варианта

    // Проверяем, существует ли вариант
    $variation = get_post($variation_id_to_delete);
    if (!$variation || $variation->post_type !== 'product_variation') {
        return; // Вариант не найден
    }

    // Проверяем, что вариант принадлежит текущему товару
    if ($variation->post_parent != $post_ID) {
        return; // Вариант не относится к редактируемому товару
    }

    // Удаляем вариант без перемещения в корзину
    wp_delete_post($variation_id_to_delete, true);
}

Обратите внимание:

  • Хук save_post_product срабатывает при сохранении товара.
  • В функции проверяем принадлежность варианта.
  • Удаление происходит с флагом true — без возможности восстановления.

Удаление варианта по определённым условиям

Если нужно удалить вариант по атрибутам (например, цвет или размер), можно получить список вариантов и пройтись циклом:

add_action('save_post_product', 'delete_variation_by_attribute', 20, 3);
function delete_variation_by_attribute($post_ID, $post, $update) {
    $variations = wc_get_products(array(
        'parent' => $post_ID,
        'type' => 'variation',
        'limit' => -1
    ));

    foreach ($variations as $variation) {
        $color = $variation->get_attribute('pa_color'); // пример атрибута
        if ($color === 'red') { // условие удаления
            wp_delete_post($variation->get_id(), true);
        }
    }
}

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

  • Перейдите в админку WooCommerce > Товары > вариативный товар.
  • Проверьте, что нужный вариант отсутствует в списке вариантов.
  • Попробуйте добавить товар с удалённым вариантом в корзину — вариант должен быть недоступен.
  • Проверьте логи ошибок PHP на предмет исключений.

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

  • Вариант не удаляется: проверьте правильность ID варианта и принадлежность к товару.
  • Удаляется не тот вариант: убедитесь, что условие для выбора варианта точное (название атрибута, значение).
  • Ошибка при удалении из-за зависимостей: проверьте, не связан ли вариант с заказами, отзывами или кэшами.
  • Вариант появляется после обновления: возможно, другой плагин или код восстанавливает вариант — отключите тестово остальные плагины.

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

  • Перед удалением делайте резервную копию базы данных.
  • Удаляйте варианты по событию, которое точно соответствует бизнес-логике (например, при обновлении товара).
  • Кэшируйте результаты получения вариантов, если нужно выполнять операции часто.
  • Ограничьте доступ к коду удаления варианта, чтобы случайно не удалить нужные данные.

Сравнение способов удаления вариантов

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

Скидки на топовые темы и плагины

Активировать суперсилу ⋙