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

Вопрос или проблема

Я пытаюсь отобразить связанные продукты с помощью собственного HTML-вывода, к сожалению, я немного растерян относительно того, как это сделать.

WP_Query ниже отображает продукты, которые есть в наличии, я хочу отобразить все связанные продукты одиночного товара, которые есть в наличии, с помощью моего собственного HTML-вывода, но я не могу найти необходимые поля и параметры, если таковые имеются. Я был бы благодарен, если бы кто-то знал, как это сделать.

<?php $args = array(
'post_type' => 'product',
'posts_per_page' => 12,
      'tax_query' => array(
            array(
                'taxonomy' => 'product_visibility',
                'field'    => 'name',
                'terms'         => 'outofstock',
                'operator'      => 'NOT IN',
            ), 
        ),
      );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
      while ( $loop->have_posts() ) : $loop->the_post();

      wc_get_template_part("templates/my-custom-product-display");

      endwhile;
    } else {
          echo __( 'Продукты не найдены' );
        }
          wp_reset_postdata();
    ?>

WooCommerce имеет встроенную функцию, которая делает это за вас, называемую wc_get_related_products().

Она вернёт массив идентификаторов продуктов, который вы затем можете использовать в правильном собственном цикле. Я рекомендую избегать использования WP_Query() и get_posts(). Посмотрите здесь статью, которую я написал о правильном способе создания пользовательского цикла WooCommerce: https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

Ответ или решение

Для решения задачи по отображению связанных продуктов с использованием пользовательского HTML-вывода в WooCommerce, следует прибегнуть к встроенной функции wc_get_related_products(). Эта функция предназначена для получения идентификаторов связанных продуктов, что позволит вам создать собственный цикл вывода продуктов, не используя WP_Query() или get_posts().

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

  1. Получение идентификаторов связанных продуктов: Начните с получения массива идентификаторов связанных продуктов. Для этого вам необходимо передать ID текущего продукта и указать количество обратно возвращаемых связанных товаров.

  2. Создание пользовательского цикла вывода: Используйте полученный массив идентификаторов для создания кастомного цикла, который отобразит ваши товары с использованием индивидуального HTML-вывода.

  3. Обработка доступности продуктов: Вы можете дополнительно фильтровать только те продукты, которые находятся в наличии, изменяя параметры запроса.

Пример кода

Ниже представлен пример кода, который демонстрирует вышеуказанные шаги:

<?php
// Получаем ID текущего продукта
global $product;
$current_product_id = $product->get_id();

// Получаем массив связанных продуктов
$related_ids = wc_get_related_products($current_product_id, 12); // Получаем до 12 связанных продуктов

if (!empty($related_ids)) {
    // Получаем массив объектов продуктов на основе полученных идентификаторов
    $related_products = wc_get_products(array(
        'include' => $related_ids,
        'status' => 'publish',
        'limit' => 12,
    ));

    if ($related_products) {
        foreach ($related_products as $related_product) {
            // Проверяем доступность продукта
            if ($related_product->is_in_stock()) {
                // Ваш пользовательский HTML вывод для каждого продукта
                echo '<div class="related-product">';
                echo '<h2>' . esc_html($related_product->get_name()) . '</h2>';
                echo $related_product->get_image(); // Изображение продукта
                echo '<p>' . esc_html($related_product->get_price_html()) . '</p>'; // Цена продукта
                echo '<a href="' . esc_url($related_product->get_permalink()) . '">Просмотреть продукт</a>';
                echo '</div>';
            }
        }
    } else {
        echo '<p>' . __('Связанные товары не найдены.', 'your-textdomain') . '</p>';
    }
} else {
    echo '<p>' . __('Связанные товары отсутствуют.', 'your-textdomain') . '</p>';
}
?>

Пояснение кода

  • wc_get_related_products(): Эта функция получает связанные продукты на основе идентификатора текущего продукта. Она возвращает массив идентификаторов.

  • wc_get_products(): Здесь мы используем массив идентификаторов для получения объектов produktów, что позволяет нам применить фильтр по статусу публикации и количеству.

  • is_in_stock(): Метод проверки наличия продукта, который позволяет избежать показа товаров, находящихся вне склада.

Заключение

Используя приведенный код, вы сможете настроить вывод связанных продуктов с кастомным HTML-выводом, учитывая только те, которые находятся в наличии. Это позволит улучшить ваш пользовательский интерфейс и повысить взаимодействие с клиентами. Убедитесь, что вы адаптируете HTML-разметку под ваши нужды и корпоративный стиль.

Оцените материал
Добавить комментарий

Капча загружается...