2017-02-18 155 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脚本在该结帐页面中运行。