Cara Kerja WooCommerce JNE Shipping Pack

woocommerce-jne-shipping-packKetika Anda memiliki suatu mainan atau alat, Anda akan lebih merasa nyaman terhadap mainan / alat tersebut ketika Anda mengerti bagaimana cara kerjanya.

Artikel ini tidak mengajak Anda memahami kode yang ada di dalam plugin WooCommerce JNE Shipping Pack, tetapi hanyalah deskripsi. Deskripsi secara singkat bagaimana plugin tersebut bekerja di toko online Anda yang dibuat dengan WordPress dan WooCommerce.

Component

Di Woocommerce, extension yang memberikan fitur “shipping” biasanya cuma membuat class yang extend WC_Shipping_Method. Kemudian meloadnya di file plugin, bersamaan dengan itu mendaftarkan class tersebut  ke Woocommerce.

Tetapi Woocommerce JNE Shipping tidak hanya melakukan hal tersebut di toko online Anda. Ada beberapa komponen di dalam plugin tersebut yang juga diloading, seperti template untuk menampilkan kecamatan di halaman cart, check out dan my account, daftar kota dan kecamatan, Repository daftar ongkos kirim kota dan kecamatan, Session untuk mencatat aktivitas user dll.

Daftar ongkos kirim di Woocommerce JNE Shipping Pack, baik yang Anda masukkan dari importer mau pun manual disimpan di database dalam bentuk custom post type. Artinya daftar itu ada di table wp_posts dan wp_post_meta.

Jadi, mari kita ringkas. Plugin WooCommerce JNE Shipping Pack mempunyai komponen:

  • Shipping method yang didaftarkan ke Woocommerce
  • Daftar kota dan kecamatan
  • Repository ongkos kirim
  • Session

Jadi anda sudah tahu apa saja yang ada di dalam Woocommerce JNE Shipping Pack. Mari kita lebih mengenalnya melalui bagaimana ongkos kirim tersebut muncul.

Lifecycle

Seperti yang saya katakan di atas, kami mendaftarkan sebuah shipping method (JNE) ke Woocommerce melalui wordpress hook/filter. Kemudian Woocommerce menyimpannya di dalam class WC_Shipping.

Ketika anda atau customer Anda mengisi data diri di form checkout. Data tersebut secara otomotis dikirim oleh file javascript yang terloading di halaman tersebut ke server melalui ajax request. Data tersebut berisi nama, kota, kecamatan, provinsi, dll. File javascript itu seperti berkata kepada server, “hei, ada perubahan data yang ditulis oleh client. Ini datanya”.

Server menanggapinya dan mengelola data tersebut. Dan menyuruh class WC_Cart untuk menghitung kembali total belanja. WC_Cart yang tahu produk apa saja yang mau dibeli customer menghitung ulang, kemudian memanggil WC_Shipping untuk menghitung kembali opsi ongkos kirim yang harus ditampilkan.

WC_Shipping kemudian memanggil semua class yang didaftarkan. class WC_JNE_Shipping yang didaftarkan ke WC_Shipping mengalkulasi ongkos kirim berdasarkan berat produk-poduk yang ada di cart dan lokasi customer. WC_JNE_Shipping memanggil komponen lain untuk mengalkulasinya, yaitu Repository ongkos kirim. Dan mengirimkan hasilnya ke WC_Shipping, diteruskan ke WC_Cart.

Setelah proses tersebut, respon server terhadap request Javscpript tersebut (AJAX) adalah data HTML hasil dari kalkulasi ulang dari data yang diberikan Javasciprt. Kemudian kode Javascript tersebut mengganti tampilan lama dengan respon server.

Filter Respon WC_JNE_Shipping

Ketika WC_Shipping ingin memanggil opsi ongkos kirim dari WC_JNE_Shipping, sebelum itu WC_Shipping memanggil method is_available yang ada di WC_JNE_Shipping. Method is_available ini menentukan apakah “Available” di kondisi terakhir berdasarkan data parameter yang dikirim. Method is_available akan mengembalikan response bolean, artinya hanya akan merespon true atau false saja. True jika available dan false jika tidak.

Dan kami menyediakan sebuah filter, sehingga Anda bisa memfilternya. Secara default, kami akan merespon true terus sepanjang anda mengaktifkannya di settings.

Tetapi Anda bisa memfilternya, untuk merespon hal-hal spesifik lainnya.

Contoh: Anda menawarkan free shipping kepada customer Anda jika total belanja customer lebih dari satu juta, dan syarat lain yang Anda setting. Anda mungkin tidak ingin plugin kami menampilkan opsi ongkos kirim jika syarat yang anda setting terpenuhi oleh customer.

Berikut contoh kode yang bisa Anda masukkan ke theme Anda. Copy paste ke file functions.php theme Anda


add_filter( 'woocommerce_shipping_jne_shipping_is_available', function( $is_available, $package ) {

	//get instance of WC_Shipping_Free_Shipping from WC_Shipping
	$free_shipping = WC()->shipping->shipping_methods['free_shipping'];

	//check this was an instanceof WC_Shipping_Free_Shipping, if not just instance it
	if( false === ( $free_shipping instanceof WC_Shipping_Free_Shipping ) )
		$free_shipping = new WC_Shipping_Free_Shipping;

	// check all rules in wc_shipping, if it available,
	// we will make our JNE Shipping is not available for the customer
	// so change it to false
	if( $free_shipping->is_available( $package ) )
		$is_available = false;

	return $is_available;

}, 10, 2 );

Warning: Jika versi PHP Anda masih di bawah 5.3. Kode di atas akan membuat error. Untuk mengatasinya copy kode di atas dan beri nama. Kemudian masukkan nama fungsi tersebut di parameter dua di add_filter.