Как удалить повторяющиеся теги в WooCommerce без риска для сайта

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

Повторяющиеся теги товаров в WooCommerce приводят к раздутой базе данных, ухудшают навигацию и SEO, а также затрудняют управление товарами. Часто это происходит после импорта товаров, массового обновления или из-за ошибок плагинов. Чтобы убедиться в наличии дубликатов, воспользуйтесь SQL-запросом для поиска тегов с одинаковыми названиями:

SELECT name, COUNT(*) as count FROM wp_terms INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id WHERE taxonomy = 'product_tag' GROUP BY name HAVING count > 1;

Если запрос возвращает строки с count > 1, значит дубли действительно есть.

Пошаговое решение удаления дубликатов тегов в WooCommerce

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

Перед любыми изменениями сделайте полный экспорт базы данных через phpMyAdmin или WP-CLI:

wp db export backup.sql

2. Идентифицируйте дублирующиеся теги и их ID

Используйте расширенный запрос, чтобы получить term_id всех дублей:

SELECT wp_terms.term_id, wp_terms.name FROM wp_terms INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id WHERE taxonomy = 'product_tag' AND name IN (SELECT name FROM wp_terms INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id WHERE taxonomy = 'product_tag' GROUP BY name HAVING COUNT(*) > 1) ORDER BY name, wp_terms.term_id;

3. Выберите основной тег и объедините товары

Для каждого набора дублей выберите один тег (обычно с минимальным term_id) как основной. Затем обновите связи товаров в таблице wp_term_relationships, заменяя ID дублей на ID основного тега.

UPDATE wp_term_relationships SET term_taxonomy_id = (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = основной_term_id AND taxonomy = 'product_tag') WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id IN (дублирующие_term_id) AND taxonomy = 'product_tag');

4. Удалите дублирующие теги

После переназначения связей удалите дубли из таблиц wp_terms и wp_term_taxonomy:

DELETE FROM wp_term_taxonomy WHERE term_id IN (дублирующие_term_id) AND taxonomy = 'product_tag'; DELETE FROM wp_terms WHERE term_id IN (дублирующие_term_id);

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

Запустите первоначальный запрос для проверки отсутствия дублей:

SELECT name, COUNT(*) as count FROM wp_terms INNER JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id WHERE taxonomy = 'product_tag' GROUP BY name HAVING count > 1;

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

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

Частые ошибки при удалении дублирующихся тегов и как их избежать

  • Отсутствие резервной копии: Любые манипуляции с базой данных без бэкапа могут привести к потере данных.
  • Неправильное обновление связей: Если не переназначить товары с удаляемых тегов на основной, товары потеряют связи.
  • Удаление тегов, используемых в других таксономиях: Проверяйте, что удаляемые теги относятся именно к product_tag.
  • Неочищенный кэш WooCommerce: После правок очистите кэш сайта и браузера, чтобы изменения отобразились.

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

  • Работайте на копии сайта или в режиме обслуживания, чтобы избежать сбоев для пользователей.
  • Используйте транзакции MySQL, если это возможно, для возврата изменений при ошибках.
  • После операций оптимизируйте таблицы базы данных:
OPTIMIZE TABLE wp_terms; OPTIMIZE TABLE wp_term_taxonomy; OPTIMIZE TABLE wp_term_relationships;

Сравнение методов удаления дубликатов тегов WooCommerce

МетодПлюсыМинусыРекомендуемость
Ручное удаление через phpMyAdmin и SQLПолный контроль, бесплатноРиск ошибок, требует навыковДля опытных разработчиков
Плагины для управления таксономиямиУдобство, безопасность, автоматизацияМожет быть платным, ограниченная кастомизацияДля непрофессионалов или быстрых решений
Использование WP CLI с кастомными скриптамиБыстро, скрипты повторяемыТребует навыков работы с терминаломДля системных администраторов и разработчиков

Пример скрипта на PHP для автоматического объединения дубликатов тегов

function merge_duplicate_product_tags() {
    global $wpdb;
    $taxonomy = 'product_tag';

    // Получаем теги с повторяющимися именами
    $duplicates = $wpdb->get_results(
        "SELECT name FROM {$wpdb->terms} t
         INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id
         WHERE tt.taxonomy = %s
         GROUP BY t.name
         HAVING COUNT(*) > 1",
        ARRAY_A,
        $taxonomy
    );

    foreach ($duplicates as $dup) {
        $tags = $wpdb->get_results($wpdb->prepare(
            "SELECT t.term_id FROM {$wpdb->terms} t
             INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id
             WHERE tt.taxonomy = %s AND t.name = %s ORDER BY t.term_id",
            $taxonomy, $dup['name']
        ));

        $main_term_id = $tags[0]->term_id;
        $duplicate_term_ids = array_map(function($t) { return $t->term_id; }, array_slice($tags, 1));

        if (!empty($duplicate_term_ids)) {
            // Обновляем связи товаров
            foreach ($duplicate_term_ids as $dup_id) {
                $main_tt_id = $wpdb->get_var($wpdb->prepare(
                    "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id = %d AND taxonomy = %s",
                    $main_term_id, $taxonomy
                ));
                $dup_tt_id = $wpdb->get_var($wpdb->prepare(
                    "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id = %d AND taxonomy = %s",
                    $dup_id, $taxonomy
                ));

                $wpdb->query($wpdb->prepare(
                    "UPDATE {$wpdb->term_relationships} SET term_taxonomy_id = %d WHERE term_taxonomy_id = %d",
                    $main_tt_id, $dup_tt_id
                ));

                // Удаляем дубль
                $wpdb->delete($wpdb->term_taxonomy, ['term_id' => $dup_id, 'taxonomy' => $taxonomy]);
                $wpdb->delete($wpdb->terms, ['term_id' => $dup_id]);
            }
        }
    }
}

// Запускаем функцию
merge_duplicate_product_tags();

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить всплывающие окна в WordPress надежно и быстро
01.01.2026
Как удалить бесполезные метаданные в WordPress без риска
12.03.2026
Как избежать проблем с кэшем WooCommerce после обновлений
01.05.2026
Как удалить автоматически создающиеся вариации WooCommerce без риска для сайта
04.06.2026
Как удалить или отключить Gutenberg в WordPress: практические решения
15.03.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙