<?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.php的影响。我想有较高的条件。在单一产品页面上对此有任何解决方案吗?

评论

可能是因为您的第一个语句缺少结尾)吗?应该是if(is_product_category('audio'))

不错,但是不是。 is_product_category似乎不适用于single-product.php

#1 楼

在这种情况下,我认为get_categories()并不是您的最佳选择,因为它返回一个字符串,其中所有类别均列为锚标记,适合显示,但不适用于在代码中找出类别。好的,所以您需要做的第一件事就是获取当前页面的产品/帖子对象(如果尚未使用的话):

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';
}


希望这就是您想要的,并回答了您的问题。

#2 楼

在这种情况下,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';
}


评论


超级简单有效的方法来做到这一点。我认为这是更好的答案。

–特雷弗
17年5月25日在2:57

我喜欢这个,因为它很短。但是我做了{返回;}

– Eoin
18年1月31日在21:49



#3 楼

值得注意的是,假设您想对每个类别都执行相同的操作,则可以通过调用数组来遍历选项列表,而不必通过大量的elseif检查使代码混乱。

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

// Do stuff here

else :

// Do some other stuff

endif;


评论


我认为应该将此答案作为编辑添加到Milo的答案中。

– cybmeta
15年2月18日在16:41

#4 楼

这很古老,但以防万一人们仍然将WooThemes作为一种简单的解决方案: br />这里是文档的链接:https://docs.woothemes.com/document/remov-product-content-based-on-category/

#5 楼

我将使用WC_Product类的get_categories()函数。

您可以在此处找到文档的链接。

基本上在页面循环中调用该函数返回与产品关联的类别。

评论


我无法对此进行编码。我不知道如何使它工作。有人请说明一下。我尽力了。我应该用get_categories()代替它吗?

– Alex
2012-12-13在16:04



如果您位于产品类别页面上,则@Alex is_product_category()函数将返回TRUE。不是产品类别。我现在正在处理一个项目,但是稍后我将尝试为您提供一个代码片段。

–史蒂夫
2012-12-13 17:55

谢谢,史蒂文(Steven)花时间编码这个小片段。非常感谢。

– Alex
2012-12-13 17:56