X
X
X
X

Как удалить дублирующиеся товары на сайте WordPress (WooCommerce)?

ГлавнаяСтатьиE-TicaretКак удалить дублирующиеся товары на...

Если вы управляете интернет-магазином на WooCommerce, то, возможно, сталкивались с ситуацией, когда один и тот же товар загружен несколько раз с одинаковым артикулом (SKU). Такие дубликаты ухудшают работу сайта, сбивают с толку покупателей и могут негативно повлиять на SEO.

В этом руководстве вы узнаете, как автоматически находить и удалять дублирующиеся товары с одинаковым SKU, оставляя только один экземпляр — самый новый.

Проблема: товары с одинаковыми артикулом (SKU)

Пример:

  • SKU: ABC-123

  • На сайте 2 или более товара с таким SKU.

  • Цель: оставить только один товар, а остальные дубликаты — удалить.

Решение: используем плагин Code Snippets и PHP-код

Для безопасного выполнения очистки без редактирования кода темы мы используем бесплатный плагин Code Snippets.

Установите плагин Code Snippets

  1. Перейдите в админ-панель WordPress.

  2. Зайдите в Плагины > Добавить новый.

  3. Введите в поиск Code Snippets.

  4. Установите плагин от разработчика Code Snippets Pro и активируйте его.

Добавьте новый сниппет (код)

  1. Перейдите в меню Snippets > Add New.

  2. Введите название, например: Удаление дубликатов SKU.

  3. Вставьте следующий код:

add_action('admin_init', 'delete_duplicate_sku_products_except_newest');

function delete_duplicate_sku_products_except_newest() {
if (!current_user_can('administrator')) {
return;
}

// Выполняется только при наличии специального параметра в URL
if (isset($_GET['run_duplicate_cleaner'])) {
global $wpdb;

$results = $wpdb->get_results("
SELECT meta_value as sku, COUNT(*) as total
FROM {$wpdb->prefix}postmeta
WHERE meta_key = '_sku'
GROUP BY meta_value
HAVING total > 1
");

foreach ($results as $row) {
$sku = $row->sku;

$products = get_posts(array(
'post_type' => 'product',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC', // Сохраняем самый новый товар
'meta_query' => array(
array(
'key' => '_sku',
'value' => $sku
)
)
));

$keep = true;
foreach ($products as $product) {
if ($keep) {
$keep = false;
continue;
}
wp_delete_post($product->ID, true); // Удаление без корзины
}
}

wp_die('Дубликаты успешно удалены. Теперь вы можете отключить этот сниппет.');
}
}

Настройте параметры сниппета

  • Внизу выберите:
    “Только в админ-панели (Only run in administration area)”

  • Нажмите “Сохранить и активировать”.

Запустите очистку вручную (один раз)

Откройте в браузере следующий адрес, заменив вашдомен на адрес своего сайта:

https://вашдомен.com/wp-admin/?run_duplicate_cleaner=1

✅ Скрипт проверит все товары, найдет дубликаты по SKU и удалит все, кроме самого нового.

После очистки

  • Появится сообщение:
    “Дубликаты успешно удалены.”

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

Почему это безопасный способ?

  • Не требует редактирования файлов темы.

  • Работает только в админке и только для администратора.

  • Запускается только вручную по URL.

  • Не влияет на скорость и стабильность сайта.

Дополнительные советы

  • Сделайте резервную копию сайта перед выполнением (например, с помощью UpdraftPlus).

  • Если товаров много, процесс может занять несколько секунд.

  • Для товаров с вариациями (variable products) возможна доработка кода.

Заключение

Теперь вы знаете, как безопасно и быстро удалить дублирующиеся товары с одинаковым SKU на WooCommerce-сайте. Чистая база товаров — это улучшенный UX, SEO и удобство в управлении магазином.

Остались вопросы?

Пишите в комментариях или свяжитесь с нами — мы с радостью поможем!


Top