รับรายการผลิตภัณฑ์ของรหัสหมวดหมู่ที่กำหนด


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 ซึ่งผิดเนื่องจากฉันรู้ว่ามีบางผลิตภัณฑ์ภายใต้หมวดหมู่ที่มี ID 47 แนวคิดใดบ้างที่จะแก้ไขรหัสของฉันได้อย่างไร


1
categoryหรือproduct_category?
fuxia

คำตอบ:


19

ฉันสงสัยว่าปัญหาหลักคือการที่คุณควรจะใช้วัตถุมากกว่าWP_Query get_posts()ค่าเริ่มต้นในภายหลังจะส่งคืนรายการที่มี post_type เท่านั้นpostไม่ใช่ผลิตภัณฑ์

เมื่อได้รับหมวดหมู่ที่มี ID 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!


โซลูชันทำงานได้ คำอธิบายที่ดี
Kamesh Jungi

1
ตั้งแต่ Woocommerce 3 การมองเห็นจะเปลี่ยนเป็น taxonomy แทนที่จะเป็น meta ดังนั้นคุณต้องเปลี่ยน meta_query เป็น tax_query ดูwordpress.stackexchange.com/a/262628/37355
jarnoan

ข้อสรุปของคุณเกี่ยวกับget_posts()ผิด คุณสามารถแทนที่new WP_Query($args)ด้วยget_posts($args)รหัสของคุณและมันจะทำงาน
Bjorn

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

OP ขอเฉพาะการรับผลิตภัณฑ์โดยใช้รหัสหมวดหมู่อย่างไรก็ตามสิ่งนี้ช่วยฉันได้ดังนั้นฉันจะ upvote แต่อย่างใด เพิ่งทราบว่ามันไม่ได้ตอบคำถามเดิม
dKen

2

เปลี่ยนหมวดหมู่ (category-slug-name) ตามรหัสหรือชื่อหรือกระสุน

<?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ความแตกต่างที่แท้จริงระหว่างคนทั้งสองมีการอธิบายอย่างน่าพิศวงที่นี่

ความจริงก็คือ OP ได้หายไปเพียงบางพารามิเตอร์ใน$argsอาร์เรย์:

  • คำจำกัดความของโพสต์ประเภทที่เขากำลังค้นหา:

        'post_type'             => 'product',
  • และการปรับเปลี่ยนส่วน "taxonomy" ของคำค้นหา:

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

วิธีนี้จะเป็นบรรทัดถัดไปของคุณ

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

จะแสดงผลิตภัณฑ์ที่จำเป็นให้คุณ :)

พารามิเตอร์เพิ่มเติมอื่น ๆ ทั้งหมดที่แสดงโดย @ benz001 นั้นถูกต้องแน่นอน แต่ไม่ได้รับการร้องขอจาก OP ดังนั้นฉันตัดสินใจทิ้งไว้ในคำตอบนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.