我正在尝试修改WooCommerce签出字段 . 我想达到两点 .
- 条件字段
我想为运输部分中的不同运输类型创建条件字段 . 为了达到这一点,使用了Javascript .
- 管理员可以在后端编辑订单中的自定义字段
结果,我编写如下代码 .
但是,我遇到了一个问题 . 我的javascript无法在前端工作 .
有人可以帮帮我吗?
//修改check out shipping field
add_action( 'woocommerce_before_checkout_shipping_form', 'add_shipping_type' );
function add_shipping_type( $checkout ) {
woocommerce_form_field( 'shipping_type', array(
'type' => 'radio',
'class' => array( 'form-row-wide' ),
'label' => '收件方式',
'options' => array(
'shipping_1' => '全家店到店',
'shipping_2' => '指定地址',
'shipping_3' => '自行取貨',
)
),$checkout->get_value( 'shipping_type' ));
}
add_filter( 'woocommerce_shipping_fields', 'custom_name_field_2' );
function custom_name_field_2($fields) {
$fields['shipping_first_name'] = array(
'label'=>"取件者 *",
'id' => 'shipping_first_name'
);
$fields['shipping_last_name'] = array(
'label'=>"手機號碼 *",
'id' => 'shipping_last_name'
);
$fields['shipping_company'] = array(
'label'=>"店名 *",
'id' => 'shipping_company'
);
$fields['shipping_city'] = array(
'label'=>"服務編號 *",
'id' => 'shipping_city'
);
$fields['shipping_address_1'] = array(
'label'=>"收件地址 *",
'id' => 'shipping_address_1'
);
$fields['shipping_address_2'] = array(
'label'=>"預計來訪時間 *",
'id' => 'shipping_address_2'
);
return $fields;
}
add_filter( 'woocommerce_shipping_fields', 'remove_shipping_company' );
function remove_shipping_company($fields){
unset($fields['shipping_country']);
unset($fields['shipping_state']);
return $fields;
}
add_filter("woocommerce_shipping_fields", "shipping_container");
function shipping_container(){
$output = '
<style>label.radio{display:inline-block;margin-right:1rem;}</style>
<script>
var $ = jQuery.noConflict();
$(document).ready(function(){
$("input[name=shipping_type]").on("change",function(){
if($("#shipping_type_shipping_1").is(":checked")) {
$("#shipping_first_name,#shipping_last_name,#shipping_city,#shipping_company").fadeIn();
} else {
$("#shipping_first_name,#shipping_last_name,#shipping_city,#shipping_company").fadeOut();
}
if($("#shipping_type_shipping_2").is(":checked")) {
$("#shipping_postcode,#shipping_address_1").fadeIn();
} else {
$("#shipping_postcode,#shipping_address_1").fadeOut();
}
if($("#shipping_type_shipping_3").is(":checked")) {
$("#shipping_address_2_field_2").fadeIn();
} else {
$("#shipping_address_2_field_2").fadeOut();
}
})
});
</script>
';
echo $output;
}
3 回答
@LoicTheAztec感谢您的回复,您给了我很大的帮助 . 如您所述,必填字段是问题所在 . 结果,我尝试使用下面的代码来解决问题 . 虽然它解决了所需字段的问题,但却导致字段标签无法显示 .
你在这一行上错过了“shipping_type”的引用:
如果此修复程序无效:您是否在javascript控制台中出错?
首先,当涉及相同的钩子时,你可以合并一些函数...然后你的jQuery脚本最好像下面的代码一样设置它(你的jQuery脚本中也有很多小错误):
代码位于活动子主题(或活动主题)的function.php文件中 .
经过测试和工作 .
现在,如果要隐藏带有标签的字段,您的jQuery脚本将是:
经过测试和工作......