I am trying to modify WooCommerce check out fields. There are two points I want to reach.
Conditional fields
I want to make conditional fields for different shipping type in shipping section. To reach this point, Javascript is used.
Administrator can edit the custom fields in the order on back-end
As a result, I write the code as below.
However, I met a problem. My javascript cannot work on the front-end.
Does anybody can help me?
//修改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;
}