WooCommerce Membuat Plugin Shipping Sendiri – Kendala Harga Shipping Tidak Terupdate(AJAX)

Share Post:

Share on facebook
Share on linkedin
Share on twitter
Share on pinterest
Share on email

Beberapa minggu yang lalu, saya stuck dengnan tidak terupdatenya harga shipping dengan yang perhitungan yang benar. Secara flow sudah benar. AJAX juga sudah berjalan dengan baik, tetapi nilai yang dikembalikan masih salah.

Setelah saya cari kesana-kemarin, belum juga membuahkan hasil. Ternyata, problemnya adalah WooCommerce hanya akan mau menghitung atau menjalankan function calculate_shipping() milik plugin ybs jika, nama dan alamat berubah. Oleh sebab itu tidak bisa terupdate.

Tentang Plugin Shipping Saya

Jadi, saya menambahkan beberapa field baru, jika terjadi perubahan pada field tambahan tersebut, maka akan dihitung ulang untuk biaya shippingnya.

Disinilah problemnya muncul, seperti yang saya jelaskan sebelumnya, WooCommerce hanya akan menghitung jika field Nama dan Alamat nya berubah. Dalam kasus saya, plugin saya tidak memerlukan nama dan alamat, sehingga tidak ada hubungannya dalam menghitung shipping.

Sedikti Penjelasan Tentang Alur Plugin Shipping WooCommerce

  1. WooCommerce akan mendeteksi perubahan field Nama dan Alamat, sebagai pemicu pemanggilan AJAX
  2. Jika tidak ada perubahan Nama dan Alamat, maka function calculate_shipping()
  3. Jika ada perubahan Nama dan Alamat, maka function calculate_shipping() akan dijalankan

Cara WooCommerce Mendeteksi NAMA dan ALAMAT Berubah

WooCommerce menggunakan session key untuk melakukan hal tersebut. Sehingga kita cukup menghapus session key tersebut tepat sebelum calculate_shipping() dijalankan. Untuk itu silakan tambahkan hook woocommerce_checkout_update_order_review sehingga menjadi seperti ini:

add_action('woocommerce_checkout_update_order_review', 'action_woocommerce_checkout_update_order_review', 10, 1);
function action_woocommerce_checkout_update_order_review( $posted_data )
{
    global $woocommerce;
    $packages = $woocommerce->cart->get_shipping_packages();
    foreach( $packages as $package_key => $package ) {
        $session_key  = 'shipping_for_package_'.$package_key;
        $stored_rates = WC()->session->__unset( $session_key );
    }
}

Jika kamu masih bingung apa itu hook, kamu perlu mundur sebentar dan pelajari ulang cara membuat plugin di WordPress, karena ini penting.

Leave a Reply

Your email address will not be published.

CAPTCHA Image

*