我正在尝试创建一个带有Foreach循环的数组,但该数组只存储最后一项

时间:2017-02-10 作者:Ami

我的代码是:

<?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)

我需要为每个类别生成一个表,这就是我试图创建类别数组的原因,但我仍停留在这一点上,不知道会出什么问题。

如果有人知道,请告诉我。我很乐意解决这个问题。非常感谢。

1 个回复
最合适的回答,由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);
    ?>

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请