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

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

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

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

  • Ошибка «SKU must be unique» при сохранении товара в админке.
  • Неправильное отображение остатков или информации о товаре.
  • Ошибки при экспорте/импорте товаров через CSV.

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

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

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

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

2. Определение дублирующихся SKU

Выполните SQL-запрос из предыдущего раздела, чтобы получить список проблемных SKU.

3. Обновление SKU через PHP-скрипт

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

function fix_duplicate_skus() {
    global $wpdb;
    $skus = $wpdb->get_results(
        "SELECT meta_value, GROUP_CONCAT(post_id) as posts
        FROM {$wpdb->postmeta}
        WHERE meta_key = '_sku' AND meta_value != ''
        GROUP BY meta_value
        HAVING COUNT(meta_value) > 1"
    );

    foreach ($skus as $sku_entry) {
        $sku = $sku_entry->meta_value;
        $post_ids = explode(',', $sku_entry->posts);
        // Пропускаем первый товар, оставим оригинальный SKU
        array_shift($post_ids);
        $suffix = 1;
        foreach ($post_ids as $post_id) {
            $new_sku = $sku . '-' . $suffix;
            // Проверяем уникальность
            $exists = $wpdb->get_var($wpdb->prepare(
                "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s",
                $new_sku
            ));
            while ($exists) {
                $suffix++;
                $new_sku = $sku . '-' . $suffix;
                $exists = $wpdb->get_var($wpdb->prepare(
                    "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s",
                    $new_sku
                ));
            }
            // Обновляем SKU
            update_post_meta($post_id, '_sku', $new_sku);
            $suffix++;
        }
    }
    echo "SKU duplicates fixed.";
}
// Для запуска вызовите fix_duplicate_skus(); один раз и удалите или закомментируйте вызов после выполнения

4. Очистка кэша и индексов

Если используете плагины кэширования или оптимизации, очистите кэш и пересоздайте индексы WooCommerce через WooCommerce > Статус > Инструменты.

Как проверить, что дублирование SKU устранено

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

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

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

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

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

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

ПодходПреимуществаНедостатки
Ручное исправление в админкеПростота, точечное исправлениеМного времени при большом количестве товаров
Использование SQL-запросовБыстрая диагностика и массовое исправлениеТребует навыков работы с базой, риск ошибок
Автоматизация через PHP-скриптАвтоматическое уникализация, можно интегрировать в процессыНужно тщательно тестировать, возможны конфликты
Как правильно настроить переадресацию после смены домена в WordPress
24.04.2026
Как использовать хуки для изменения функциональности WordPress без переписывания кода
16.03.2026
Запрет доступа к WooCommerce REST API для неавторизованных пользователей
11.01.2026
Как отключить автозапуск редактора Gutenberg в WordPress
06.02.2026
Как удалить или изменить регистрацию AJAX в WordPress: практические примеры и решения
12.04.2026