【问题标题】:Display related products filtered by product attribute in Woocommerce在 Woocommerce 中显示按产品属性过滤的相关产品
【发布时间】:2018-11-22 22:28:49
【问题描述】:

我想显示按属性过滤的相关产品,它应该等于页面 cookie 中的值。

我将related.php 模板编辑成这样:

<?php woocommerce_product_loop_start(); ?>

<?php foreach ( $related_products as $related_product ) :
    // extract attribute filter_location in an array
    $results = $related_product->get_attribute( 'pa_filter_location' );

    // extract value from cookies filter_location
    $fl = $_COOKIE['filter_location'];

    foreach ( $results as $key ) {
        if( $key == $fl ) {
            $post_object = get_post( $related_product->get_id() );

            setup_postdata( $GLOBALS['post'] =& $post_object );

            wc_get_template_part( 'content', 'product' );
        }
    }

endforeach; ?>

<?php woocommerce_product_loop_end(); ?>

但我得到错误:警告:

为 foreach() 提供的参数无效

可能是什么问题?

【问题讨论】:

    标签: php wordpress woocommerce product custom-taxonomy


    【解决方案1】:

    问题出在这一行:

    $results = $related_product->get_attribute( 'pa_filter_location' );
    

    这不是给出一个数组,而是一个逗号分隔的术语字符串。所以你不能以这种方式在你的 foreach 循环中使用它。

    改为使用以下重新访问的代码:

    <?php woocommerce_product_loop_start(); ?>
    
    <?php foreach ( $related_products as $related_product ) :
        // extract attribute filter_location in an array
        $terms = $related_product->get_attribute( 'pa_filter_location' );
    
        // Set each term in an array
        $terms = ! empty($terms) ? (array) explode(', ', $terms) : array();
    
        foreach ( $terms as $term ) {
            if( isset($_COOKIE['filter_location']) && $term == $_COOKIE['filter_location'] ) {
                $post_object = get_post( $related_product->get_id() );
    
                setup_postdata( $GLOBALS['post'] =& $post_object );
    
                wc_get_template_part( 'content', 'product' );
            }
        }
    
    endforeach; ?>
    
    <?php woocommerce_product_loop_end(); ?>
    

    它应该可以彻底解决您与 foreach 循环相关的错误。

    【讨论】:

    • 这已经修复了与 foreach 循环相关的错误。但是脚本没有返回任何结果,$term 和 $related product 之间缺少链接。
    • 我可以毫无问题地显示 $_COOKIE['filter_location'] 的值。问题是我试图显示 $related_products,但是在我们提取 $terms 数组中的属性后,指向 $related_products 的链接丢失了。
    • @mywebhostel 我再说一遍:我在这里的回答只是解决了您的问题问题,即 为 foreach() 提供的参数无效 并且应该被接受,因为它解决了这个特定问题。现在,如果您还有其他问题要问,最好提出一个新问题,提供新的必要细节以获得帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多