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

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

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

Основные признаки дублирующихся SKU:

  • Ошибка при сохранении или импорте товаров с сообщением о существующемся SKU.
  • Неправильное отображение остатков товара или заказов.
  • Конфликты при интеграции с 1С, CRM, складскими системами.

WooCommerce по умолчанию не запрещает одинаковые SKU, поэтому вручную или программно их нужно искать и исправлять.

Как найти дубли SKU в базе данных WooCommerce

Для поиска дублирующихся SKU удобно использовать SQL-запрос к базе WordPress, потому что SKU хранится в метаданных товаров (meta_key = '_sku').

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

Этот запрос выведет все SKU, которые встречаются более одного раза. Если таблица у вас называется иначе (например, с префиксом), замените wp_postmeta на ваш префикс.

Поиск всех товаров с проблемным SKU

SELECT p.ID, p.post_title, pm.meta_value AS sku FROM wp_posts p JOIN wp_postmeta pm ON p.ID = pm.post_id WHERE pm.meta_key = '_sku' AND pm.meta_value = 'ПРОБЛЕМНЫЙ_SKU';

Подставьте в запрос нужный SKU из результатов первого запроса, чтобы получить все товары с этим SKU.

Пошаговое решение: удаление и исправление дублей SKU

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

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

2. Автоматизированный скрипт на PHP для поиска и исправления дублей

Пример скрипта, который можно запустить в среде WP-CLI или подключив к теме/плагину (после тестирования на тестовом сайте):

function fix_duplicate_skus() {
    global $wpdb;
    $duplicates = $wpdb->get_col("SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value <> '' GROUP BY meta_value HAVING COUNT(*) > 1");
    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
        ));
        // Начинаем со второго товара, оставляем первый без изменений
        for ($i = 1; $i < count($posts); $i++) {
            $new_sku = $sku . '-dup-' . $i;
            update_post_meta($posts[$i], '_sku', $new_sku);
            error_log("SKU дубли $sku изменён на $new_sku для товара ID {$posts[$i]}");
        }
    }
}
fix_duplicate_skus();

Этот код добавляет суффиксы для дублирующихся SKU, чтобы сделать их уникальными.

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

Повторите SQL-запрос из раздела «Диагностика» для проверки, что дубли отсутствуют:

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

Если запрос не возвращает результатов — дубли успешно устранены.

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

  • Откройте в админке WooCommerce несколько товаров с изменёнными SKU и убедитесь, что новые значения корректно отображаются.
  • Попробуйте провести импорт/экспорт товаров, чтобы проверить отсутствие конфликтов.
  • Если используете интеграции (1С, CRM), выполните тестовую синхронизацию.

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

  • Ошибка: Скрипт не изменяет SKU — возможно, права пользователя недостаточны или код не выполнен в среде WordPress.
    Решение: Запускайте через WP-CLI или добавляйте код в functions.php временно с проверкой прав.
  • Ошибка: Дубли появляются снова после импорта товаров.
    Решение: Проверьте настройки импорта — большинство плагинов позволяют выставить уникальность SKU, либо пропишите в импорте проверку дублирования.
  • Ошибка: Некоторые товары имеют пустой SKU.
    Решение: Добавьте проверку для пустых значений, так как пустой SKU тоже может вызвать конфликт.

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

  • Настройте уникальность SKU на уровне импорта — используйте плагины с проверкой или пишите кастомные фильтры.
  • Добавьте в functions.php проверку при сохранении товара:
add_action('woocommerce_admin_process_product_object', function($product) {
    $sku = $product->get_sku();
    if (empty($sku)) return;
    global $wpdb;
    $exists = $wpdb->get_var($wpdb->prepare(
        "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = %s AND post_id != %d",
        $sku, $product->get_id()
    ));
    if ($exists) {
        wc_add_notice('SKU должен быть уникальным. Такой SKU уже существует.', 'error');
        remove_action('woocommerce_admin_process_product_object', __FUNCTION__);
    }
});
  • Регулярно проверяйте базу данных на дубли с помощью SQL-запроса.
  • Используйте Clearfy Pro для автоматической чистки и оптимизации базы, включая удаление невалидных метаданных.

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

МетодПреимуществаНедостатки
Ручная корректировка в админкеПростота, подходит для небольшого количества товаровДолговременно, риск пропуска ошибок
SQL-запросы + скриптыАвтоматизация, быстрое исправление большого объёмаТребует навыков работы с БД и PHP
Плагины для управления SKUУдобство, интеграция с импортом/экспортомМогут влиять на производительность, платные решения
Как создать свою таксономию в WordPress с примерами кода
02.02.2026
Оптимальные методы кэширования для ускорения сайта
14.04.2026
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
01.04.2026
Как настроить разделённый кеш в WordPress для ускорения сайта
08.03.2026
Как использовать WPCommunity для создания сообщества на WordPress
15.03.2026