WooCommerce: решение проблемы с нерабочим автоприсвоением штрихкода (SKU) к товару

Диагностика проблемы: почему автоприсвоение SKU не работает в WooCommerce

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

Основные признаки проблемы:

  • SKU остается пустым после создания или обновления товара;
  • SKU дублируется у разных товаров, что противоречит требованиям WooCommerce;
  • Автоматически сгенерированный SKU не сохраняется или перезаписывается при обновлении товара.

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

1. Добавление кода для генерации уникального SKU при сохранении товара

Используем хук save_post_product, чтобы присвоить SKU, если он пустой. Важно проверить уникальность SKU, чтобы избежать конфликтов.

function wpco_generate_unique_sku( $post_id ) {
    // Проверяем, что это продукт
    if ( get_post_type( $post_id ) !== 'product' ) {
        return;
    }

    $product = wc_get_product( $post_id );

    // Если SKU уже есть, ничего не делаем
    if ( $product->get_sku() ) {
        return;
    }

    // Генерируем уникальный SKU, например, с префиксом и ID
    $new_sku = 'SKU-' . $post_id;

    // Проверяем, что SKU уникален
    $existing_id = wc_get_product_id_by_sku( $new_sku );
    if ( $existing_id && $existing_id != $post_id ) {
        // Добавляем случайное число для уникальности
        $new_sku .= '-' . wp_rand( 1000, 9999 );
    }

    // Сохраняем SKU
    $product->set_sku( $new_sku );
    $product->save();
}
add_action( 'save_post_product', 'wpco_generate_unique_sku' );

2. Обработка вариативных товаров

Для вариативных товаров SKU нужно присваивать и вариациям. Аналогично, проверяем и назначаем SKU, если он пустой.

function wpco_generate_sku_for_variations( $post_id ) {
    $product = wc_get_product( $post_id );
    if ( ! $product || $product->get_type() !== 'variable' ) {
        return;
    }

    $variations = $product->get_children();
    foreach ( $variations as $variation_id ) {
        $variation = wc_get_product( $variation_id );
        if ( ! $variation->get_sku() ) {
            $sku = 'VAR-' . $variation_id;
            $existing_id = wc_get_product_id_by_sku( $sku );
            if ( $existing_id && $existing_id != $variation_id ) {
                $sku .= '-' . wp_rand( 1000, 9999 );
            }
            $variation->set_sku( $sku );
            $variation->save();
        }
    }
}
add_action( 'save_post_product', 'wpco_generate_sku_for_variations', 20 );

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

  • Создайте новый простой товар в WooCommerce без указания SKU — после сохранения поле SKU должно заполниться автоматически в формате SKU-ID.
  • Создайте вариативный товар без SKU у вариаций — после сохранения у каждой вариации должен появиться уникальный SKU с префиксом VAR-.
  • Проверьте, что повторных SKU нет — для этого можно попробовать создать несколько товаров подряд и убедиться, что всем присвоены уникальные значения.
  • Убедитесь, что при редактировании товара и наличии SKU он не перезаписывается.

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

  • SKU не сохраняется после сохранения товара: Возможно, вызов $product->save() происходит внутри хука save_post — чтобы избежать бесконечной рекурсии, используйте проверку и минимальную приоритетность, либо перемещайте логику в woocommerce_process_product_meta.
  • Дублирование SKU: Не забывайте проверять уникальность SKU через wc_get_product_id_by_sku() и при необходимости добавлять уникальный суффикс.
  • Не присваиваются SKU вариациям: Убедитесь, что код для вариаций вызывается после основного сохранения товара, с приоритетом больше 10.
  • Конфликты с плагинами автогенерации SKU: Если используются сторонние плагины, отключите их или адаптируйте код, чтобы не было конфликтов.

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

  • Не вызывайте сохранение товара внутри хука save_post без проверки, чтобы избежать бесконечной петли.
  • Используйте уникальные префиксы в SKU, чтобы избежать совпадений с существующими.
  • Если каталог большой, кэшируйте результаты проверки уникальности SKU, чтобы снизить нагрузку на базу данных.
  • Рассмотрите использование WPShop Clearfy Pro для очистки и оптимизации WooCommerce, что может улучшить работу с метаданными товаров и SKU Подробнее о Clearfy Pro.

Сравнение подходов к автоприсвоению SKU в WooCommerce

МетодПлюсыМинусыПример
Плагин автогенерации SKUГотовое решение, поддержка, настройка через UIЗависимость от стороннего кода, возможные конфликтыWooCommerce SKU Generator
Собственный код на хукахКонтроль, простота, легко адаптируетсяТребует навыков, ответственность за поддержкуКод из статьи
Ручное заполнение SKUНикаких конфликтов, полный контрольТрудоемко при большом каталогеРучной ввод в админке
Как отображать последних активных пользователей WordPress
25.01.2026
Как автоматизировать обновление плагинов в WordPress без рисков
11.04.2026
WooCommerce: решение проблемы с нерабочим автоприсвоением штрихкода (SKU) к товару
26.04.2026
Как создать отслеживание активности пользователей в WordPress: практические примеры и код
25.12.2025
Как использовать REST API для создания кастомных эндпойнтов в WordPress
08.12.2025