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

Диагностика проблемы: почему связаны товары отображаются некорректно

В WooCommerce к связанным товарам относятся upsells, cross-sells и related products. Часто пользователи замечают, что эти товары отображаются не те, которые хотелось бы, либо вообще не появляются, несмотря на настройку товаров. Это происходит из-за автоматического алгоритма WooCommerce, который подбирает related products на основе категорий и тегов, а upsells и cross-sells — на основе настроек в карточке товара.

Проверить, какие товары связаны с вашим товаром, можно в админке в разделе редактирования товара во вкладках «Связанные товары» (Upsells, Cross-sells).

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

Удаление отображения связанных товаров на странице товара

Чтобы полностью убрать блок related products, добавьте в functions.php вашей темы следующий код:

remove_action('woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

Это удалит вывод блока связанных товаров. Аналогично можно убрать upsells и cross-sells:

remove_action('woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15);

Изменение набора связанных товаров с помощью фильтра

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

Пример кода для замены списка связанных товаров на определённые ID:

add_filter('woocommerce_related_products', 'custom_related_products', 10, 3);
function custom_related_products($related_posts, $product_id, $args) {
    // Задаём свои ID товаров
    $custom_related = array(34, 56, 78);
    return $custom_related;
}

Этот код заменит автоматическую выборку на товары с ID 34, 56 и 78.

Настройка upsells и cross-sells через код

Если нужно программно добавить или удалить upsells или cross-sells, можно использовать функции WordPress для обновления метаданных:

// Добавить upsell
update_post_meta($product_id, '_upsell_ids', array(12, 15));
// Удалить все cross-sells
update_post_meta($product_id, '_crosssell_ids', array());

Где $product_id — ID товара, а числа в массивах — ID связанных товаров.

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

  • Очистите кэш сайта и браузера.
  • Откройте страницу товара и убедитесь, что блоки связанных товаров либо отсутствуют (если удаляли), либо отображают корректные товары.
  • Для проверки обновления upsells/cross-sells можно временно вывести их ID в шаблоне или использовать дебаг с var_dump.

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

  • Не виден эффект после удаления блока related products: возможно, тема или плагин переопределяют шаблоны WooCommerce. Проверьте наличие woocommerce/single-product/related.php в вашей теме.
  • Код в functions.php не срабатывает: убедитесь, что код добавлен в активную тему, нет синтаксических ошибок, и используете правильные хуки.
  • Связанные товары не обновляются после изменения метаданных: проверьте наличие кэша WooCommerce и плагинов кэширования, очистите кэш.

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

  • Удаление блоков связанных товаров снижает нагрузку на запросы к базе, особенно если на сайте много товаров.
  • Если требуется сложная кастомизация связей, лучше реализовать собственную логику через фильтры, а не менять шаблоны, чтобы сохранить совместимость с обновлениями WooCommerce.
  • Для безопасности не редактируйте ядро WooCommerce — используйте хуки и фильтры.

Сравнение способов управления связанными товарами

МетодПлюсыМинусыПример
Удаление блоков через remove_actionПростота и скоростьПолная потеря функционала связанных товаровremove_action('woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
Кастомизация через фильтр woocommerce_related_productsПолный контроль над выводомТребует знаний PHP и WooCommerce APIФильтр с возвратом массива ID товаров
Редактирование метаданных upsells/cross-sellsИзменение связей без изменения шаблоновНужен код для каждой операции, сложнее в массовом управленииupdate_post_meta($product_id, '_upsell_ids', array(...));
Как добавить класс к элементам меню WordPress без плагинов
24.01.2026
Как установить лимит на загрузку файлов в WooCommerce
09.05.2026
WooCommerce: автоматическое отслеживание и изменение стоимости товаров при сменах вариаций
01.06.2026
Как использовать nonces в WordPress для защиты от CSRF атак
02.04.2026
WooCommerce: SKU не обновляется при смене вариации товара — как исправить
28.04.2026