通过自定义回调函数的Woocommerce订单

问题描述:

我向Woocommerce添加了一个新的排序选项,它将按最低价格排序。我所有的价格都与一些其他序列化数据一起存储在自定义属性中。我想要的是有一个回调函数,它可以反序列化这些数据,检查最低价格并按照这个价格排序。通过自定义回调函数的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); 
+1

WooCommerce已经通过排序价格升序和降序排列。 “我的所有价格都存储在自定义属性中”是什么意思?为什么价格不会存储在'_price'元中?据我所知,没有办法通过回调函数对查询的结果进行排序。查询根据'order'和'orderby'参数自行排序。 – helgatheviking

我认为这将是最好的解决办法,当您存储自定义价格与交META NAME _price像wooocommerce店内产品的价格单独的新meta键和值与数字的价格。

mysql order by serialized data?

当存储分离,然后它会改变WP询问参数,如:

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'); 
+0

这不是我想要的解决方案,但它是我最终选择的解决方案,没有更好的选择。 –