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

В чем суть задачи: связанные товары в WooCommerce

Связанные товары (related products) — это стандартный функционал WooCommerce, который выводит товары из той же категории или с похожими атрибутами. Однако стандартная реализация не всегда устраивает: она может показывать нерелевантные товары, а для уникальных сценариев нужно вывести товары, связанные не по категориям, а по кастомной логике. В этой статье разберем, как вывести связанные товары без использования дополнительных плагинов, используя стандартные хуки и WP_Query.

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

По умолчанию WooCommerce выводит связанные товары через функцию wc_get_related_products(), которая выбирает товары из тех же категорий или тегов. Если ваша задача:

  • Вывести товары, связанные по кастомному метаполю (например, "похожие по бренду" или "аксессуары"),
  • Изменить количество или сортировку связанных товаров,
  • Полностью контролировать вывод блока связанных товаров,

стандартный функционал не подойдет. Попытка просто изменить шаблон связанного товара через related.php даст лишь частичный контроль.

Пошаговое решение: кастомный вывод связанных товаров через WP_Query

1. Отключаем стандартный вывод связанных товаров

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

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

2. Создаем функцию для вывода кастомных связанных товаров

Допустим, у каждого товара есть метаполе _related_brand с ID бренда. Выведем товары с таким же брендом.

function hueman_custom_related_products() {
    global $product;
    if ( ! $product ) return;

    $brand_id = get_post_meta( $product->get_id(), '_related_brand', true );
    if ( ! $brand_id ) return;

    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 4,
        'post__not_in' => array( $product->get_id() ),
        'meta_query' => array(
            array(
                'key' => '_related_brand',
                'value' => $brand_id,
                'compare' => '=',
            ),
        ),
    );

    $related = new WP_Query( $args );

    if ( $related->have_posts() ) {
        echo '<section class="custom-related-products">';
        echo '<h2>Похожие товары по бренду</h2>';
        echo '<ul class="products">';

        while ( $related->have_posts() ) {
            $related->the_post();
            wc_get_template_part( 'content', 'product' );
        }

        echo '</ul>';
        echo '</section>';
    }
    wp_reset_postdata();
}
add_action('woocommerce_after_single_product_summary', 'hueman_custom_related_products', 20);

3. Добавляем метаполе для товаров

Для примера в админке добавьте произвольное поле _related_brand с одинаковым значением у товаров, которые хотите связать (например, ID бренда или строку). Для массового редактирования используйте плагины типа Advanced Custom Fields или WP All Import.

Как проверить, что решение сработало

  • Откройте страницу товара, у которого задано метаполе _related_brand.
  • Внизу товара должен появиться блок "Похожие товары по бренду" с товарами, у которых совпадает метаполе.
  • Убедитесь, что товар, на странице которого вы находитесь, не отображается в списке.
  • Проверьте, что стандартный блок связанных товаров исчез (если он был до этого).

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

  • Пустой блок связанных товаров: проверьте, что у товаров действительно есть метаполе и оно совпадает. Включите режим отладки WP_DEBUG для проверки ошибок.
  • Ничего не меняется после добавления кода: убедитесь, что код добавлен в правильное место (functions.php дочерней темы или кастомного плагина) и нет синтаксических ошибок.
  • Конфликты с другими плагинами: временно деактивируйте плагины, которые могут влиять на вывод товаров (кэш, оптимизация, кастомные шаблоны WooCommerce).
  • Блок выводится, но стили нарушены: используйте классы WooCommerce products и product для элементов списка, чтобы сохранить стили темы.

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

  • Для ускорения запросов используйте кэширование результатов WP_Query, например с Transients API, если блок не требует мгновенного обновления.
  • Не используйте пользовательский ввод напрямую в запросах без проверки — в наших примерах метаполе берется из базы, что безопасно.
  • Если метаполе содержит сложные данные, рассмотрите возможность использования таксономий вместо метаполей — они индексируются лучше.
  • Для больших магазинов ограничьте количество выводимых связанных товаров и используйте пагинацию или lazy load.

Сравнение подходов к выводу связанных товаров

МетодПлюсыМинусыКогда использовать
Стандартный WooCommerceПростота, поддержка, обновленияОграниченный контроль, нерелевантные товарыМелкие магазины, базовые связи
Кастомный WP_Query с метаполямиПолный контроль, гибкостьНужна разработка, возможны ошибкиУникальная логика связей
Плагины связей (например, YITH WooCommerce)Готовый функционал, UI в админкеНагрузка, возможные конфликтыБез разработки, быстро

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

⭐⭐⭐⭐⭐
Как реализовать отложенную публикацию постов в WordPress с примерами кода
09.02.2026
Как сделать динамический календарь событий в WordPress с AJAX и темой Hueman
27.02.2026
Как добавить поле Yoast SEO в админку WordPress для удобного редактирования
26.12.2025
Как создать выпадающий список с подгрузкой в WordPress
18.01.2026
Как создать динамическую футбольную таблицу в WordPress с AJAX
27.02.2026
×
Оптимизируй свой сайт!

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

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