简体   繁体   中英

Woocommerce products from category loop

In Woocommerce, I Need some help with this custom product loop, in my code my result is : how it looks like

The loop doesn't stop and it is looping the same products for three or four times.

The code I am using is here :

<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>

You need to do a tax query instead this way:

$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'
) );

Tested and works on Woocommerce product category archive pages…

I Hope this code gonna help you guys :)

    <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-->

Your code should work, although it will take all products in the loop (including those marked as "draft" when you are logged in). You can define only published by adding 'post_status' => 'publish' to your argument variable.

And you should take a look at those anchor tags (specifically the close part)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM