问题描述
如何在世界上检查产品是否在 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。