Woocommerce 产品循环与产品属性过滤
Woocommerce products loop with product attribute filtering
不幸的是,作为 woocommerce 短代码,不支持按产品属性过滤。我正在尝试将这个简单的产品循环脚本修改为 return 仅基于 url 参数的产品(例如:mysite.com/?location=paris
)。因为它通常在产品存档页面中。
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 12
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
感谢任何帮助。
这可以通过在自定义简码中嵌入 [products] Woocommerce 简码来完成,该简码将获取产品属性查询字符串以过滤显示的产品。
Woocommerce 产品属性分类法全部由 "pa_" + 属性 slug 开始。所以你需要这样设置你的URL:mysite.com/?pa_location=paris
.
所以这是一个允许产品属性过滤的功能性自定义简码示例:
function get_products_by_attribute( $atts ) {
// Shortcode attributes
$atts = shortcode_atts( array(
'columns' => '4', // Product ID
'attribute' => '',
'terms' => '',
'$orderby' => 'title',
), $atts, 'products_attr' );
$queryString = $_SERVER['QUERY_STRING'];
if( $queryString ){
parse_str($queryString, $results);
foreach ( $results as $key => $values ) {
if( substr( $key, 0, 3 ) === 'pa_' ) {
$attribute = str_replace( 'pa_', '', $key );
$terms = $values;
$filtering_attribute = "attribute='$attribute' terms='$terms'";
break;
}
}
}
$filter = isset($filtering_attribute) ? $filtering_attribute : '';
$cols = $atts['columns'];
$ordby = $atts['$orderby'];
return do_shortcode("[products columns='$cols' $filter orderby='$ordby']");
}
add_shortcode('products_attr', 'get_products_by_attribute');
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
用法示例:
您的 Url 会像:mysite.com/?pa_location=paris
1) 在wordpress文本编辑器中的一个页面或者post:
[products_attr columns='3' orderby='rand']
2) 在 php 文件的 html 代码中:
<?php echo do_shortcode("[products_attr columns='3' orderby='rand']"); ?>
3) 在php代码中插入:
echo do_shortcode("[products_attr columns='3' orderby='rand']");
您可以自定义它,将 any available arguments from Woocommerce shorcodes 添加到代码中
不幸的是,作为 woocommerce 短代码,不支持按产品属性过滤。我正在尝试将这个简单的产品循环脚本修改为 return 仅基于 url 参数的产品(例如:mysite.com/?location=paris
)。因为它通常在产品存档页面中。
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 12
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
感谢任何帮助。
这可以通过在自定义简码中嵌入 [products] Woocommerce 简码来完成,该简码将获取产品属性查询字符串以过滤显示的产品。
Woocommerce 产品属性分类法全部由 "pa_" + 属性 slug 开始。所以你需要这样设置你的URL:mysite.com/?pa_location=paris
.
所以这是一个允许产品属性过滤的功能性自定义简码示例:
function get_products_by_attribute( $atts ) {
// Shortcode attributes
$atts = shortcode_atts( array(
'columns' => '4', // Product ID
'attribute' => '',
'terms' => '',
'$orderby' => 'title',
), $atts, 'products_attr' );
$queryString = $_SERVER['QUERY_STRING'];
if( $queryString ){
parse_str($queryString, $results);
foreach ( $results as $key => $values ) {
if( substr( $key, 0, 3 ) === 'pa_' ) {
$attribute = str_replace( 'pa_', '', $key );
$terms = $values;
$filtering_attribute = "attribute='$attribute' terms='$terms'";
break;
}
}
}
$filter = isset($filtering_attribute) ? $filtering_attribute : '';
$cols = $atts['columns'];
$ordby = $atts['$orderby'];
return do_shortcode("[products columns='$cols' $filter orderby='$ordby']");
}
add_shortcode('products_attr', 'get_products_by_attribute');
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
用法示例:
您的 Url 会像:mysite.com/?pa_location=paris
1) 在wordpress文本编辑器中的一个页面或者post:
[products_attr columns='3' orderby='rand']
2) 在 php 文件的 html 代码中:
<?php echo do_shortcode("[products_attr columns='3' orderby='rand']"); ?>
3) 在php代码中插入:
echo do_shortcode("[products_attr columns='3' orderby='rand']");
您可以自定义它,将 any available arguments from Woocommerce shorcodes 添加到代码中