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

Диагностика ошибки дублирования SKU в WooCommerce

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

Для диагностики ошибки:

  • Перейдите в админку WooCommerce → Товары и отфильтруйте список по SKU, чтобы найти дубликаты.
  • Используйте SQL-запрос к базе данных для поиска повторяющихся SKU:
SELECT meta_value AS sku, COUNT(*) AS count FROM wp_postmeta WHERE meta_key = '_sku' GROUP BY meta_value HAVING count > 1;

Если запрос вернул строки, значит дубликаты есть — нужно их исправлять.

Почему возникает дублирование SKU

  • Импорт товаров без проверки уникальности SKU.
  • Создание вариаций товара с одинаковым SKU вручную.
  • Ошибки плагинов синхронизации или импорта.

Пошаговое решение проблемы дублирования SKU в WooCommerce

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

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

2. Поиск и исправление дубликатов через SQL

Выполните SQL-запрос для поиска дубликатов (пример выше). Чтобы исправить, можно обновить SKU у повторяющихся товаров:

UPDATE wp_postmeta pm1 SET meta_value = CONCAT(meta_value, '-dup') WHERE meta_key = '_sku' AND meta_value IN (SELECT sku FROM (SELECT meta_value AS sku FROM wp_postmeta WHERE meta_key = '_sku' GROUP BY meta_value HAVING COUNT(*) > 1) AS duplicates) AND pm1.meta_id NOT IN (SELECT MIN(meta_id) FROM wp_postmeta WHERE meta_key = '_sku' GROUP BY meta_value);

Этот запрос добавит суффикс -dup к SKU всех дубликатов, кроме первого уникального.

3. Автоматическая проверка уникальности SKU при сохранении товара

Чтобы предотвратить повторение ошибки, добавьте следующий код в файл functions.php вашей темы или в кастомный плагин. Код проверяет уникальность SKU при сохранении товара и выводит ошибку, если SKU уже используется:

add_action('woocommerce_admin_process_product_object', function($product) {
    $sku = $product->get_sku();
    if (empty($sku)) return;

    global $wpdb;
    $product_id = $product->get_id();

    $query = $wpdb->prepare(
        "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s AND post_id != %d",
        $sku,
        $product_id
    );

    $exists = $wpdb->get_var($query);
    if ($exists) {
        throw new Exception('Ошибка: SKU ' . esc_html($sku) . ' уже используется другим товаром (ID: ' . intval($exists) . '). Пожалуйста, используйте уникальный SKU.');
    }
});

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

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

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

  • Ошибка: Ошибка SQL-запроса при исправлении дубликатов.
    Решение: Проверьте правильность префикса таблиц, обычно wp_ может отличаться. Используйте phpMyAdmin или другой инструмент с поддержкой подзапросов.
  • Ошибка: Сообщение об ошибке SKU при сохранении товара не появляется.
    Решение: Убедитесь, что хук woocommerce_admin_process_product_object подключен и не конфликтует с другими плагинами.
  • Ошибка: Автоматическое исправление дубликатов меняет SKU на неудобочитаемые.
    Решение: После исправления вручную проверьте и оптимизируйте SKU, чтобы они оставались понятными и удобными для учета.

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

  • Не храните SKU в пользовательских таблицах или метаданных плагинов без необходимости — используйте стандартное поле _sku WooCommerce.
  • Регулярно проверяйте уникальность SKU при импортах и обновлениях товаров.
  • Для больших магазинов с тысячами товаров используйте индексацию по метаполям _sku для ускорения запросов.
  • При импорте товаров через CSV или API добавьте проверку на уникальность SKU программно, чтобы избежать ошибок.

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

МетодПреимуществаНедостаткиПрименимость
Ручное исправление через админкуПростота, не требует кодаДолго на больших магазинах, риск пропуска дубликатовМалые магазины
Исправление через SQL-запросыБыстрое исправление множества дубликатовТребует осторожности, риск ошибок в базеСредние и большие магазины, при наличии навыков
Автоматическая проверка через хукПредотвращает появление новых дубликатовНе исправляет уже существующие дубликатыРекомендуется на всех сайтах
Как создать автоматический каталог файлов в WordPress
08.02.2026
WooCommerce: отключение автоподгрузки корзины и настройка обновления без перезагрузки страницы
28.05.2026
WooCommerce: как исправить ошибку дублирования SKU при добавлении товаров
17.07.2026
Как создать собственный шорткод в WordPress
09.11.2025
Как создать собственный тип записи (Custom Post Type) в WordPress: подробное руководство с примерами
29.12.2025