จะตรวจสอบได้อย่างไรว่าผลิตภัณฑ์นั้นอยู่ในหมวดหมู่ที่แน่นอนใน single-product.php ใน Woocommerce หรือไม่?


25

ฉันจะตรวจสอบได้อย่างไรว่าผลิตภัณฑ์อยู่ในหมวดหมู่ผลิตภัณฑ์บางอย่างในผลิตภัณฑ์เดียวหรือไม่?

<?php if (is_product_category('audio')) {
           echo 'In audio';
               woocommerce_get_template_part( 'content', 'single-product' );

      } elseif (is_product_category('elektro')) {

            echo 'In elektro';
            woocommerce_get_template_part( 'content', 'single-product' );
         } else {
            echo 'some blabla'; }  ?>

is_product_category ( 'กระสุน')ไม่ได้มีผลกระทบต่อเดียว product.php ฉันต้องการที่จะมีเงื่อนไขด้านบน วิธีแก้ปัญหานี้ในหน้าผลิตภัณฑ์เดียว?


อาจเป็นเพราะคำแถลงแรกของคุณไม่มีการปิด)? มันควรจะเป็นif (is_product_category('audio'))
stealthyninja

จับดี แต่นั่นไม่ใช่ is_product_category ดูเหมือนจะไม่ทำงานบน single-product.php
Alex

คำตอบ:


28

ฉันไม่คิดว่าget_categories()เป็นตัวเลือกที่ดีที่สุดสำหรับคุณในกรณีนี้เพราะมันจะส่งคืนสตริงที่มีหมวดหมู่ทั้งหมดที่ระบุไว้เป็นแท็ก anchor, ดีสำหรับการแสดง แต่ไม่ดีสำหรับการค้นหาในโค้ดว่าประเภทคืออะไร ตกลงดังนั้นสิ่งแรกที่คุณต้องทำคือหยิบวัตถุผลิตภัณฑ์ / โพสต์สำหรับหน้าปัจจุบันหากคุณยังไม่มี:

global $post;

จากนั้นคุณจะได้รับออบเจคคำประเภทผลิตภัณฑ์ (หมวดหมู่) สำหรับผลิตภัณฑ์ ที่นี่ฉันเปลี่ยนวัตถุคำประเภทเป็นอาร์เรย์ชื่อง่าย ๆ$categoriesเพื่อให้ง่ายขึ้นเพื่อดูว่าตัวบุ้งได้รับมอบหมาย โปรดทราบว่าสิ่งนี้จะส่งคืนหมวดหมู่ทั้งหมดที่กำหนดให้กับผลิตภัณฑ์ไม่ใช่เฉพาะในหน้าปัจจุบันเช่นหากเราอยู่ใน/shop/audio/funzo/:

$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

จากนั้นเราเพียงแค่ต้องตรวจสอบว่าหมวดหมู่อยู่ในรายการ:

if ( in_array( 'audio', $categories ) ) {  // do something

วางมันทั้งหมดเข้าด้วยกัน:

<?php
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

if ( in_array( 'audio', $categories ) ) {
  echo 'In audio';
  woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
  echo 'In elektro';
  woocommerce_get_template_part( 'content', 'single-product' );
} else {
  echo 'some blabla';
}

หวังว่านี่คือสิ่งที่คุณกำลังมองหาและตอบคำถามของคุณ


37

has_term ควรทำงานในกรณีนี้:

if ( has_term( 'audio', 'product_cat' ) ) {

       echo 'In audio';
       woocommerce_get_template_part( 'content', 'single-product' );

} elseif ( has_term( 'elektro', 'product_cat' ) ) {

       echo 'In elektro';
       woocommerce_get_template_part( 'content', 'single-product' );

} else {
       echo 'some blabla';
}

สุดยอดวิธีที่ง่ายและมีประสิทธิภาพในการทำเช่นนี้ ฉันคิดว่านี่เป็นคำตอบที่ดีกว่า
เทรเวอร์

ฉันชอบสิ่งนี้เพราะมันสั้น อย่างไรก็ตามฉันทำได้if { thing; return;}
Eoin

8

เป็นที่น่าสังเกตว่าคุณสามารถทำรายการตัวเลือกด้วยการเรียกใช้อาร์เรย์แทนที่จะต้องถ่วงโค้ดของคุณด้วยการตรวจสอบอื่น ๆ มากมายโดยสมมติว่าคุณต้องการทำสิ่งเดียวกันกับแต่ละประเภทนั่นคือ

if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :

// Do stuff here

else :

// Do some other stuff

endif;

ฉันคิดว่าคำตอบนี้ควรได้รับการเพิ่มเป็นคำตอบของไมโล
cybmeta

4

นี่เป็นรุ่นเก่า แต่ในกรณีที่ผู้คนยังคงมองหา WooThemes เป็นวิธีง่ายๆ:

if ( is_product() && has_term( 'your_category', 'product_cat' ) ) {
    //do code
}

* เปลี่ยน 'your_category' เป็นสิ่งที่คุณใช้

นี่คือลิงค์ไปยังเอกสาร: https://docs.woothemes.com/document/remov-product-content-based-on-category/


0

ฉันจะดูการใช้get_categories()ฟังก์ชันของคลาส WC_Product

คุณสามารถค้นหาเชื่อมโยงไปยังเอกสารที่นี่

โดยทั่วไปภายในลูปของหน้าเรียกใช้ฟังก์ชันเพื่อส่งคืนหมวดหมู่ที่เกี่ยวข้องกับผลิตภัณฑ์


ฉันไม่สามารถรหัสนี้ ฉันไม่มีเงื่อนงำที่จะทำให้มันใช้งานได้ บางคนโปรดอธิบายสิ่งนี้ ฉันพยายามทำให้ดีที่สุด ฉันควรแทนที่สิ่งนี้ด้วย get_categories () หรือไม่
อเล็กซ์

@Alex ฟังก์ชัน is_product_category () ส่งคืน TRUE หากคุณอยู่ในหน้าหมวดหมู่ผลิตภัณฑ์ ไม่ใช่หมวดหมู่ของผลิตภัณฑ์ ตอนนี้ฉันกำลังมุ่งหน้าไปที่โครงการ แต่ฉันจะพยายามเอาข้อมูลโค้ดให้คุณในภายหลัง
Steve

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