2016-08-19 213 views
1

我想根據價格,日期和發佈年份等項目對產品進行分類。 在發佈年份的情況下,我做了分類=發佈年份& 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 - 在排序依據參數有一組有限的可能值。所以沒有簡單的方法來設置order by參數用於通過分類名稱值進行排序(還有一個proposition for the Core已被拒絕,here您將找到完整答案爲什麼)。有兩種可能的解決方案:

1)創建將用於排序的自定義帖子元值。我描述瞭如何通過元值在orderBy參數here

2)儘量多一點點哈克的方式進行排序,並試圖通過覆蓋過濾器的查詢關鍵詞,比如here

我認爲,你應該避免這種存儲分類中的數據類型 - 在我看來,後期元數據對於這類數據來說更好,但選擇是你的。使用它的分類可能會導致未來的網站可擴展性和擴展問題。