在 Woocommerce 中显示按产品属性过滤的相关产品
Display related products filtered by product attribute in Woocommerce
我想显示按属性过滤的相关产品,该属性应等于页面 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(); ?>
但我收到错误:警告:
Invalid argument supplied for 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 循环相关的错误。
我想显示按属性过滤的相关产品,该属性应等于页面 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(); ?>
但我收到错误:警告:
Invalid argument supplied for 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 循环相关的错误。