wpupgrade.ru wordpress WP Upgrade

Как изменить статью товара в WooCommerce после покупки

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

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

Основные вопросы перед решением:

  • Какой именно параметр товара нужно менять — артикул, мета-поле, таксономия?
  • На каком этапе — сразу после оплаты, при смене статуса заказа или позже?
  • Как избежать сбоев в заказах и не нарушить логику WooCommerce?

Подключение к событию смены статуса заказа

Для изменения данных товара после покупки оптимально использовать хук woocommerce_order_status_completed или woocommerce_order_status_processing, так как именно после смены статуса можно быть уверенным, что покупка завершена.

Пример привязки функции:

add_action('woocommerce_order_status_completed', 'wpup_change_product_sku_after_purchase');

Пошаговое решение: изменение артикула товара после покупки

1. Получаем данные заказа и список купленных товаров

function wpup_change_product_sku_after_purchase( $order_id ) {
    if ( ! $order_id ) {
        return;
    }
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return;
    }

2. Перебираем товары и меняем артикул

    foreach ( $order->get_items() as $item_id => $item ) {
        $product = $item->get_product();
        if ( ! $product ) {
            continue;
        }
        // Получаем текущий артикул
        $current_sku = $product->get_sku();
        // Формируем новый артикул (например, добавляем префикс "sold-")
        $new_sku = 'sold-' . $current_sku;
        // Меняем артикул
        $product->set_sku( $new_sku );
        $product->save();
    }
}

В этом примере к текущему артикулу добавляется префикс sold-. Логика замены может быть любой — например, генерация уникального кода или удаление артикула для блокировки.

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

  1. Оформите тестовый заказ в WooCommerce.
  2. После смены статуса заказа на «Завершен» откройте карточку купленного товара в админке.
  3. Проверьте, что артикул изменился согласно логике функции.
  4. Убедитесь, что новый артикул не конфликтует с существующими (артикулы должны быть уникальными).

Частые ошибки и способы их исправления

  • Ошибка: Новый артикул дублируется с существующим.
    Решение: Перед присвоением нового артикула используйте функцию wc_get_product_id_by_sku($new_sku) для проверки уникальности.
  • Ошибка: Артикул не меняется после заказа.
    Решение: Проверьте, что хук привязан корректно и функция запускается. Можно добавить error_log для отладки.
  • Ошибка: Конфликт с плагинами инвентаризации или синхронизации.
    Решение: Проверьте совместимость, возможно, нужно менять артикул на более позднем этапе или через очередь задач.

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

  • Не меняйте артикул, если он связан с внешними системами (например, 1С), без согласования.
  • Используйте транзакции или блокировки, если меняете артикулы у большого количества товаров, чтобы избежать гонок записей.
  • Кэшируйте данные, если планируете массовые операции после покупки.
  • Храните оригинальный артикул в мета-поле, чтобы можно было откатить изменения при необходимости.

Сравнение способов изменения артикула после покупки

МетодГде реализуетсяПлюсыМинусы
Через хук статуса заказаfunctions.php или плагинПростота, автоматизацияТребует проверки уникальности, совместимости
Отдельный скрипт с WP-CLIЧерез консольПодходит для массовых измененийНе автоматично, требует ручного запуска
Использование сторонних плагиновГотовые решенияМожет иметь UI, настройкиМожет быть избыточным или платным
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее