WooCommerce获取产品标签数组

21

我想要将WooCommerce产品的产品标签获取到一个数组中,以便通过if/else逻辑(in_array)进行操作,但我的代码不起作用:

<?php 

$aromacheck = array() ; 
$aromacheck = get_terms( 'product_tag') ; 
// echo $aromacheck

?>

当回显 $aromacheck 时,我只得到一个空数组,尽管产品标签存在——在文章类中也可见。

如何正确地将产品标签以一个数组的形式获取?

解决方案(感谢 Noman 和 nevius):

/* Get the product tag */
$terms = get_the_terms( $post->ID, 'product_tag' );

$aromacheck = array();
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
    foreach ( $terms as $term ) {
        $aromacheck[] = $term->slug;
    }
}

/* Check if it is existing in the array to output some value */

if (in_array ( "value", $aromacheck ) ) { 
   echo "I have the value";
} 

它确实返回一个对象数组。你不能使用echo输出一个对象数组... - rnevius
这真的很有用。 - Jon Ewing
1
嗨@Gas,你能把解决方案移到答案里吗?如果有必要的话,甚至可以将其标记为正确答案。现在,在问题中间有一个解决方案很令人困惑。 - brasofilo
3个回答

27

你需要遍历数组并创建一个单独的数组来检查in_array,因为get_terms返回带有数组的object

$terms = get_terms( 'product_tag' );
$term_array = array();
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
    foreach ( $terms as $term ) {
        $term_array[] = $term->name;
    }
}

循环数组之后,你可以使用 in_array() 函数。
假设 $term_array 包含标签 black

if(in_array('black',$term_array)) {
 echo 'black exists';
} else { 
echo 'not exists';
}

谢谢,它可以用来检查数组并获取值(我太傻了,用了echo...),但不幸的是它列出了所有标签,而不仅仅是用于产品本身的标签。可以重写代码只列出特定产品标签吗? - Gas
1
你从未要求过这个...如果你需要针对特定产品执行此操作,可以使用 get_the_terms() - rnevius
2
谢谢,就是这样了,我加入了 $terms = get_the_terms( $post->ID, 'product_tag' );,现在它运行得很好!我编辑了我的帖子,包括完整的解决方案。 - Gas
好的,抱歉我忘记了。感谢你的帮助! - Gas

4
global $product;
$tags = $product->tag_ids;
foreach($tags as $tag) {
   echo get_term($tag)->name;
}

2
请添加一些描述以解释您的代码。 - Ignacio

3

我必须将args数组解析为get_terms函数。也许这对其他人有帮助。

$args = array(
    'number'     => $number,
    'orderby'    => $orderby,
    'order'      => $order,
    'hide_empty' => $hide_empty,
    'include'    => $ids
);

$product_tags = get_terms( 'product_tag', $args );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,