如何通过Foreach循环显示每个产品的术语?(WooCommerce)

时间:2020-10-05 作者:davidb3rn

这是我当前通过woocommerce显示产品的循环。当我打印r($category\\u array)时;它返回数组,但当我尝试使用函数调用它以便可以对数据执行我想要的操作时,它会生成,并且在循环后不会显示整个屏幕。也许是我的功用错了?woocommerce和wp\\U循环仍然非常新。非常感谢。

            <?php
            // WP_Query arguments
            $args = array(
                \'p\'                      => \'product\',
                \'post_type\'              => array( \'product\' ),
                \'order\'                  => \'ASC\',
                \'post_per_page\' => 20,
            );

            // The Query
            $query = new WP_Query( $args );

            // The Loop
            if ( $query->have_posts() ) {
                while ( $query->have_posts() ) {
                    $query->the_post();
                    function filter_categories($categories) {
                            foreach ($categories as $category) {
                                echo $category->name;
                            }
                    }


                    ?>
                    <div class="row">
                        <div class="col-2">
                            <?php echo the_post_thumbnail(get_the_ID(), \'thumbnail\'); ?>
                        </div>
                        <div class="col-7">
                            <a href="<?= get_permalink(); ?>"><?= the_title()?></a>
                            <br/>
                            <?php
                            $category_array = get_the_terms(get_the_ID(), \'product_cat\');
                            filter_categories($category_array);
                            ?>
                        </div>
                        <div class="col-3 text-right ">Price</div>
                    </div>
                    <?php
                }
            } else {
                // no posts found
            }

            // Restore original Post Data
            wp_reset_postdata();
            ?>

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

问题在于:

                while ( $query->have_posts() ) {
                    $query->the_post();
                    function filter_categories($categories) {
                            foreach ($categories as $category) {
                                echo $category->name;
                            }
                    }
您不应该在循环中声明函数。每次它在filter_categories 再次声明函数,但只能声明命名函数once, 所以第二轮就崩溃了,一切都停止了。

如果查看PHP错误日志,应该会看到关于重新声明的错误消息filter_categories 确认这一点。

相关推荐

如何使用Get_the_Terms()显示多个术语?

我使用以下代码在单个帖子的元数据中显示自定义分类法,但现在我需要显示多个用逗号分隔的术语,而不是只显示一个术语。只是不知道怎么做。有没有一种方法可以使用wp_sprintf_l 结合get_the_terms() 要做到这一点?或者其他方式?以下是我当前的功能:$sources = get_the_terms( $post->ID, \'source\' ); if ( ! empty( $sources ) && ! is_wp_error( $sources ) ){&#