我在Woocommerce中添加了一个新的排序选项,它将按最低价格排序。我的所有价格都存储在自定义属性中,以及其他一些序列化数据。我想要的是有一个回调函数,可以反序列化这些数据,检查最低价格并按该价格排序。
我看到的每个关于自定义排序选项的帖子都使用woocommerce_get_catalog_ordering_args
过滤器来为WP_Query添加orderby参数,但我还没有看到任何方法通过回调函数对返回的查询的结果进行排序。
有没有办法实现这个目标?我根据名字查看woocommerce_after_product_ordering
,但找不到有关它的更多信息。任何帮助将不胜感激!
function my_woocommerce_product_sorting($orderby) {
$orderby['price_asc'] = "Sort by cheapest";
$orderby['price_desc'] = "Sort by most expensive";
return $orderby;
}
add_filter("woocommerce_catalog_orderby", "my_woocommerce_product_sorting", 20);
答案 0 :(得分:0)
我认为当您使用单独的新元键存储自定义价格时,这将是最好的解决方案,例如在后期元名称 _price 中的wooocommerce商店产品价格和具有数字价格的值。
mysql order by serialized data?
当你分开存储时,它会改变wp查询args,如:
function my_woocommerce_get_catalog_ordering_args( $args ){
$order_by = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : $args['orderby'];
if( $order_by == 'price_desc' || $order_by == 'price_asc' ){ // Check match to custom filter
$args['orderby'] = "meta_value_num ID";
$args['order'] = $order_by == 'price_desc' ? 'DESC' : 'ASC';
$args['meta_key'] = '_my_custom_price'; // Put your price custom post meta price key name
}
return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'my_woocommerce_get_catalog_ordering_args' );