2016-01-28 32 views
1

在woocommerce插件文件class-wc-booking-cart-manager.php有這個代碼如何重寫功能WordPress的

/** 
    * Constructor 
    */ 
    public function __construct() { 
     add_filter('woocommerce_add_cart_item', array($this, 'add_cart_item'), 10, 1); 
     } 

/** 
    * Adjust the price of the booking product based on booking properties 
    * 
    * @param mixed $cart_item 
    * @return array cart item 
    */ 
    public function add_cart_item($cart_item) { 
     if (! empty($cart_item['booking']) && ! empty($cart_item['booking']['_cost'])) { 
      $cart_item['data']->set_price($cart_item['booking']['_cost']); 
     } 
     return $cart_item; 
    } 

我想改變add_cart_item函數的代碼到我的子主題functions.php文件

所以我這樣做:

function custom_add_cart_item($cart_item) { 
    if (empty($cart_item['booking']) && empty($cart_item['booking']['_cost'])) { 
     $cart_item['data']->set_price(2000); 
    } 
    return $cart_item; 
} 


function setup_add_cart_item_filter(){ 
    remove_filter('woocommerce_add_cart_item', array('WC_Booking_Cart_Manager', 'add_cart_item'), 10, 1); 
    add_filter('woocommerce_add_cart_item', 'custom_add_cart_item'); 
} 

add_action('after_setup_theme', 'setup_add_cart_item_filter'); 

但它不起作用。謝謝你的幫助 !

回答

1

你可以叫remove_all_filters('woocommerce_add_cart_item');刪除現有的勾,然後調用add_filter('woocommerce_add_cart_item', 'your_new_add_cart_item');中的functions.php

編輯:我錯過了childtheme的functions.php之前父主題的加載點,在這樣的functions.php運行remove_all_filters()是直接其實沒用......

我更新的答案是在另一個函數來包裝這些電話,並設置主題後語稱他們爲:

function setup_add_cart_item_filter(){ 
    remove_all_filters('woocommerce_add_cart_item'); 
    add_filter('woocommerce_add_cart_item', 'custom_add_cart_item'); 
} 
add_action('after_setup_theme', 'setup_add_cart_item_filter'); 
+0

我只是編輯我的問題,如果你可以檢查 –

+0

代碼行的順序是否重要? –

+0

僅當觸發相應的事件時才應評估過濾器和操作。 – slbteam08