WooCommerce: как исправить ошибку дублирования SKU при добавлении товаров

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

Ошибка дублирования SKU (Stock Keeping Unit) возникает, когда в базе данных WooCommerce пытаются сохранить товар с уже существующим уникальным артикулом. Это вызывает сбои при управлении складом, отображении товара и интеграции с внешними сервисами. Основные симптомы:

  • При добавлении нового товара или вариации выводится ошибка "SKU must be unique".
  • Система не сохраняет изменения SKU.
  • Проблемы при синхронизации с 1С, ERP или маркетплейсами.

Для диагностики используйте SQL-запрос к базе данных:

SELECT meta_value, COUNT(*) as count FROM wp_postmeta WHERE meta_key = '_sku' GROUP BY meta_value HAVING count > 1;

Этот запрос покажет все повторяющиеся значения SKU. Если список не пуст, значит в базе есть дубли.

Пошаговое решение ошибки дублирования SKU

1. Поиск и удаление дублирующихся SKU

После выявления дублирующихся значений в базе данных, необходимо вручную исправить или удалить лишние SKU. Для этого:

  1. Перейдите в админку WooCommerce → Товары.
  2. Отфильтруйте товары по SKU, используя найденные повторяющиеся значения.
  3. Измените или очистите поле SKU у дублирующихся товаров или вариаций.

Если товаров много, можно использовать следующий пример PHP-скрипта для автоматического удаления пустых или дублирующихся SKU (используйте с осторожностью и всегда делайте резервную копию):

function remove_duplicate_skus() {
    global $wpdb;
    $duplicates = $wpdb->get_results(
        "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_sku' GROUP BY meta_value HAVING COUNT(*) > 1"
    );
    foreach ($duplicates as $dup) {
        $skus = $wpdb->get_col($wpdb->prepare(
            "SELECT meta_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s",
            $dup->meta_value
        ));
        // Оставляем первый, остальные очищаем
        array_shift($skus);
        foreach ($skus as $meta_id) {
            $wpdb->update(
                $wpdb->postmeta,
                array('meta_value' => ''),
                array('meta_id' => $meta_id)
            );
        }
    }
}
add_action('init', 'remove_duplicate_skus');

2. Запрет на дублирование SKU через хук

Чтобы предотвратить появление дублирующихся SKU в будущем, добавьте проверку при сохранении товара:

add_action('woocommerce_admin_process_product_object', function($product) {
    $sku = $product->get_sku();
    if (empty($sku)) {
        return;
    }
    $args = [
        'post_type' => 'product',
        'post_status' => 'publish',
        'meta_query' => [[
            'key' => '_sku',
            'value' => $sku,
            'compare' => '=',
        ]],
        'fields' => 'ids',
        'exclude' => [$product->get_id()],
        'posts_per_page' => 1
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        wc_add_notice(sprintf('SKU "%s" уже используется другим товаром. Пожалуйста, выберите уникальный SKU.', $sku), 'error');
        $product->set_sku('');
    }
});

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

Чтобы убедиться, что проблема с дублированием SKU решена:

  • Добавьте новый товар с уникальным SKU — он должен успешно сохраниться.
  • Попробуйте добавить товар с ранее использованным SKU — должна появиться ошибка с предупреждением.
  • Повторите SQL-запрос для поиска дублирующихся SKU — база должна быть чиста.

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

  • Неправильный формат SKU: Использование пробелов, спецсимволов или слишком длинных строк — лучше ограничиться латиницей, цифрами и дефисами.
  • Присвоение одного SKU вариациям: В WooCommerce каждая вариация должна иметь уникальный SKU, иначе возникнет конфликт.
  • Отсутствие проверки уникальности при импорте: Используйте плагины с поддержкой проверки или пишите кастомные скрипты для импорта товаров.
  • Кеширование данных: Иногда старые данные о SKU кэшируются, очистите кеш сайта и браузера.

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

  • Регулярно проверяйте базу данных на дубли SKU при помощи SQL-запросов.
  • Используйте транзакции или WP-CLI скрипты для массовых изменений SKU, чтобы избежать частичной записи.
  • Ограничьте права пользователей, которые могут изменять SKU, чтобы избежать случайных дублирований.
  • Для крупных магазинов с тысячами товаров используйте индексы в базе данных по полю _sku для ускорения поиска и проверки уникальности.

Сравнение вариантов решения проблемы дублирования SKU

МетодПреимуществаНедостатки
Ручное исправление через админкуПростота, не требует кодаНеэффективно при большом количестве товаров
Автоматический PHP-скриптБыстрое исправление дубликатовРиск ошибки, требует резервного копирования
Проверка уникальности при сохраненииПредотвращает будущие дублиНе учитывает уже существующие дубли
Как отключить Gutenberg и вернуть классический редактор в WordPress
15.01.2026
Как создать автоматический каталог файлов в WordPress
08.02.2026
WooCommerce: отключение автоподгрузки корзины и настройка обновления без перезагрузки страницы
03.05.2026
Как автоматически удалять пустые термины в таксономиях WordPress
12.04.2026
WooCommerce: использование хука woocommerce_order_status_changed для автоматизации
20.06.2026