GandhyOnly GandhyOnly - 25 days ago 23
PHP Question

Wordpress Woocommerce get value from custome shipping field (AJAX)

So I have an ecommerce using woocommerce and I use custom shipping for track shipping fee.
And I already add new input data (select). like you can see on below picture:
enter image description here

// Hook in
add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields($fields) {

$fields['billing']['billing_city'] = array(
'type' => 'select',
'label' => __('Kota / Kabupaten', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide', 'address-field'),
'clear' => true,
'options' => array(
'' => 'Pilih Kota / Kabupaten'
)
);
$fields['shipping']['shipping_city'] = array(
'type' => 'select',
'label' => __('Kota / Kabupaten', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide', 'address-field'),
'clear' => true,
'options' => array(
'' => 'Pilih Kota / Kabupaten'
)
);


$fields['billing']['billing_subdistrict'] = array(
'type' => 'select',
'label' => __('Kecamatan', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide', 'address-field'),
'clear' => true,
'options' => array(
'' => 'Pilih Kecamatan'
)
);

$fields['shipping']['shipping_subdistrict'] = array(
'type' => 'select',
'label' => __('Kecamatan', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide', 'address-field'),
'clear' => true,
'options' => array(
'' => 'Pilih Kecamatan'
)
);


return $fields;
}


Woocommerce default data had address_1,address_2,country,state,city but I need one more data called subdistrict. I don't need to save that data (subdistrict). But I need to use that value as parameter for track shipping fee.

I already create new class-custom-shipping-delivery.php.
and I already make sure that function work perfectly because I already try to set $subdistrict data manually.

//custom-shipping.php
$province = $package['destination']['state'];
$city = $package['destination']['city'];

$subdistrict= 'something';
//How to get the data from custom field (ajax)
//because I need to see the shipping fee result before Checkout (and update it to add rate)


$destination_code = $this->getDestinationCode($province,$city,$subdistrict);

$ongkir = $this->cek_ongkir($origin,$destination_code,$weight);

//print_r();

// send the final rate to the user.
$this->add_rate(array(
'id' => $this->id,
'label' => $this->title,
'cost' => $ongkir
));


Summary:

How to get Value from Subdistrict Input type select (on checkout page)?

Sorry I just edit from another person work so I'm not understand that code at all. But I think they forgot to get that value because they just hardcode it and I'm a newbie on wordpress so I don't know how to pass data on checkout form.

Answer

After searching the answer for a while then I get the answer.

So for Summary it: Above answer use session to get the data from shipping custom field (ajax). So when AJAX run. I send value of 'subdistrict' field to function and save it to session.

function ajax_process($subdistrict){
   //some code
   session_start();
   $_SESSION['subdistrict'] = $subdistrict;
}

then for get the session data from other function I run this code :

@session_start();
$subdistrict = $_SESSION['subdistrict'];

for more information I get the answer from this :

http://phpwpinfo.com/how-to-update-shipping-cost-in-cart-dynamically-based-on-a-custom-field-in-woocommerce/

Comments