Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WooCommerce
Code

Membuat Metode Pengiriman Kustom untuk WooCommerce

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Jika Anda pernah mengembangkan sesuatu untuk WordPress, baik itu tema atau plugin sederhana, Anda sudah terbiasa dengan modularitas dari WordPress. WooCommerce dikembangkan dengan kemampuan extendability juga.

Dalam tutorial ini kita akan membuat metode pengiriman sederhana untuk WooCommerce yang akan menghitung biaya pengiriman. Kami juga akan menambahkan beberapa batasan pada plugin kami sehingga metode pengiriman kami hanya tersedia untuk negara tertentu.

Untuk mengikuti tutorial ini Anda akan memerlukan:

  • WordPress
  • Plugin WooCommerce yang terinstal dan diaktifkan
  • Editor pilihan

Aturan Pengiriman untuk Metode Pengiriman Kita

Sebelum kita mulai, kita perlu menentukan bagaimana metode pengiriman kita akan menghitung biaya dan di mana ia bisa mengirimkan.

Biaya akan ditentukan oleh berat yang kita butuhkan untuk mengirim dan oleh zona di mana kita perlu mengirim. Zona adalah nomor yang ditugaskan ke negara dan ke harga. Semakin tinggi nomornya, semakin jauh jarak pengiriman. Perusahaan pengiriman fiktif kita hanya melakukan pengiriman ke beberapa negara:

  • Amerika Serikat
  • Kanada
  • Jerman
  • Inggris Raya
  • Italia
  • Spanyol
  • Kroasia

Perusahaan pengiriman kita akan berasal dari Kroasia, jadi Kroasia berada di zona 0. Mari kita mendefinisikan zona untuk negara-negara lain:

  • Amerika Serikat: 3
  • Kanada: 3
  • Jerman: 1
  • Inggris Raya: 2
  • Italia: 1
  • Spanyol: 2

Sekarang kita memiliki semua negara yang tersedia untuk pengiriman dengan zona yang sesuai, saatnya menentukan harganya.

  • Zona 0: $10
  • Zona 1: $30
  • Zona 2: $50
  • Zona 3: $70

Saya juga telah menyebutkan beratnya kan? Perusahaan pengiriman kita dapat mengirim sampai dengan 100 kg, dan harganya adalah:

  • 0–10 kg: $0
  • 11–30 kg: $5
  • 31–50 kg: $10
  • 51–100 kg: $20

Kita memiliki semua yang kita butuhkan untuk membuat metode pengiriman kita. Mari mempelajari sedikit tentang API Pengiriman WooCommerce.

Pengenalan API Metode Pengiriman WooCommerce

Saat membuat metode pengiriman, kita perlu memperpanjang kelas dari kelas abstrak WooCommerce WC_Shipping_Method. Atribut yang ditetapkan di kelas ini adalah:

  • $id: ID (slug, kata kunci) dari pengiriman kita. Diperlukan.
  • $number: ID Integer.
  • $method_title: Nama pengiriman kita yang ditampilkan di admin.
  • $method_description: Penjelasan singkat tentang pengiriman kita yang ditampilkan di admin (Opsional).
  • $enabled: String Boolean ("yes" atau "no") yang memberi informasi jika pengiriman kita diaktifkan dan dapat digunakan atau tidak.
  • $title: Digunakan untuk menampilkan nama pengiriman di situs kita.
  • $availability: Mendefinisikan jika pengiriman tersedia atau tidak.
  • $countries: Array dari negara-negara dimana metode ini diaktifkan. Nilai default adalah array kosong.
  • $tax_status: Nilai default adalah taxable. Jika dikenakan pajak maka pajaknya akan dikenakan biaya.
  • $fee: Nilai default adalah 0. Biaya untuk metode ini.
  • $minimum_fee: Biaya minimum untuk metode ini. Nilai defaultnya adalah null.
  • $has_settings: Mendefinisikan jika metode ini memiliki pengaturan. Nilai default true.
  • $supports: Array berisi fitur yang didukung metode ini. Nilai default adalah array kosong.
  • $rates: Array dari tarif. Ini harus diisi untuk mendaftarkan biaya pengiriman. Nilai default adalah array kosong.

Metode yang ditetapkan di WC_Shipping_Method adalah:

  • is_taxable(): Mengembalikan apakah perlu menghitung pajak atas tarif pengiriman atau tidak.
  • add_rate( $args = array() ): Mendorong harga pengiriman yang ditentukan pada parameter $args ke dalam atribut $rates.
  • has_settings(): Mengembalikan nilai atribut $has_settings.
  • is_available(): Mengembalikan jika pengiriman tersedia. Jika ada negara yang ditetapkan dalam atribut $countries dan atribut $availability diset ke nilai including, specific atau excluding, itu akan mengembalikan true atau false jika negara ini tersedia untuk pengiriman.
  • get_title(): Mengembalikan judul pengiriman ini.
  • get_fee( $fee, $total ): Mengembalikan nilai biaya untuk pengiriman ini berdasarkan parsing $fee dan $total.
  • supports( $feature ): Mengembalikan jika metode pengiriman ini mendukung fitur atau tidak.

Karena kelas WC_Shipping_Method memperluas kelas WC_Settings_API, ada lebih banyak atribut dan metode yang tidak akan dijelaskan di sini demi kesederhanaan.

Ada juga metode lain yang perlu didefinisikan agar pengiriman bisa mendapatkan atau menetapkan pengaturan dan juga menghitung biaya pengiriman sebenarnya. Metode ini adalah:

  • init(): Membuat field form dan pengaturan (dapat diberi nama secara berbeda, selama kita menggunakan metode di dalamnya dan memanggilnya di metode __constructor).
  • calculate_shipping( $package ): Ini adalah metode yang digunakan untuk menghitung biaya pengiriman ini. Package adalah array dengan produk yang dikirimkan.

Dalam metode calculate_shipping, kami menambahkan tarif dengan metode add_rate. Metode ini menerima sebuah array dengan beberapa pilihan:

  • id: ID dari tarif.
  • label: Label untuk tarif.
  • cost: Jumlah pengiriman. Ini bisa berupa nilai tunggal atau array dengan biaya untuk setiap item dalam keranjang.
  • taxes : Menerima array dari pajak atau tidak, sehingga pajak dihitung oleh WooCommerce. Bahkan bisa menerima false jika Anda tidak ingin pajak dihitung.
  • calc_tax: Menerima per_order atau per_item. Jika Anda menggunakan per_itemarray dari biaya harus disediakan.

Untuk mendaftarkan metode pengiriman, kita perlu menambahkan metode pengiriman kita di array dari metode yang terdaftar dengan menyampaikan nama kelas kami. Kita bisa mendapatkan akses ke array tersebut dan mengirim kembali array yang dimodifikasi menggunakan filter WordPress yang didefinisikan di dalam plugin WooCommerce. Filter itu disebut woocommerce_shipping_methods.

Membuat Kelas Pengiriman Baru

Kita akan membuat metode pengiriman kita sebagai plugin baru yang memperluas plugin WooCommerce. Buatlah folder baru tutsplus-shipping di bawah wp-content/plugins. Juga, buatlah sebuah file dengan nama yang sama tutsplus-shipping.php dan tambahkan kode ini:

Sepertinya ada banyak hal yang harus dimengerti, tapi cukup sederhana. Pertama kita periksa apakah konstanta WPINC didefinisikan karena jika tidak, berarti seseorang mencoba mengakses file ini secara langsung atau dari lokasi yang bukan WordPress.

Sekarang setelah kita yakin bahwa ini akan diakses dari WordPress, kita bisa melanjutkan. Sebelum kita mulai membuat metode pengiriman untuk WooCommerce, kita harus yakin bahwa WooCommerce aktif. Kita memeriksa apakah file woocommerce.php terdapat dalam array plugin aktif yang tersimpan dalam database dengan opsi active_plugins.

Kita kemudian membuat fungsi tutsplus_shipping_method yang juga kita tambahkan dalam action woocommerce_shipping_init. Action woocommerce_shipping_init adalah tindakan utama untuk WooCommerce Shippings yang mencakup semua kelas pengiriman sebelum mereka dijalankan. Dengan menggunakan tindakan itu, kami yakin metode pengiriman kita akan disertakan setelah WooCommerce telah diinisiasi dan di tempat yang tepat bagi WooCommerce untuk menggunakannya.

Metode __construct kelas kita akan menetapkan beberapa atribut umum. Beberapa dari mereka dapat dengan mudah ditimpa setelah pengaturan diambil dari database dalam metode init. Dua metode lainnya dibiarkan kosong karena kita akan menentukannya nanti.

Pengaturan Ketersediaan Negara

Metode pengiriman kita hanya tersedia di daftar negara yang ditentukan sebelumnya. Ini akan diatur sebelum metode init di dalam metode __construct. Tambahkan ini pada metode __construct:

Atribut availability diatur ke 'including' sehingga pengiriman ini hanya tersedia untuk negara-negara yang termasuk dalam atribut countries. Saat WooCommerce ingin menampilkan pengiriman yang tersedia ke pelanggan kita, ia akan memeriksa apakah negara pengiriman termasuk dalam atribut countries untuk pengiriman ini.

Membuat Pengaturan

Jika Anda melihat dengan dekat metode __construct kami, Anda dapat melihat bahwa kami memeriksa setelan properti enabled dan title. Kami akan membuat field yang memungkinkan properti kami diubah. Salin kode ini dan isi metode init_form_fields kami:

Salin kode ini dan isi metode init_form_fields kami:

Sekarang Anda bisa masuk ke administrasi WordPress dan mengubah pengaturannya di WooCommerce > Settings > Shipping > TutsPlus Shipping.

The TutsPlus Shipping Options Screen

Cobalah mengubah pengaturan Enable dan lihat pada tab Shipping Options jika metode pengiriman kita diaktifkan atau tidak.

Kami juga telah menetapkan bahwa metode pengiriman kita dapat dikirimkan sampai 100 kg. Bagaimana jika peraturan itu berubah dalam waktu dekat? Kita dapat dengan mudah mengizinkannya untuk diedit di pengaturan. Kita akan menambahkan pengaturan itu sehingga metode init_form_fields kami terlihat seperti ini sekarang:

Sekarang kita bahkan bisa mengatur berat maksimal di bawah setting. Kita bisa membuat negara kita, zona dan hal lainnya juga dapat disesuaikan, tapi demi kesederhanaan kita akan melewatkan bagian itu.

Menghitung Biaya Pengiriman

Dengan segala yang ada sekarang, kita memiliki satu langkah lagi sebelum kita bisa menggunakan metode pengiriman kita saat menjual produk kita. Kita perlu menghitung ongkos kirim berdasarkan produk di keranjang pengunjung.

Kami akan memperbarui metode calculate_shipping selangkah demi selangkah sehingga Anda dapat memahami setiap langkahnya. Langkah pertama adalah mendapatkan biaya berdasarkan beratnya. Tambahkan kode ini ke metode itu:

Kami telah menetapkan beberapa variabel awal: $weight, $cost, dan $country. Variabel $weight akan memegang berat total dari semua produk, variabel $cost akan memegang biaya metode pengiriman ini, dan variabel $country akan memegang kode ISO untuk negara pengiriman yang dipilih.

Kita mendapatkan bobot total dengan iterasi keranjang dan menambahkan berat untuk setiap produk dalam keranjang ke variabel $weight. Setelah kita memiliki berat total, kita menggunakan fungsi wc_get_weight untuk mengubah berat menjadi kilogram karena itulah satuan metode pengiriman yang telah kita tetapkan batasnya.

Hal terakhir di sini adalah untuk mendapatkan biaya untuk berat yang dihitung. Jika Anda melihat dari dekat pada bagian terakhir, kami tidak menetapkan batas pada 100 kg seperti yang kami katakan. Biaya pengiriman kami akan menunjukkan biaya bahkan untuk keranjang dengan berat total 101 kg atau lebih. Bagian dari batas pengiriman kita ini akan dilakukan nanti di artikel sebagai pembatasan saat memproses checkout atau memperbarui pesanan.

Menghitung Biaya untuk Negara Pengiriman yang Dipilih

Sekarang kita memiliki biaya berdasarkan berat keranjang, kita harus menghitung biaya untuk negara pengiriman yang dipilih. Tambahkan kode ini berikutnya:

Array $countryZones memegang zona untuk setiap negara. Array kedua $zonePrices memegang harga untuk setiap zona. Setelah kita mengatur kedua array tersebut, kita mendapatkan biaya berdasarkan zona seperti ini:

  • Kami menyampaikan kode negara ISO ke array $countryZones untuk mendapatkan zona tersebut.
  • Kami menyampaikan zona yang dikembalikan ke array $zonePrices untuk mendapatkan biayanya.
  • Kami menambahkan biaya yang dikembalikan ke variabel $cost.

Mendaftarkan Tarif

Kami menghitung biaya dengan total berat, dan kami juga menambahkan biaya yang harus dikeluarkan oleh negara pengiriman. Langkah terakhir di sini adalah untuk mendaftarkan tarif, jadi tambahkan bagian terakhir ini:

Berikut adalah keseluruhan kode untuk metode ini jika Anda mengalami kesulitan mengikutinya:

Jika sekarang Anda mencoba melihat keranjang atau pergi ke halaman checkout dan memilih negara yang tersedia untuk pengiriman ini, Anda akan mendapatkan biaya pengiriman yang ditampilkan dengan metode pengiriman kustom ini. Berikut adalah gambar dengan negara dari zona 3:

Cost of our custom shipping method with a shipping country from zone 3

Menambahkan Pembatasan

Karena kami telah mengizinkan metode pengiriman untuk mendaftarkan tarifnya meskipun jumlah berat keranjang kita melebihi batas, kita harus menambahkan beberapa batasan. Pembatasan kami akan memberitahu pelanggan bahwa pesanan tersebut tidak dapat dikirim karena beratnya.

Sorry 120 kg exceeds the maximum weight of 100 kg for TutsPlus Shipping

Fungsi Pembatasan

Dalam fungsi kami, kita akan mencari metode pengiriman yang telah dipilih. Jika metode ini adalah TutsPlus_Shipping_Method maka kami akan memeriksa batas beratnya dan berat totalnya dalam keranjang. Jika berat dari keranjang melebihi batas berat, kita akan memberi tahu pelanggan kita.

Setelah filter woocommerce_shipping_methods tambahkan kode ini:

Kita mendapatkan paket yang dipisahkan oleh pengiriman. Jika semua produk menggunakan pengiriman yang sama, itu akan mengembalikan hanya satu paket dengan semua produknya. Setelah itu, kita mendapatkan metode yang dipilih, dan kemudian untuk setiap paket, kami memeriksa apakah paket tersebut dikirimkan dengan metode pengiriman kita.

Jika paket itu dikirim dengan metode pengiriman kita, kita menetapkan batas berat dari pengaturannya, dan setelah itu kita menghitung total berat paket kita. Jika berat total melebihi batas berat kita, maka ia akan memberitahukan pelanggan.

Memberitahu pada Pembaruan Pesanan

Pembaruan pesanan terjadi setiap kali pelanggan mengubah sesuatu di halaman checkout. Kita akan menambahkan fungsi tutsplus_validate_order ke action woocommerce_review_order_before_cart_contents. Tindakan ini dipanggil setelah semuanya telah ditetapkan sehingga kita bisa mendapatkan metode pengiriman yang dipilih dari sesi dan paket dari pengiriman. Begitu pelanggan mengubah sesuatu, tindakan ini akan memicu fungsi kita dan menambahkan pemberitahuan jika perlu.

Tambahkan kode ini setelah fungsi tutsplus_validate_order kita:

Memberitahu pada Checkout

Saat pelanggan mengklik tombol untuk memesan atau membelinya, WooCommerce akan mengolah semua data penagihan dan pengiriman di samping konten keranjang dan pengiriman yang dipilih.

Jika ada pemberitahuan kesalahan WooCommerce, itu akan menghentikan proses checkout dan menampilkan semua pemberitahuan kesalahan tersebut kepada pelanggan. Karena kita telah menciptakan sebuah fungsi yang menggunakan sesi untuk mendapatkan metode pengiriman yang dipilih, kita harus menambahkan fungsi ini ke tindakan yang akan dipicu setelah sesi telah ditetapkan. Tindakan yang akan memicu sebelum WooCommerce memeriksa apakah ada pemberitahuan kesalahan adalah woocommerce_after_checkout_validation.

Mari menambahkan fungsi kami ke tindakan itu:

Kode Lengkap

Berikut adalah kode lengkap untuk metode pengiriman kustom ini, jadi jika Anda mengalami masalah saat mengikuti tutorial ini, Anda dapat melihat di sini:

Kesimpulan

API Pengiriman WooCommerce memungkinkan Anda membuat metode pengiriman sendiri dengan langkah-langkah sederhana. Keterbatasan dan ketersediaan dapat diatur di dalam metode pengiriman saat menghitung ketersediaan atau biaya untuk metode pengiriman, namun juga dapat ditetapkan di luar metode pengiriman dengan menggunakan action WooCommerce.

Jika Anda mencari utilitas lain untuk membantu Anda membangun set alat yang berkembang untuk WordPress atau kode untuk belajar dan menjadi lebih berpengalaman di WordPress, jangan lupa untuk melihat apa yang telah tersedia di Envato Market.

Jika Anda memiliki pertanyaan tentang ini atau metode pengiriman lainnya, Anda dapat mempostingnya di komentar di bawah ini. Anda juga bisa mengikuti saya di blog saya atau di twitter @igorbenic.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.