問題描述
如何在世界上檢查產品是否在 single-product.php 上的某個產品類別?
<?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(‘slug’) 對 single-product.php 沒有影響。我想要有上限的條件。在 single-product 頁面上的任何解決方案?
最佳解決方案
在這種情況下,我不認為 get_categories()是最好的選擇,因為它返回一個字符串,其中列出了所有類別作為錨標籤的類別,但不是很好地用於顯示類別。好的,所以你需要做的第一件事是抓住當前頁面的 product /post 對象,如果你還沒有的話:
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';
}
希望這是您正在尋找並回答您的問題。
次佳解決方案
在這種情況下,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';
}
第三種解決方案
值得注意的是,您可以通過調用數組來查看選項列表,而不必用大量的 elseif 檢查來混淆代碼,假設您要對每個類別執行相同的操作。
if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :
// Do stuff here
else :
// Do some other stuff
endif;
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。