Как исправить ошибку дублирования артикулов (SKU) в WooCommerce

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

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

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

Для поиска дубликатов можно использовать прямой запрос к базе данных MySQL. Например, в phpMyAdmin выполните:

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

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

Также можно использовать WP-CLI для поиска дубликатов:

wp db query "SELECT meta_value AS sku, COUNT(*) AS count FROM wp_postmeta WHERE meta_key = '_sku' GROUP BY meta_value HAVING count > 1;"

Пошаговое решение: как убрать дубли SKU в WooCommerce

  1. Резервное копирование базы данных
    Перед любыми изменениями сделайте полное резервное копирование базы данных и файлов.
  2. Автоматический поиск и исправление дубликатов
    Можно написать PHP-скрипт, который найдёт дубликаты и автоматически добавит к ним суффиксы для уникальности:
function fix_duplicate_skus() {
    global $wpdb;
    $duplicates = $wpdb->get_results(
        "SELECT meta_value AS sku, GROUP_CONCAT(post_id) AS posts, COUNT(*) AS count
        FROM {$wpdb->postmeta}
        WHERE meta_key = '_sku'
        GROUP BY meta_value
        HAVING count > 1"
    );

    foreach ($duplicates as $dup) {
        $post_ids = explode(',', $dup->posts);
        // Пропускаем первый товар, меняем остальные
        array_shift($post_ids);
        $index = 1;
        foreach ($post_ids as $post_id) {
            $new_sku = $dup->sku . '-'. $index;
            // Обновляем SKU
            update_post_meta($post_id, '_sku', $new_sku);
            $index++;
        }
    }
}

// Запуск функции
fix_duplicate_skus();

Этот код можно выполнить разово, например, через подключение к functions.php вашей темы или с помощью плагина Code Snippets.

  1. Проверка и исправление вручную
    Если у вас мало товаров, проще исправить SKU через админку WooCommerce в карточках товаров.
  2. Добавление проверки уникальности SKU при сохранении товара
    Чтобы избежать повторений в будущем, добавим хук, который будет проверять уникальность SKU при сохранении товара:
add_action('woocommerce_admin_process_product_object', 'check_unique_sku_on_save', 10, 1);
function check_unique_sku_on_save($product) {
    $sku = $product->get_sku();
    if (!$sku) return; // Если SKU пустой, пропускаем

    $args = [
        'post_type' => 'product',
        'meta_query' => [
            [
                'key' => '_sku',
                'value' => $sku,
                'compare' => '=',
            ],
        ],
        'post__not_in' => [$product->get_id()],
        'posts_per_page' => 1,
        'fields' => 'ids',
    ];

    $query = new WP_Query($args);
    if ($query->have_posts()) {
        wp_die('Ошибка: SKU должен быть уникальным. Текущий SKU уже используется другим товаром.');
    }
}

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

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

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

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

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

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

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

МетодПлюсыМинусы
Ручное исправление в админкеПростота, подходит для малого количества товаровЗатратно по времени, риск пропустить дубликаты
Автоматический скрипт PHPБыстрое исправление большого количества SKUРиск ошибок без резервного копирования, требует технических навыков
Использование плагинов для контроля SKUАвтоматическая проверка и удобный интерфейсДополнительная нагрузка на сайт, возможны конфликты с другими плагинами
Решение ошибки PHP Fatal error: Allowed memory size exhausted в WordPress
31.03.2026
Как исправить проблему с неработающим WooCommerce Cart AJAX на сайте WordPress
28.05.2026
Как исправить ошибку дублирования артикулов (SKU) в WooCommerce
29.04.2026
Решение проблемы с отправкой писем подтверждения заказа в WooCommerce
07.05.2026
Решение ошибки WP XML-RPC Timeout в WordPress
05.03.2026