我正在建立一个基于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 :(得分:0)
这将部分回答您的问题,并向您展示自定义结帐字段的方法。
覆盖核心文件并不是真的可以做的事情,因为每次Woocommerce要更新时都会松散,不推荐。
要以干净的方式覆盖结帐字段,首先需要使用挂在其中一个过滤器挂钩中的自定义函数:
woocommerce_default_address_fields
(自定义结算和送货地址默认字段时)woocommerce_checkout_fields
(自定义结算或送货地址字段以及其他字段时)。相关官方文档:Customizing checkout fields using actions and filters
所以在这里我选择了第一个钩子,并且我已经更正了你的邮政编码数组。你会得到的:
以下是经过验证的功能代码:
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脚本。