किसी दिए गए श्रेणी आईडी की उत्पाद सूची प्राप्त करें


14

मुझे किसी श्रेणी श्रेणी (श्रेणी का नाम नहीं) के लिए सभी उत्पादों की सूची प्राप्त करने का सही तरीका नहीं मिला।

श्रेणियों की सूची प्राप्त करने के लिए मैं जिस कोड का उपयोग कर रहा हूं वह निम्नलिखित है, यह ठीक काम करता है:

$args = array(
           'orderby'    => $orderby,
           'order'      => $order,
           'hide_empty' => 0,
           'include'    => $ids,
           'parent'    => 0,
     ); 

$categories = get_terms( 'product_cat', $args );

हालाँकि, अब दी गई श्रेणी की आईडी (47 का कहना है) के लिए, मुझे इसके संबंधित उत्पादों को प्राप्त करने का तरीका नहीं मिला। मैंने निम्नलिखित तरीका आजमाया:

$args = array( 
    'posts_per_page' => 5,
    'offset'=> 1,
    'category' => 47
 );

$products = get_posts( $args );
echo var_dump($products);

$productsसरणी रिटर्न को हमेशा डिबग करना 0 जो कि गलत है क्योंकि मुझे पता है कि आईडी 47 के साथ श्रेणी के तहत कुछ उत्पाद हैं। कोई भी विचार मेरे कोड को कैसे ठीक किया जाए?


1
categoryया product_category?
FUXIA

जवाबों:


19

मुझे संदेह है कि मुख्य समस्या यह है कि आपको WP_Queryऑब्जेक्ट का उपयोग करने के बजाय होना चाहिए get_posts()। डिफ़ॉल्ट रूप से बाद में केवल postउत्पादों के पोस्ट_टाइप के साथ आइटम लौटाता है ,

तो आईडी 26 के साथ एक श्रेणी दी गई है, निम्नलिखित कोड यह उत्पाद लौटाएगा (WooCommerce 3+):

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        ),
        array(
            'taxonomy'      => 'product_visibility',
            'field'         => 'slug',
            'terms'         => 'exclude-from-catalog', // Possibly 'exclude-from-search' too
            'operator'      => 'NOT IN'
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

WooCommerce के पुराने संस्करणों में दृश्यता को मेटा फ़ील्ड के रूप में संग्रहीत किया गया था, इसलिए कोड होगा:

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'meta_query'            => array(
        array(
            'key'           => '_visibility',
            'value'         => array('catalog', 'visible'),
            'compare'       => 'IN'
        )
    ),
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

यहां हम केवल दृश्यमान उत्पाद, 12 प्रति पृष्ठ लौटा रहे हैं।

अधिक जानकारी के लिए http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters के माध्यम से एक नज़र डालें कि श्रेणी लक्ष्यीकरण कैसे काम करती है - यह अक्सर ID की तुलना में स्लग द्वारा प्राप्त करने के लिए अधिक उपयोगी है!


समाधान काम किया। अच्छी व्याख्या।
कामेश जंगी

1
वोकॉमर्स 3 के अनुसार, दृश्यता को मेटा के बजाय टैक्सोनॉमी में बदल दिया जाता है, इसलिए आपको मेटा_क्वरी को टैक्स_क्वेरी में बदलना होगा। Wordpress.stackexchange.com/a/262628/37355 देखें ।
जर्णन

आपके बारे get_posts()में निष्कर्ष गलत है। आप बदल सकते हैं new WP_Query($args)के साथ get_posts($args)अपने कोड में है और यह काम करेंगे।
ब्योर्न

3
$products = wc_get_products(array(
    'category' => array('your-category-slug'),
));

ओपी ने विशेष रूप से श्रेणी आईडी का उपयोग करके उत्पादों को प्राप्त करने के लिए कहा, हालांकि, इससे मुझे मदद मिली, इसलिए मैं किसी भी तरह से उत्थान करूंगा। बस ध्यान रखें कि यह मूल प्रश्न का उत्तर नहीं देता है
dKen

2

आईडी या नाम या स्लग द्वारा श्रेणी (श्रेणी-स्लग-नाम) बदलें

<?php

$args = array( 'post_type' => 'product', 'stock' => 1, 'posts_per_page' => 2,'product_cat' => 'category-slug-name', 'orderby' =>'date','order' => 'ASC' );
  $loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product; 
?>
Within loop we can fetch Product image, title, description, price etc. 

<?phpendwhile;wp_reset_query(); ?>

2

थोड़ा देर से, लेकिन चीजों को स्पष्ट करना और एक क्लीनर जवाब प्रदान करना चाहेंगे। उपयोगकर्ता @ benz001 ने एक संभावित मान्य उत्तर दिया, लेकिन कुछ गलत कहा: get_postsकिसी भी प्रकार के पोस्ट-प्रकार को लौटाता है posts, जैसे पोस्ट-प्रकार को डिफ़ॉल्ट करता है WP_Query। दोनों के बीच वास्तविक अंतरों को आश्चर्यजनक रूप से यहाँ समझाया गया है ।

तथ्य यह है कि, ओपी केवल कुछ मापदंडों को $argsसरणी में याद कर रहा था :

  • पद-प्रकार की परिभाषा वह खोज रहा है:

        'post_type'             => 'product',
  • और खोज क्वेरी के "टैक्सोनॉमी पार्ट" का संशोधन:

        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'terms' => 26,
                'operator' => 'IN',
            )
        )

इस तरह आपकी अगली पंक्तियाँ

$products = new WP_Query($args);
var_dump($products);

आपको आवश्यक उत्पाद दिखाएगा :)

@ Benz001 द्वारा दिखाए गए अन्य सभी अतिरिक्त पैरामीटर निश्चित रूप से मान्य हैं, लेकिन ओपी द्वारा अनुरोध नहीं किया गया है, इसलिए मैंने उन्हें इस उत्तर में पीछे छोड़ने का फैसला किया।

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