2016-08-19 14 views
1

価格、日付、リリース年などのいくつかの項目で商品を並べ替えることにしました。 リリース年の場合、taxonomy = release-year & post_type = productを作成し、その年を設定しました。 今、年別に並べ替えたい私が持っているコードは:woocommerce製品の商品タグ別の注文方法

 

case 'rand' : 
    $curr_args['orderby'] = 'rand'; 
    break; 
case 'date' : 
    $curr_args['orderby'] = 'date'; 
    $curr_args['order'] = $order == 'ASC' ? 'ASC' : 'DESC'; 
    break; 
case 'price' : 
    global $wpdb; 
    $curr_args['orderby'] = "meta_value_num {$wpdb->posts}.ID"; 
    $curr_args['order'] = $order == 'DESC' ? 'DESC' : 'ASC'; 
    $curr_args['meta_key'] = '_price'; 
    break; 
case 'popularity' : 
    $curr_args['meta_key'] = 'total_sales'; 
    add_filter('posts_clauses', array(WC()->query, 'order_by_popularity_post_clauses')); 
    break; 
case 'release-year' : 
    $curr_args['orderby'] = 'release-year'; 
    $curr_args['order'] = $order == 'ASC' ? 'ASC' : 'DESC'; 
    $curr_args['tax_query'] = array(array('taxonomy' => 'release-year',);); 
case 'title' : 
    $curr_args['orderby'] = 'title'; 
    $curr_args['order'] = $order == 'DESC' ? 'DESC' : 'ASC'; 
    break; 

ですが、動作しません。どのようにコードをリリース年順にソート可能なソートに変更できますか?

答えて

0

here - orderbyのパラメータには、可能な値のセットがあります。したがって、orderbyパラメータをタクソノミー名の値でソートするための簡単な方法はありません(拒否されたproposition for the Coreと完全な理由が見つかるはずhere)。可能な解決策は2つあります。

1)ソートに使用されるカスタムポストメタ値を作成します。私は、私はあなたがこれを保存しないようにすべきだと思うもう少しハックの方法を試してみて、here

のようなフィルタを経由して、クエリを上書きしようとする)ORDERBYパラメータでメタ値によってhere

2をソートする方法を説明してきましたタクソノミのデータの種類 - ポストメタは私の意見ではこの種のデータにとってはるかに良い場所ですが、その選択はあなたのものです。タクソノミを使用すると、ウェブサイトのスケーラビリティと拡張に将来の問題が生じる可能性があります。

関連する問題