2014-02-14 50 views
4

我正在爲Woocommerce構建一個自定義運輸方法,而我完全掛起的一件事是如何將自定義值傳遞給calculate_shipping()函數,或者在使用它時購物車頁面或結帳頁面。Woocommerce運費計算器的自定義字段

我需要通過用戶定義的變量極少數,這將影響報價 - 即「是住宅地址」,「是貿易展」,等等等等

calculate_shipping接收包含了$封裝陣列一個'目標'數組,但這隻包含標準的add1,add2,城市,州,郵編,國家信息。我在結算和發貨兩種情況下都向結帳頁面添加了自定義字段,但我仍然無法弄清楚如何使calculate_shipping函數可以訪問這些值。

我添加了一個自定義字段,像這樣:

add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields'); 

// Our hooked in function - $fields is passed via the filter! 
function custom_override_checkout_fields($fields) { 
    $fields['shipping']['is_residential'] = array(
    'label'  => __('Residential Address?', 'woocommerce'), 
'type'  => 'checkbox', 
'required' => false, 
'class'  => array('form-row-wide'), 
'clear'  => true 
); 

    return $fields; 
} 

而且我看到這個領域顯示在結賬形式的運輸部分。但是,我沒有看到我如何在任何地方訪問它。即使在結算頁面上執行print_r($_POST)也不會將此字段顯示爲發佈數據的一部分,即使在我知道表單已更新並重新發布後也是如此。

但最重要的是,我需要將提交的字段的內容添加到Woocommerce傳遞給shipping方法的calculate_shipping()函數的$ package對象中。

我真的不知道該從哪裏開始。

+0

如果您引用迄今爲止編寫的代碼的代碼片段,證明您遇到的問題,然後指出問題出現在代碼中的位置,而不僅僅是*描述*你寫的代碼。 – neminem

+0

我在上面添加了一些代碼,但我不確定它會有多大用處。重要的是,我需要自定義結帳字段以某種方式訪問​​,到目前爲止,我甚至無法找到$ _POST中的值 – HeruRaHa

回答

2

您不能指望添加結帳字段並在購物車頁面上提供它們。

正確的方法是使用購物車包。

檢查function get_shipping_packages()從類-WC-cart.php

public function get_shipping_packages() { 
     // Packages array for storing 'carts' 
     $packages = array(); 

     $packages[0]['contents']     = $this->get_cart();  // Items in the package 
     $packages[0]['contents_cost']   = 0;      // Cost of items in the package, set below 
     $packages[0]['applied_coupons']   = $this->applied_coupons; 
     $packages[0]['destination']['country'] = WC()->customer->get_shipping_country(); 
     $packages[0]['destination']['state']  = WC()->customer->get_shipping_state(); 
     $packages[0]['destination']['postcode'] = WC()->customer->get_shipping_postcode(); 
     $packages[0]['destination']['city']  = WC()->customer->get_shipping_city(); 
     $packages[0]['destination']['address'] = WC()->customer->get_shipping_address(); 
     $packages[0]['destination']['address_2'] = WC()->customer->get_shipping_address_2(); 

     foreach ($this->get_cart() as $item) 
      if ($item['data']->needs_shipping()) 
       if (isset($item['line_total'])) 
        $packages[0]['contents_cost'] += $item['line_total']; 

     return apply_filters('woocommerce_cart_shipping_packages', $packages); 
    } 

你得勾成woocommerce_cart_shipping_packages過濾器,並添加您的領域存在。

您很可能需要在運費計算器和結帳頁面添加它們(您的字段)。

希望這會有所幫助。