टेम्पलेट पृष्ठ पर woocommerce में कस्टम लूप के माध्यम से विशेष रुप से प्रदर्शित उत्पादों


19

मैं अपने होम पेज पर अपने woocommerce स्टोर से 6 विशेष रुप से प्रदर्शित उत्पादों को प्रदर्शित करना चाहूंगा। कुछ शोधों के बाद मैंने पाया कि ऐसा करने का सही तरीका एक कस्टम लूप के माध्यम से था, (मैं शॉर्टकोड का उपयोग नहीं करना चाहता क्योंकि मैं स्टाइलिंग आदि के लिए अतिरिक्त कक्षाएं जोड़ना चाहूंगा) मुझे यह भी पता चला कि वूकोमर्स के लिए उपयोग की जाने वाली कुंजी विशेष रुप से प्रदर्शित उत्पाद '_featured' है। मैंने किसी भी उत्पाद को प्रदर्शित करने के लिए नीचे दिए गए कोड को एक साथ रखा, जिसे मैंने अपने स्टोर में विशेष रुप से प्रदर्शित उत्पादों के रूप में चुना, लेकिन यह काम नहीं करता है ... किसी भी मदद की सराहना की जाती है।

<?php

    $args = array(
        'post_type'   => 'product',
        'stock'       => 1,
        'showposts'   => 6,
        'orderby'     => 'date',
        'order'       => 'DESC' ,
        'meta_query'  => array(
            array(
                'key'     => '_featured',
                'value'   => 0,
                'compare' => '>',
                'type'    => 'numeric'
            )
        )
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>

        <li>    
            <?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="65px" height="115px" />'; 
            ?>
            <h3><?php the_title(); ?></h3>

            <?php 
                echo $product->get_price_html(); 
                woocommerce_template_loop_add_to_cart( $loop->post, $product );
            ?>    
        </li>

<?php 
    endwhile;
    wp_reset_query(); 
?>

इस उत्तर में बताए गए कस्टम फ़ंक्शन द्वारा समर्थित var_dump( get_meta_values( '_featured', 'product' );फ़ंक्शन से परिणाम को जोड़ेंget_meta_values
Pieter Goosen

जवाबों:


17

अपने args को इस तरह बदलें:

$meta_query   = WC()->query->get_meta_query();
$meta_query[] = array(
    'key'   => '_featured',
    'value' => 'yes'
);
$args = array(
    'post_type'   =>  'product',
    'stock'       =>  1,
    'showposts'   =>  6,
    'orderby'     =>  'date',
    'order'       =>  'DESC',
    'meta_query'  =>  $meta_query
);

यदि आप wp-content / plugins / woocommerce / / class-wc-shortcodes.php (@ 595) शामिल करते हैं, तो आप पा सकते हैं कि यह WC शॉर्टकोड के लिए कैसे किया जाता है।


3
वे ध्यान दें कि '_featured' को संख्यात्मक मान के रूप में संग्रहीत नहीं किया गया है। इसे एक स्ट्रिंग 'हां' या 'नहीं' के रूप में संग्रहीत किया जाता है। ओपी सवाल में बाकी सब कुछ काम करना चाहिए, मेरे लिए काम किया।
३० बजे १_१६

1
WooCommerce 3.0 के रूप में, यह समाधान अब काम नहीं करता है। कृपया मेरा अद्यतन उत्तर नीचे देखें।
19

22

WooCommerce 3.0 में यह बदल गया है। यह केवल एक मेटा_क्वारी नहीं है, लेकिन अब इसमें एक टैक्स_क्वायरी भी शामिल है। अब तर्क हैं:

    $meta_query  = WC()->query->get_meta_query();
    $tax_query   = WC()->query->get_tax_query();
    $tax_query[] = array(
        'taxonomy' => 'product_visibility',
        'field'    => 'name',
        'terms'    => 'featured',
        'operator' => 'IN',
    );

    $args = array(
        'post_type'           => 'product',
        'post_status'         => 'publish',
        'ignore_sticky_posts' => 1,
        'posts_per_page'      => $atts['per_page'],
        'orderby'             => $atts['orderby'],
        'order'               => $atts['order'],
        'meta_query'          => $meta_query,
        'tax_query'           => $tax_query,
    );

Woocommerce देखें / शामिल / वर्ग- wc-shortcodes.php


1
मुझे इसकी ही खोज थी!
joshkrz

इसके अलावा Woocommerce 3.0 के लिए, वे wc_placeholder_img_srcइसके बजाय का उपयोग करने की सलाह देते हैं woocommerce_placeholder_img_src
रोबोटिक

6

विशेष उत्पाद WooCommerce 3 में लूप

<ul class="products">
<?php
$args = array(
    'post_type' => 'product',
    'posts_per_page' => 12,
    'tax_query' => array(
            array(
                'taxonomy' => 'product_visibility',
                'field'    => 'name',
                'terms'    => 'featured',
            ),
        ),
    );
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
    while ( $loop->have_posts() ) : $loop->the_post();
        wc_get_template_part( 'content', 'product' );
    endwhile;
} else {
    echo __( 'No products found' );
}
wp_reset_postdata();
?>

5

WooCommerce विकी के अनुसार :

बिल्डिंग कस्टम WP_Queries या डेटाबेस क्वेरी [उत्पादों को पुनः प्राप्त करने के लिए] WooCommerce के भविष्य के संस्करणों में आपके कोड को तोड़ने की संभावना है क्योंकि डेटा बेहतर प्रदर्शन के लिए कस्टम तालिकाओं की ओर बढ़ता है।

WooCommerce का उपयोग कर अधिवक्ताओं wc_get_products()या WC_Product_Query()बजाय WP_Query()या get_posts()

मैंने उस कोड के साथ एक पोस्ट लिखी है जिसका उपयोग आप यहाँ प्राप्त करना चाहते हैं: https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/


क्षमा करें, कुछ लिखित कोड देखे बिना, आपके लेख को समझना कठिन है। क्या आप कृपया कुछ कोडिंग शामिल कर सकते हैं?
HOY

@ क्यों एम्बेड प्लगइन टूट गया था; अब यह तय हो गया है और आप कोड देख सकते हैं!
20

धन्यवाद, समाधान की तलाश करते हुए, मैं नीचे इस एक के साथ आया था। मुझे यकीन नहीं है कि यह आपके बारे में कैसे अलग है क्योंकि मैं आपकी जांच करने में सक्षम नहीं था, लेकिन यह बहुत कम है और मुझे कस्टम टूल लूप के साथ मदद मिली। kathyisawesome.com/woocommerce-modifying-product-query
HOY

1

मुझे पता है कि यह काफी पुराना है, लेकिन मैंने अभी यहां एक वैकल्पिक समाधान साझा किया है और मुझे लगता है कि यह इस विषय तक पहुंचने वालों की भी मदद कर सकता है।

उपयोग करने के बजाय meta_queryया tax_query, आप wc_get_featured_product_ids () का उपयोग कर सकते हैं :

$args = array(
    'post_type'           => 'product',
    'posts_per_page'      => 6,
    'orderby'             => 'date',
    'order'               => 'DESC',
    'post__in'            => wc_get_featured_product_ids(),
);

$query = new WP_Query( $args );

मुझे उम्मीद है यह मदद करेगा!


1

इसके आधार पर: https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query

मैं कोशिश करूँगा:

बाहरी लूप:

$args = array (
'limit' => 6,
'orderby' => 'title',
'order' => 'ASC',
'category' => $club_cat,
'stock_status' => 'instock',
'featured' => true,

 );

 $products = wc_get_products( $args );

पाश में:

$query = new WC_Product_Query( array(
'limit' => 6,
'orderby' => 'title',
'order' => 'ASC',
'category' => $club_cat,
'stock_status' => 'instock',
'featured' => true,
'return' => 'ids',

 ) );

 $products = $query->get_products();

0

यदि आप में डेटाबेस में एक बार देख ले wp_postmetaतालिका आप देखेंगे meta_keyहो जाएगा _featuredऔर meta_valueहो जाएगा yesया noमूल्य की तो बजाय 0या 1लिखने yesयाno

<?php
    $q = new WP_Query([
      'post_type'   =>  'product',
      'stock'       =>  1,
      'showposts'   =>  3,
      'orderby'     =>  'date',
      'order'       =>  'DESC',
      'meta_query'  =>  [ 
        ['key' => '_featured', 'value' => 'yes' ]
        ]
    ]);
    if ( $q->have_posts() ) :
        while ( $q->have_posts() ) : $q->the_post();
            // display product info
        endwhile; wp_reset_query();
    endif;
?>

0
<ul class="products">
    <?php
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 12,
            'tax_query' => array(
                    array(
                        'taxonomy' => 'product_visibility',
                        'field'    => 'name',
                        'terms'    => 'featured',
                    ),
                ),
            );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
               echo '<p>'.get_the_title().'</p>';
            endwhile;
        } else {
            echo __( 'No products found' );
        }
        wp_reset_postdata();
    ?>
</ul><!--/.products-->

कृपया संपादित आपका जवाब है, और एक विवरण जोड़ें: क्यों कि समस्या का समाधान कर सकता है?
FUXIA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.