Php 在电子商务中显示按产品属性筛选的相关产品

Php 在电子商务中显示按产品属性筛选的相关产品,php,wordpress,woocommerce,product,custom-taxonomy,Php,Wordpress,Woocommerce,Product,Custom Taxonomy,我想显示由属性过滤的相关产品,该属性应等于页面cookies中的值 我编辑related.php模板如下所示: <?php woocommerce_product_loop_start(); ?> <?php foreach ( $related_products as $related_product ) : // extract attribute filter_location in an array $results = $related_produc

我想显示由属性过滤的相关产品,该属性应等于页面cookies中的值

我编辑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()提供的参数无效。


有什么问题吗

问题来自这一行:

$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之间缺少链接。我可以毫无问题地显示$\u COOKIE['filter\u location']的值。问题是我试图显示$related_产品,但在我们提取$terms数组中的属性后,$related_产品的链接丢失。@mywebhostel我重复:我在这里的回答只是解决您的问题,它是为foreach()提供的无效参数,应该被接受,因为它解决了这个特定问题。现在如果你有其他问题要问,最好问一个新问题,提供获得帮助所需的新细节。