2016-06-21 10 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

。 「すべての価格がカスタム属性に格納されている」とはどういう意味ですか?価格が '_price'メタに格納されていないのはなぜですか?私が知る限り、コールバック関数でクエリの結果をソートする方法はありません。クエリは 'order'と' orderby'パラメータに応じてソートされます。 – helgatheviking

答えて

0

は、私はあなたが数字の価格で別の新しいメタポストメタ名_priceでwooocommerceストア製品価格などのキーと値を持つカスタム価格を保存するとき、それが最善の解決策になると思います。

mysql order by serialized data?

あなたは分離のような、それはWPクエリー引数を変更します保存時:WooCommerceはすでに、価格で昇順と降順の両方をソート

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

これは私が望んだ解決策ではありませんが、最終的にはより良い選択肢はありませんでした。 –

関連する問題