2016-06-21 108 views
3

我向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

回答

0

我認爲這將是最好的解決辦法,當您存儲自定義價格與交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

這不是我想要的解決方案,但它是我最終選擇的解決方案,沒有更好的選擇。 –

相關問題