แสดงผลิตภัณฑ์ทั้งหมดตามหมวดหมู่ด้วย WooCommerce


13

ด้วย WooCommerce ฉันต้องการแสดงหมวดหมู่ทั้งหมดในร้านค้าโดยใช้หัวเรื่องด้วยผลิตภัณฑ์ทั้งหมดในรายการด้านล่างในรายการที่ไม่ได้เรียงลำดับ เป็นไปได้ที่จะทำ? ฉันเห็นบางสิ่งที่จะให้ฉันแสดงรายการหมวดหมู่หรือรายการผลิตภัณฑ์สำหรับหมวดหมู่เฉพาะ แต่ไม่มีสิ่งใดที่จะวนซ้ำทุกอย่างที่ฉันอธิบาย

นี่คือสิ่งที่ฉันกำลังใช้เพื่อแสดงรายการหมวดหมู่ทั้งหมด:

<?php
$args = array(
    'number'     => $number,
    'orderby'    => $orderby,
    'order'      => $order,
    'hide_empty' => $hide_empty,
    'include'    => $ids
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
    foreach ( $product_categories as $product_category ) {
        echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</h4>';
    }
}
?> 

คุณเพียงแค่ต้องวนลูป ข้างในของคุณforeach()วิ่งใหม่WP_Query()เพื่อคว้าผลิตภัณฑ์ทั้งหมดในระยะนั้น .. จากนั้นวนซ้ำสิ่งเหล่านั้น
helgatheviking

ฉันคิดว่าฉันเข้าใจวิธีการทำเช่นนี้ แต่ฉันไม่สามารถค้นหารายการสินค้าตามหมวดหมู่ด้วย PHP (สิ่งที่ฉันสามารถค้นหาได้คือรหัสย่อไร้สาระ) หากคุณสามารถแสดงให้ฉันเห็นว่ารหัสนั้นเป็นอย่างไรฉันควรจะสามารถหาส่วนที่เหลือได้
JacobTheDev

2
คุณไม่จำเป็นต้องย่อให้รายชื่อผลิตภัณฑ์ตามหมวดหมู่เป็นเพียงแบบสอบถามภาษี
helgatheviking

ฉันรู้ว่าฉันไม่ต้องการรหัสย่อฉันบอกว่านั่นคือทั้งหมดที่ฉันสามารถหาได้ซึ่งไม่ช่วยเหลือ ลิงค์ที่คุณให้ไว้ดูสดใสฉันจะให้มันในวันพรุ่งนี้และรายงานกลับมาขอบคุณ
JacobTheDev

1
ตกลง. หากคุณยังคงติดอยู่ให้แก้ไขคำถามของคุณด้วยการเข้ารหัสใหม่และฉันจะตรวจสอบ
helgatheviking

คำตอบ:


25

คิดออก! รหัสด้านล่างแสดงรายการหมวดหมู่ทั้งหมดและโพสต์แต่ละหมวดหมู่โดยอัตโนมัติ!

$args = array(
    'number'     => $number,
    'orderby'    => 'title',
    'order'      => 'ASC',
    'hide_empty' => $hide_empty,
    'include'    => $ids
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
    foreach ( $product_categories as $product_category ) {
        echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</a></h4>';
        $args = array(
            'posts_per_page' => -1,
            'tax_query' => array(
                'relation' => 'AND',
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    // 'terms' => 'white-wines'
                    'terms' => $product_category->slug
                )
            ),
            'post_type' => 'product',
            'orderby' => 'title,'
        );
        $products = new WP_Query( $args );
        echo "<ul>";
        while ( $products->have_posts() ) {
            $products->the_post();
            ?>
                <li>
                    <a href="<?php the_permalink(); ?>">
                        <?php the_title(); ?>
                    </a>
                </li>
            <?php
        }
        echo "</ul>";
    }
}

ดี หากคุณต้องการคลั่งไคล้จริงๆคุณอาจต้องมองหาTransients API ... ซึ่งจะช่วยป้องกันไม่ให้คุณเรียกใช้คิวรีจำนวนมากในทุก ๆ หน้าโหลด
helgatheviking

ฉันจะรับภาพขนาดย่อสำหรับแต่ละประเภทได้อย่างไร
Alyssa Reyes

@AlyssaReyes หมวดหมู่ไม่มีภาพขนาดย่อ คุณตั้งค่าฟิลด์ที่กำหนดเองสำหรับหมวดหมู่ของคุณสำหรับสิ่งนี้หรือไม่? คุณช่วยโพสต์สิ่งนี้ด้วยคำถามใหม่พร้อมรายละเอียดเพิ่มเติมและส่งลิงก์ให้ฉันเพื่อให้ฉันเข้าใจได้ดีขึ้นหรือไม่
JacobTheDev

1
ขอบคุณชายคุณช่วยฉันสักพักและตั้งฉันไปในทิศทางที่ถูกต้อง วิธีเดียวที่ฉันสามารถปรับปรุงคำตอบนี้คือการใช้คลาสคิวรีแบบบิวด์อินของ WooCommerce: WC_Product_QueryแทนWP_Queryแล้วใช้foreachลูปแทนการwhileวนซ้ำ ด้วยเหตุผลว่าทำไมลองดูที่เอกสารประกอบ Github สำหรับการสืบค้น: github.com/woocommerce/woocommerce/wiki/…แต่ส่วนสำคัญคือ:> "แบบสอบถาม WP_Queries ที่กำหนดเองมีแนวโน้มที่จะทำลายรหัสของคุณใน WooCommerce รุ่นต่อไปในอนาคต ย้ายไปยังตารางที่กำหนดเองเพื่อประสิทธิภาพที่ดีขึ้น "
UncaughtTypeError
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.