Как исправить загрузочную карусель для рекомендуемого продукта в Woocommerce

Я попробовал несколько плагинов для показа слайдера продуктов для моего сайта WordPress WooCommerce, но они не работали так, как я планировал, поэтому я попытался создать их самостоятельно. Это почти сработало, за исключением того, что отображаются дополнительные сообщения, которых вообще не существует. Они не существуют даже как продукты. На первой картинке показан продукт, который представлен. Вторая картинка — это лишний контент, которого вообще не существует. Количество таких ненужных постов кратно общему количеству рекомендуемых товаров. Предложение по аналогичному вопросу отражает почти то, что я сделал, но у него есть проблемы. В моем случае у меня есть 5 рекомендуемых продуктов, и он отображает 25 ненужных сообщений. В настоящее время я пытался отображать только один элемент за раз, и после исправления этой проблемы я буду отображать 3 сообщения за раз, поэтому он дважды повторяется, давая 6 сообщений для слайдов.

введите здесь описание изображениявведите здесь описание изображения

<div id="featured" class="carousel slide ">
                            <div class="carousel-inner ">
                            <?php
                            $args = array( 'post_type' => 'product',
                                           'meta_key' => '_featured',
                                           'meta_value' => 'yes',
                                           'posts_per_page' => 8,
                                           'post_status'     => 'publish',
                                           'offset'          => 0,
                                           'numberposts'     => 6,
                                           //'orderby' =>'rand',
                                           'order' => 'DESC' 
                                           );
                            $featured_loop = new WP_Query( $args );
                            //echo "<pre>";
                            //print_r($featured_loop);
                            //echo "</pre>";

                            if ( $featured_loop->have_posts()){

                                $i = 1; $count;
                                for ($count=0; $count < 6;) { 

                                    foreach ( $featured_loop as $featured ) {
                                    $featured_loop->the_post();
                                    ?>
                                    <div class=
                                      <?php
                                        echo '"';
                                        echo 'item '; 
                                        if ($i == 1) {
                                          echo 'active';
                                        }

                                        echo '"';

                                        ?>>

                                        <div class="col-xs-6 col-sm-4 col-md-4 col-lg-4 ">
                                                <div class="thumbnail">
                                                <i class="tag"></i>
                                                <a id="id-<?php the_id(); ?>" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                                                <?php 

                                                    if (has_post_thumbnail( $featured->post->ID )){
                                                            echo get_the_post_thumbnail($featured->post->ID, 'shop_catalog');
                                                        }
                                                        else {
                                                        echo '<img width ="150" src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" class="img-responsive img-rounded" />';
                                                        }

                                                ?>
                                                </a>
                                                </div><!-- thumbnail -->
                                                <div class="panel-body text-center">
                                                        <h6><?php the_title(); ?> </h6>                         
                                                </div><!-- panel-body text-center -->

                                            </div><!-- col-xs-6 col-sm-4 col-md-4 col-lg-4 -->
                                        </div>
                                    <?php

                                    $i++;


                                    }
                                    $count++;

                                }

                            }


                            ?>








                                </div><!-- carousal item class ends -->


                            </div><!-- carousal inner ends -->
                            <a class="left carousel-control" href="#featured" data-slide="prev"><i class="fa fa-arrow-left"></i></a>
                            <a class="right carousel-control" href="#featured" data-slide="next"><i class="fa fa-arrow-right"></i></a>  

                            <?php wp_reset_postdata(); wp_reset_query(); ?>
                        </div><!-- carousel slide -->  

person robinleathal    schedule 20.03.2015    source источник


Ответы (2)


Во-первых, ваша итерация неверна. Сначала вы запускаете неверный цикл for n= 6 раз, затем для каждого целого числа от 0 до 5 вы запускаете цикл foreach m раз, что приводит к искаженному циклу со сложностью O(n*m), который не решает вашу задачу. проблема.

Вот ваш код, переписанный. Надеюсь, поможет.

<div id="featured" class="carousel slide ">
    <div class="carousel-inner ">
        <?php
        $args          = array(
            'post_type'      => 'product',
            'meta_key'       => '_featured',
            'meta_value'     => 'yes',
            'posts_per_page' => 6,
            'post_status'    => 'publish',
            'offset'         => 0,
            'order'          => 'DESC'
        );
        $featured_loop = new WP_Query( $args );
        if ( $featured_loop->have_posts() ):
            while ( $featured_loop->have_posts() ) : $featured_loop->the_post(); ?>
                <div class="<?php echo 'item'; ?>">
                    <div class="col-xs-6 col-sm-4 col-md-4 col-lg-4 ">
                        <div class="thumbnail">
                            <i class="tag"></i>
                            <a id="id-<?php the_id(); ?>" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                                <?php echo woocommerce_get_product_thumbnail(); ?>
                            </a>
                        </div>
                        <div class="panel-body text-center">
                            <h6><?php the_title(); ?> </h6>
                        </div>
                    </div>
                </div>
            <?php endwhile; ?>
            <a class="left carousel-control" href="#featured" data-slide="prev"><i class="fa fa-arrow-left"></i></a>
            <a class="right carousel-control" href="#featured" data-slide="next"><i class="fa fa-arrow-right"></i></a>
            <?php wp_reset_postdata(); endif; ?>
    </div>
</div>
<?php wp_reset_query(); ?>
person Sorin Gheata    schedule 20.03.2015
comment
этот ничего не показывает. но я заставил его работать с вашим ответом на аналогичный вопрос. кроме этого ‹div class= ‹?php echo ''; эхо 'предмет'; если ($i == 1) { эхо 'активно'; } эхо ''; ?›› является важной частью. так как это пьянка. - person robinleathal; 20.03.2015
comment
Это работает в моей среде, я вижу 6 избранных сообщений с их изображениями. В любом случае, я рад, что вы смогли решить эту проблему;) - person Sorin Gheata; 20.03.2015
comment
Понял тебя. вы забыли, что я говорю о включении его в загрузочную карусель. спасибо за помощь - person robinleathal; 20.03.2015

Отвечая на это с помощью @Sorin Gheata. Он забыл заставить его работать как загрузочную карусель.

<div id="featured" class="carousel slide ">
    <div class="carousel-inner ">
        <?php
        $args          = array(
            'post_type' => 'product',
        'meta_key' => '_featured',
        'meta_value' => 'yes',
        'numberposts'     => 6,
        'posts_per_page' => 6
        );
        $featured_loop = new WP_Query( $args );//global $product;
        if ( $featured_loop->have_posts() ):
            while ( $featured_loop->have_posts() ) : $featured_loop->the_post(); ?>
                                        <div class=
                                      <?php
                                        echo '"';
                                        echo 'item '; 
                                        if ($i == 1) {
                                          echo 'active';
                                        }

                                        echo '"';

                                        ?>>
                    <div class="col-xs-6 col-sm-4 col-md-4 col-lg-4 ">
                        <div class="thumbnail">
                            <i class="tag"></i>
                            <a id="id-<?php the_id(); ?>" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                                <?php echo woocommerce_get_product_thumbnail(); ?>
                            </a>
                        </div>
                        <div class="panel-body text-center">
                            <h6><?php the_title(); ?> </h6>
                        </div>
                    </div>
                </div>

            <?php  $i++; endwhile; ?>
            <a class="left carousel-control" href="#featured" data-slide="prev"><i class="fa fa-arrow-left"></i></a>
            <a class="right carousel-control" href="#featured" data-slide="next"><i class="fa fa-arrow-right"></i></a>
            <?php wp_reset_postdata(); endif; ?>
    </div>
</div>
<?php wp_reset_query(); ?>
person robinleathal    schedule 20.03.2015