WooCommerce: автоматическое создание уникальных слагов товаров при импорте и массовом обновлении

Проблема дублирования слагов в WooCommerce при массовом импорте товаров

При импорте большого количества товаров в WooCommerce часто возникает ситуация, когда слаги (URL-адреса товаров) дублируются или генерируются некорректно. Это приводит к ошибкам 404, потере SEO-позиций и конфликтам с другими товарами. В WooCommerce слаг товара по умолчанию формируется из названия, но при повторении названий система добавляет окончание с числом. Однако при импорте через CSV или массовом обновлении слаги могут не обновляться автоматически.

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

Для проверки наличия дубликатов слагов в базе данных выполните следующий SQL-запрос для таблицы wp_posts (замените префикс wp_ на ваш, если он другой):

SELECT post_name, COUNT(*) AS count FROM wp_posts WHERE post_type = 'product' GROUP BY post_name HAVING count > 1;

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

Также проверьте, как формируются слаги при импорте: если импортируемый файл содержит поле post_name, WooCommerce использует его без изменений, что может создавать дубли.

Пошаговое решение: автоматическое создание уникальных слагов при импорте и массовом обновлении

1. Создаем функцию для генерации уникального слага

Добавьте следующий код в functions.php вашей дочерней темы или в кастомный плагин:

function wplesson_generate_unique_slug( $slug, $post_ID = null, $post_type = 'product' ) {
    global $wpdb;

    $original_slug = $slug;
    $suffix = 1;

    // Проверка на уникальность
    while ( $wpdb->get_var( $wpdb->prepare( 
        "SELECT ID FROM {$wpdb->posts} WHERE post_name = %s AND post_type = %s AND ID != %d", 
        $slug, $post_type, $post_ID ? $post_ID : 0 
    ) ) ) {
        $slug = $original_slug . '-' . $suffix;
        $suffix++;
    }

    return $slug;
}

2. Используем хук для переопределения слага товара при сохранении

Добавьте фильтр, который будет применять уникальный слаг при сохранении товара:

add_filter( 'wp_unique_post_slug', 'wplesson_unique_product_slug_filter', 10, 6 );
function wplesson_unique_product_slug_filter( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
    if ( $post_type === 'product' ) {
        $slug = wplesson_generate_unique_slug( $original_slug, $post_ID, $post_type );
    }
    return $slug;
}

3. Применение при массовом обновлении / импорте с WP All Import или другим плагином

Если используете плагин для импорта, убедитесь, что поле post_name не задается жестко в файле импорта. Если задается, очистите его, чтобы WordPress генерировал слаг автоматически с помощью нашего фильтра.

При массовом обновлении через WP-CLI или кастомный скрипт вызовите функцию wplesson_generate_unique_slug() для каждого товара для обновления слага.

Проверка результата

1. Повторите SQL-запрос на поиск дубликатов слагов. Результат должен быть пустым.

2. Зайдите в админку WooCommerce, отредактируйте товар с ранее дублирующимся слагом, сохраните и проверьте, что слаг уникальный.

3. При импорте новых товаров с одинаковыми названиями проверьте, что слаги автоматически уникализируются, например: product-name, product-name-1, product-name-2.

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

  • Ошибка: Слаги не меняются после импорта.
    Причина: В CSV установлен столбец post_name с неуникальными значениями.
    Решение: Уберите этот столбец или очистите его перед импортом.
  • Ошибка: Конфликт с плагинами SEO, которые кэшируют URL.
    Причина: Кэширование старых URL.
    Решение: Очистите кэш плагинов SEO и кэш браузера.
  • Ошибка: Функция не срабатывает при массовом обновлении через WP-CLI.
    Причина: Не вызван фильтр wp_unique_post_slug или кастомный скрипт напрямую обновляет поле слага.
    Решение: Вызовите функцию генерации уникального слага внутри скрипта.

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

  • Не меняйте слаги для товаров, уже проиндексированных поисковиками без необходимости, чтобы не терять SEO-трафик.
  • Перед массовым обновлением сделайте резервную копию базы данных.
  • Для большого каталога товаров используйте WP-CLI для выполнения скриптов без таймаутов PHP.
  • Храните кастомный код в отдельном плагине, чтобы избежать потери при обновлении темы.
  • Проверяйте работу кода на staging-сервере, чтобы избежать ошибок на рабочем сайте.

Сравнение способов решения проблемы с слагами WooCommerce

МетодПлюсыМинусыРекомендации
Ручное редактирование слаговПростота, контрольТрудоемко, риск ошибок при большом каталогеПодходит для единичных товаров
Использование плагинов для импорта с уникализациейАвтоматизация процессаМогут не учитывать все случаи, зависят от плагинаПроверять настройки импорта
Кастомный фильтр wp_unique_post_slugГибкость, контроль, работает для всех способов импортаТребует базовых навыков PHP, тестированияОптимальный вариант для разработчиков
Как создать автоматический отчет об ошибках в WordPress
29.03.2026
WooCommerce: как автоматически удалять неактивные варианты товаров из корзины
06.07.2026
Как добавить несколько обложек для записи в WordPress
13.01.2026
Как использовать хук WooCommerce add_to_cart для кастомизации поведения корзины
09.06.2026
Как автоматически обновлять все плагины WordPress без риска сбоев
26.04.2026