2017-02-18 44 views
2

我建立一個基於WooCommerce店。我有郵政編碼列表,每一個都有通過航運區連接不同的運輸成本(有的提供免費送貨,一些有固定費率)。定製結賬郵編場到自定義下拉菜單

當顧客進入到結賬頁面,他需要在輸入框中輸入他的郵編號碼。根據郵政編碼,訂單預覽會顯示不同的運費總額(免費或統一費率)。

這裏的輸入字段看起來像在class-wc-countries.php

public function get_default_address_fields() { 
    $fields = array(
    'postcode' => array(
      'label'  => __('Postcode/ZIP', 'woocommerce'), 
      'required'  => true, 
      'class'  => array('form-row-first', 'address-field'), 
      'clear'  => true, 
      'validate'  => array('postcode'), 
      'autocomplete' => 'postal-code', 
     ), 
    ); 

但是,我想要做的就是把這個領域變成一個下拉菜單,讓用戶可以只選擇他的郵編選項而不是鍵入它。

我設法使它下拉,但每當我選擇任何選項,它似乎並沒有改變總的出貨,因爲它會與輸入字段。

這裏就是我所做的:

public function get_default_address_fields() { 
    $fields = array(
     'postcode' => array(
      'label'  => __('Postcode/ZIP', 'woocommerce'), 
      'required'  => true, 
      'class'  => array('form-row-first', 'address-field'), 
      'clear'  => true, 
      'validate'  => array('postcode'), 
      'autocomplete' => 'postal-code', 
      'type' => 'select', 
      'options' => array(
           'opt1' => "001122", "112200", "334400") 
     ), 
    ); 

但這不工作。

我錯過了什麼嗎?
如何讓這些下拉選項改變航運總?

感謝

+0

最後通過使用States字段作爲下拉菜單來解決它。我把我的zipcode放在woocommerce functions.php中,好像它們是狀態一樣(從他們網站上的Add/Modify States頁面獲取代碼)。然後我創建了新的運輸區域:我的國家 - 州(郵政編碼),並給他們統一費率/免運費選項。比編寫一個全新的下拉菜單要容易得多(正如Loic所說 - 這是一個複雜的開發) – rb1989

回答

0

這將回答非常部分你的問題,並且只顯示你定製結賬領域的方式。

重寫核心文件是不是真的有事做,因爲你將失去每一次everithing Woocommerce將被更新,因此不推薦。

要覆蓋結賬領域的清潔方式,首先你需要使用在2過濾器鉤子的一個鉤的自定義函數:

  • woocommerce_default_address_fields(定製賬單和送貨地址默認字段時)
  • woocommerce_checkout_fields(當定製賬單或送貨地址字段和也等領域)。

相關的官方文件:Customizing checkout fields using actions and filters

所以在這裏我已經選擇了第一鉤,和我糾正了POST代碼陣列。你會得到:

enter image description here

這裏是功能和測試代碼:

add_filter('woocommerce_default_address_fields' , 'custom_override_default_postcode_field'); 
function custom_override_default_postcode_field($address_fields) { 
    // Your postcodes array 
    $postcode_array = array(
     'opt1' => "001122", 
     'opt2' => "112200", 
     'opt3' => "334400" 
    ); 
    $address_fields['postcode']['type'] = 'select'; 
    $address_fields['postcode']['options'] = $postcode_array; 

    return $address_fields; 
} 

代碼放在您的活動子主題(或主題)的function.php文件或也以任何插件文件。

作爲選擇後的代碼是一個活生生的前端時,你將需要使用複雜的JavaScript/AJAX腳本一些偏遠的PHP函數來實現你想要做什麼,這是一個真正的發展...它也取決於您的設置,並且處理起來很複雜,因爲已經有一些woocommerce ajax腳本在該結帳頁面中運行。