Php 从分类循环中选择商业产品

Php 从分类循环中选择商业产品,php,html,wordpress,woocommerce,custom-taxonomy,Php,Html,Wordpress,Woocommerce,Custom Taxonomy,在Woocommerce中,我需要一些有关此自定义产品循环的帮助,在我的代码中,我的结果是: 循环不会停止,它会将相同的产品循环三到四次 我使用的代码如下: <div class="container"> <div id="default_products_page_container" class="wrap wpsc_container"> <?php remove_action( 'woocommerce_bef

在Woocommerce中,我需要一些有关此自定义产品循环的帮助,在我的代码中,我的结果是:

循环不会停止,它会将相同的产品循环三到四次

我使用的代码如下:

<div class="container">
    <div id="default_products_page_container" class="wrap wpsc_container">
        <?php
            remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
            remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
            $cat = get_query_var( 'product_cat' );
            $args = array( 'post_type' => 'product', 'posts_per_page' => 5, 'product_cat' => $cat, 'orderby' => 'rand' );
            $loop = new WP_Query( $args );
        ?>
        <div class="wpsc_default_product_list">
            <?php
            while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>
            <div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
                <div class="default_product_display product_view_<?php echo get_permalink( $loop->post->ID ); ?>group">
                    <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>"/>
                    <?php if (has_post_thumbnail( $loop->post->ID ))
                    {            
                    ?>         
                    <div class="product-image-thumb"> 
                        <img src="<?php echo the_post_thumbnail_url( $loop->post->ID );?>"/>
                    </div>
                    <?php
                    } else 
                    {?>
                    <div class="product-image-thumb">
                        <a>
                            <img src="<?php echo woocommerce_placeholder_img_src();?>"/>
                        </a>
                    </div>
                    <?php } ?>
                </div>
            </div>
            <?php endwhile; ?>
        </div>
        <?php wp_reset_query(); ?>
    </div>
</div>


您的代码应该可以工作,尽管它将接受循环中的所有产品(包括登录时标记为“草稿”的产品)。只能通过向参数变量添加
'post\u status'=>'publish'
来定义发布

您应该查看这些锚定标记(特别是闭合部分)

您需要这样做:

$loop = new WP_Query( array(
    'post_type' => 'product',
    'post_status' => 'publish',
    'posts_per_page' => 5,
    'tax_query' => array( array(
        'taxonomy'         => 'product_cat',
        'field'            => 'slug', // Or 'term_id' or 'name'
        'terms'            => get_query_var( 'product_cat' ), // A slug term
        // 'include_children' => false // or true (optional)
    )),
    'orderby' => 'rand'
) );

在Woocommerce产品类别归档页面上测试并运行…

我希望这段代码能帮助你们:)


请编辑代码以便更好地缩进相同的问题。我的店里只有6种产品,但代码是打印出来的9:我想主要的问题是在每个帖子上page@AurimasGelž如果使用值
-1
,则为
每页发布
限制显示产品的数量,没有限制…我已经测试了你的代码,对我来说,它可以在没有重复产品的情况下工作…所以在其他地方有一些东西使这种情况发生。这可能是因为我的css?当我不用它的时候,它工作的很好
    <ul class="products">
    <?php
    $args = array(
        'product_cat' => 'Shampoo',
        'posts_per_page' => 4,
        'orderby' => 'rand'
    );
    $loop = new WP_Query($args);
    while ($loop->have_posts()) : $loop->the_post();
        global $product; ?>
        <div class="row">
            <!-- <h2>Shampoo</h2> -->
            <li class="product">

                <a href="<?php echo get_permalink($loop->post->ID) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">

                    <?php woocommerce_show_product_sale_flash($post, $product); ?>

                    <?php if (has_post_thumbnail($loop->post->ID)) echo get_the_post_thumbnail($loop->post->ID, 'shop_catalog');
                    else echo '<img src="' . woocommerce_placeholder_img_src() . '" alt="Placeholder" width="300px" height="300px" />'; ?>

                    <h3><?php the_title(); ?></h3>

                    <span class="price"><?php echo $product->get_price_html(); ?></span>

                </a>

                <?php woocommerce_template_loop_add_to_cart($loop->post, $product); ?>
            </li>
        </div>
    <?php endwhile; ?>
    <?php wp_reset_query(); ?>
</ul>
<!--/.products-->