我的代码是:
<?php
//Get posts by the arguments saved in the $args array
$vendor_postlist = get_posts( $args );
// Loop the list of posts obtained and for each post extract its product category and save it in an array
foreach ( $vendor_postlist as $post ){
$terms = get_the_terms( $post->ID, \'product_cat\' );
$categories = array();
foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}
unset( $term );
}
unset( $post );
print_r($categories);
?>
一点背景信息:我正在尝试创建一个短代码,它将在表中显示(Woocommerce)产品的列表。因此$args存储诸如帖子作者、帖子类型等参数,其中一些参数是从shortcode属性中提取的。
问题似乎在第二个foreach循环中:
foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}
回声仅用于检查此时是否正确显示了应显示的术语。事实上,显示的术语列表是正确的。
例如:水果、蔬菜、鲜花
但是,当我使用print\\r($categories)时,它应该显示一个包含三个类别的数组,只有最后一个类别似乎存储在数组中:数组([0]=>Flowers)
我需要为每个类别生成一个表,这就是我试图创建类别数组的原因,但我仍停留在这一点上,不知道会出什么问题。
如果有人知道,请告诉我。我很乐意解决这个问题。非常感谢。
最合适的回答,由SO网友:Anwer AR 整理而成
请尝试此代码。是否有必要在foreach中取消设置该数组?取消设置内部循环将删除以前的数组值。
<?php
//Get posts by the arguments saved in the $args array
$vendor_postlist = get_posts( $args );
$categories = array();
// Loop the list of posts obt.....
foreach ( $vendor_postlist as $post ){
$terms = get_the_terms( $post->ID, \'product_cat\' );
foreach ( $terms as $term ) {
$categories[] = $term->name;
echo $term->name;
}
}
print_r($categories);
?>