Если вы управляете интернет-магазином на WooCommerce, то, возможно, сталкивались с ситуацией, когда один и тот же товар загружен несколько раз с одинаковым артикулом (SKU). Такие дубликаты ухудшают работу сайта, сбивают с толку покупателей и могут негативно повлиять на SEO.
В этом руководстве вы узнаете, как автоматически находить и удалять дублирующиеся товары с одинаковым SKU, оставляя только один экземпляр — самый новый.
Пример:
SKU: ABC-123
На сайте 2 или более товара с таким SKU.
Цель: оставить только один товар, а остальные дубликаты — удалить.
Для безопасного выполнения очистки без редактирования кода темы мы используем бесплатный плагин Code Snippets.
Перейдите в админ-панель WordPress.
Зайдите в Плагины > Добавить новый.
Введите в поиск “Code Snippets”.
Установите плагин от разработчика Code Snippets Pro и активируйте его.
Перейдите в меню Snippets > Add New.
Введите название, например: Удаление дубликатов SKU
.
Вставьте следующий код:
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 и удобство в управлении магазином.
Остались вопросы?
Пишите в комментариях или свяжитесь с нами — мы с радостью поможем!