Plugin internal untuk menambah fitur pre-order di toko WooCommerce. Dibuat sendiri supaya tidak bergantung pada plugin pre-order pihak ketiga.
Versi saat ini: 1.0.3
Toko perlu menjual sebagian produk dengan skema pre-order: pembayaran dilakukan di muka, barang dikirim beberapa hari kemudian setelah stok siap. WooCommerce sendiri tidak punya fitur ini, dan kami tidak ingin menambah plugin berbayar untuk sesuatu yang cakupannya cukup spesifik.
Plugin ini menangani penanda produk, perhitungan estimasi kirim, status order khusus, dan email konfirmasi.
Tiap produk bisa ditandai sebagai pre-order lewat field di halaman edit produk, lengkap dengan lead time (jumlah hari sampai barang siap). Lead time bisa berbeda per produk.
Ketika sebuah order yang berisi minimal satu produk pre-order selesai dibayar, plugin mengalihkan status order ke status khusus "Pre-Order". Estimasi tanggal kirim dihitung dari tanggal bayar dan disimpan di order sebagai nilai tetap, jadi tidak ikut berubah kalau lead time produk diedit di kemudian hari. Order campuran (ada produk pre-order dan produk biasa) diperlakukan sebagai satu kesatuan: seluruh order ikut status pre-order dan dikirim bersamaan mengikuti lead time terpanjang.
Alur status lengkapnya:
pending -> [bayar] -> processing -> [otomatis] -> preorder
-> [admin, barang siap] -> processing -> [admin, sudah dikirim] -> completed
Perpindahan ke "preorder" terjadi otomatis. Dua langkah terakhir dilakukan admin secara manual.
Plugin ini tidak terikat ke metode pembayaran atau kurir tertentu. Interceptor status memakai hook umum WooCommerce, bukan hook spesifik gateway. Konsekuensinya: saat toko berpindah dari pembayaran transfer manual (BACS) di staging ke Midtrans di production, atau saat plugin ongkir diaktifkan, kode plugin ini tidak perlu diubah sama sekali.
Penyimpanan data juga memakai API WooCommerce standar, sehingga aman dengan HPOS (High Performance Order Storage).
Field produk dibuat memakai field native WooCommerce, bukan ACF, supaya plugin tidak punya ketergantungan ke plugin lain.
woo-preorder.php Bootstrap, konstanta, pengecekan dependency
includes/
class-wpo-helpers.php Fungsi bersama, perhitungan tanggal
class-wpo-settings.php Tab pengaturan di WooCommerce Settings
class-wpo-status.php Registrasi status order "Pre-Order"
class-wpo-product.php Field pre-order di halaman edit produk
class-wpo-order.php Interceptor status dan penyimpanan estimasi
class-wpo-frontend.php Tombol, badge, dan notice di sisi pembeli
class-wpo-emails.php Pendaftar email
class-wpo-email-preorder.php Class email konfirmasi pre-order
templates/emails/ Template email, bisa dioverride dari theme
assets/css/preorder.css Gaya untuk badge dan notice
Tiap file di folder includes menangani satu bagian saja, supaya mudah dilacak saat ada perubahan atau perbaikan.
- Kompres folder
woo-preordermenjadi zip, atau pakai zip yang sudah disiapkan. - Di admin WordPress, masuk ke Plugins, Add New, Upload Plugin, pilih zip, lalu install.
- Aktifkan. WooCommerce harus sudah aktif lebih dulu; kalau tidak, plugin akan menampilkan peringatan dan berhenti tanpa menyebabkan error.
Menandai produk sebagai pre-order: buka halaman edit produk, masuk ke tab Inventory, centang "Produk Pre-Order", lalu isi lead time dalam hari.
Pengaturan global ada di WooCommerce, Settings, tab Pre-Order. Di situ bisa diatur cara menghitung lead time (hari kalender atau hari kerja), daftar tanggal libur untuk mode hari kerja, dan teks notice yang tampil di halaman produk.
Email konfirmasi diatur di WooCommerce, Settings, Emails, bagian "Konfirmasi Pre-Order". Dari sana bisa diatur aktif atau tidaknya, subject, dan heading.
Repositori ini berisi source code plugin. File zip untuk instalasi tidak ikut disimpan di repo karena sifatnya hasil build, bukan sumber.
Saat ada perubahan, edit file di dalam folder ini lalu commit seperti
biasa. Tidak perlu membuat folder baru untuk tiap versi. Naikkan nomor
versi di header woo-preorder.php dan di konstanta WPO_VERSION setiap
ada perubahan yang berarti, supaya mudah melacak versi mana yang sedang
terpasang.
1.0.3 Interceptor juga menangani order yang langsung berstatus completed, sebagai pengaman bila gateway melewati status processing. -> ini versi sekarang
1.0.2 Perbaikan email konfirmasi yang tidak terkirim saat status diubah manual; sistem email dipastikan ter-load lebih dulu.
1.0.1 Perbaikan fatal error akibat class email dimuat sebelum class induk WooCommerce tersedia.
1.0.0 Versi awal.
Beberapa hal sengaja belum dimasukkan karena belum dibutuhkan: email notifikasi terpisah saat barang mulai dikirim, kuota maksimal pre-order per produk, dan penanganan pembayaran uang muka (DP). Kalau nanti diperlukan, fitur-fitur ini bisa ditambahkan menyusul.