2017-08-12 30 views
2

我最初的目標是能夠在邊欄中顯示Woocommerce產品,按標題排序。目前這個小部件中唯一的排序選項是日期,價格,隨機和銷售。Woocommerce小工具按標題產品排序

我能夠添加標題排序選項2份在類-WC-部件-products.php

'orderby' => array(
       'type' => 'select', 
       'std' => 'date', 
       'label' => __('Order by', 'woocommerce'), 
       'options' => array(
        'title' => __('Title', 'woocommerce'), 
        'date' => __('Date', 'woocommerce'), 
        'price' => __('Price', 'woocommerce'), 
        'rand' => __('Random', 'woocommerce'), 
        'sales' => __('Sales', 'woocommerce'), 
       ), 

在這裏:

switch ($orderby) { 
    case 'title' : 
     $query_args['orderby'] = 'title'; 
     break; 
    case 'price' : 
     $query_args['meta_key'] = '_price'; 
     $query_args['orderby'] = 'meta_value_num'; 
     break; 
    case 'rand' : 
     $query_args['orderby'] = 'rand'; 
     break; 
    case 'sales' : 
     $query_args['meta_key'] = 'total_sales'; 
     $query_args['orderby'] = 'meta_value_num'; 
     break; 
    default : 
     $query_args['orderby'] = 'date'; 
} 

這種定製作品很好,但:

我的問題:我應該在哪裏保存這個c ustomized「class-wc-widget-products.php」文件阻止它在下次Woocommerce更新時被覆蓋?
或...有沒有更好的方法來實現這個目標?謝謝!

回答

0

請注意,儘量避免使用
這是開發禁止
(所以我不得不重新命名你的問題的標題)

首先不方便(正如您已經知道的):當您更新插件時,您會發生更改。

沒有人會覆蓋核心文件...所以,請刪除所有更改或獲取原始文件。

那就是爲什麼actions and filters exist全部通過代碼

正確的方法來強制orderby通過「稱號」可以做到這樣:

add_filter('woocommerce_products_widget_query_args','title_orderby_products_widget_query_arg', 10, 1); 
function title_orderby_products_widget_query_arg($query_args) { 
    // set 'title' for orderby 
    $query_args['orderby'] = 'title'; 

    return $query_args; 
} 

代碼放在功能.php文件的活動兒童主題(或主題)或任何插件文件。

這應該適合你。

然後你就可以add some conditions更好地針對這個...


正式文件:WooCommerce Action and Filter Hook Reference