我正在尝试按照平均评级对Woocommerce中的产品类别页面上的产品进行排序。
我找到了将评级放在产品页面上的代码,将代码添加到functions.php(见下文),但选择评级没有做任何事情。
我需要调用(或创建)才能使其工作的meta_key是什么?
add_filter('woocommerce_get_catalog_ordering_args','custom_woocommerce_get_catalog_ordering_args');
function custom_woocommerce_get_catalog_ordering_args( $args ) {
if (isset($_SESSION['orderby'])) {
switch ($_SESSION['orderby']) :
case 'date_asc' :
$args['orderby'] = 'date';
$args['order'] = 'asc';
$args['meta_key'] = '';
break;
case 'price_desc' :
$args['orderby'] = 'meta_value_num';
$args['order'] = 'desc';
$args['meta_key'] = '_price';
break;
case 'title_desc' :
$args['orderby'] = 'title';
$args['order'] = 'desc';
$args['meta_key'] = '';
break;
case 'rating_desc' :
$args['orderby'] = 'rating';
$args['order'] = 'desc';
$args['meta_key'] = '';
break;
endswitch;
}
return $args;
}
add_filter('woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby');
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['rating_desc'] = 'Rating';
$sortby['title_desc'] = 'Reverse-Alphabetically';
$sortby['price_desc'] = 'Price (highest to lowest)';
$sortby['date_asc'] = 'Oldest to newest';
return $sortby;
}
答案 0 :(得分:2)
尝试将您的案例'rating_desc'更改为此
case 'rating_desc' :
add_filter( 'posts_clauses', array( $this, 'order_by_rating_post_clauses' ) );
break;
在我遇到类似问题后,在第492行后发现中的一段代码包含\ class-wc-query.php 。如果您需要核心功能 order_by_rating_post_clauses ,则它位于第547行的同一文件中。
希望它有所帮助!
答案 1 :(得分:0)
使用WC_Shortcode_Products
生成带有排序参数的wc循环,该循环在默认的wc shop页面中使用:
for($i=1;$i<=$num;$i++){
$atts = array_merge(array(
'columns' => $columns,
'orderby' => $order_by,
'order' => $sort_by,
'rows' => $rows,
'page' => $i,
));
$shortcode = new WC_Shortcode_Products($atts, 'recent_products');
$html ='';
$html .= $shortcode->get_content();
echo $html;
}