Проблема с отображением двух циклов продукта Woo на одной странице - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь настроить страницы архива моего магазина продуктов WooCommerce, чтобы сначала отображались все товары, отмеченные как избранные, а затем все остальные товары в выбранной категории.

Я уже попробовал следующееЦикл, который я поместил в свой файл archive-product.php, однако у меня есть 2 проблемы:

  1. Если я нахожусь на странице архива /product-category/toys/, он показывает товары всех категорий. Предполагается, что будут отображаться товары только из определенной категории (например, игрушки).

  2. На каждой странице с разбивкой по страницам сначала отображаются избранные товары, а затем отображаются обычные товары. В действительности только первая страница должна отображать рекомендуемые продукты, и после отображения всех рекомендуемых продуктов на них должны отображаться обычные продукты. Кажется, что на каждой странице отображаются два отдельных цикла, а не один цикл.

ТАКЖЕ, это предпочтительный способ сделать это, или я должен использовать pre_get_posts?

<?php woocommerce_product_loop_start(); ?>
        <?php
        //CUSTOM LOOP
        // Display featured Products first.
$query = new WP_Query( array(
    'post_type' => 'product',
    'post_status' => 'publish',
    'posts_per_page' => -1 ,
    'tax_query' => array( array(
        'taxonomy' => 'product_visibility',
        'field'    => 'term_id',
        'terms'    => 'featured',
        'operator' => 'IN',
    ) )
) );

$featured_product_names = array();
$featured_product_id = array();

if ( $query->have_posts() ): while ( $query->have_posts() ): $query->the_post();

        $product = wc_get_product( $query->post->ID );
        wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
// fetch other product which is not featured
$my_query = new WP_Query(array(
    'post__not_in' => $featured_product_id,
    'post_type' => 'product'
));

if ( $my_query->have_posts() ): while ( $my_query->have_posts() ): $my_query->the_post();
$product = wc_get_product( $query->post->ID );
wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
        ?>
        <?php woocommerce_product_loop_end(); ?>

Я думаю, что я на правильном пути, но не могу точно определить проблему.

Вся помощь приветствуется !!

1 Ответ

0 голосов
/ 21 октября 2019

вы определили $featured_product_id как массив, но не добавили в него постиды, чтобы пропустить другой цикл. Проверьте код ниже, и он будет работать.

<?php woocommerce_product_loop_start(); ?>
        <?php
        //CUSTOM LOOP
        // Display featured Products first.
$query = new WP_Query( array(
    'post_type' => 'product',
    'post_status' => 'publish',
    'posts_per_page' => -1 ,
    'tax_query' => array( array(
        'taxonomy' => 'product_visibility',
        'field'    => 'term_id',
        'terms'    => 'featured',
        'operator' => 'IN',
    ) )
) );

$featured_product_names = array();
$featured_product_id = array();

if ( $query->have_posts() ): while ( $query->have_posts() ): $query->the_post();
        $featured_product_id[] = get_the_ID();
        $product = wc_get_product( $query->post->ID );
        wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
// fetch other product which is not featured
$my_query = new WP_Query(array(
    'post__not_in' => $featured_product_id,
    'post_type' => 'product'
));

if ( $my_query->have_posts() ): while ( $my_query->have_posts() ): $my_query->the_post();
$product = wc_get_product( $query->post->ID );
wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
        ?>
        <?php woocommerce_product_loop_end(); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...