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

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

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

Чтобы проверить наличие дублирующихся SKU, используйте следующий SQL-запрос в базе данных WordPress (обычно через phpMyAdmin или аналог):

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

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

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

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

Пошаговое решение проблемы дублирующихся SKU

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

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

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

После выполнения SQL-запроса, получите ID постов с дублирующимися SKU:

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

Исправьте SKU, например, добавив суффикс или полное уникальное значение. Это можно сделать вручную в админке или программно.

3. Скрипт для автоматического исправления дублирующихся SKU

Используйте следующий PHP-скрипт, чтобы добавить суффикс к дублирующимся SKU:

function fix_duplicate_skus() {
    global $wpdb;
    $duplicates = $wpdb->get_col("SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_sku' GROUP BY meta_value HAVING COUNT(*) > 1 AND meta_value != ''");
    foreach ($duplicates as $sku) {
        $posts = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s", $sku));
        $count = 1;
        foreach ($posts as $post_id) {
            if ($count == 1) {
                $count++;
                continue; // первый оставляем без изменений
            }
            $new_sku = $sku . '-' . $count;
            update_post_meta($post_id, '_sku', $new_sku);
            $count++;
        }
    }
}
fix_duplicate_skus();

Разместите этот код в functions.php вашей темы, запустите один раз, затем удалите.

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

Повторно выполните SQL-запрос на дублирование SKU. Если запрос вернул пустой результат, проблема исправлена.

В админке WooCommerce проверьте, что товары имеют уникальные SKU:

  • Перейдите в «Товары»;
  • Проверьте столбец «Артикул»;
  • Убедитесь, что нет повторяющихся значений.

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

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

Практические советы для предотвращения повторного дублирования SKU

  • Используйте уникальные SKU, например, с префиксами или постфиксаторами.
  • Настройте валидацию SKU при создании и редактировании товаров (через хук woocommerce_product_set_sku).
  • Автоматизируйте проверку SKU после импорта:
add_action('woocommerce_product_set_sku', function($sku, $product) {
    global $wpdb;
    if (empty($sku)) return;
    $count = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s AND post_id != %d",
        $sku, $product->get_id()
    ));
    if ($count > 0) {
        wp_die('Ошибка: SKU должен быть уникальным.');
    }
}, 10, 2);

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

МетодПлюсыМинусыРекомендации
Ручное исправление через админкуПростота, контрольДолго при большом количестве товаровПодходит для малого каталога
SQL-запросы и скриптыБыстро, подходит для большого объёмаРиск ошибок без бэкапаТребует навыков работы с БД и PHP
Использование плагинов импорта с валидациейАвтоматизация, предотвращение ошибокМожет быть платным, зависимость от плагинаДля регулярных импортов
WooCommerce: установка отзывов после покупки с автоподтверждением
20.04.2026
Автоматическое удаление старых медиафайлов в WordPress
27.02.2026
Как использовать WPRemark для автоматизации отзывов в WordPress
10.03.2026
Как отладить проблемы с отправкой писем в WordPress
06.03.2026
Создать динамические формы в WordPress на AJAX без плагинов
04.01.2026