问题描述

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