Role-Based Discount WooCommerce menjadi solusi yang saya bangun saat pemilik toko minuman membutuhkan harga bertingkat tanpa membuat toko terpisah atau bergantung pada plugin diskon yang terlalu kaku. Artikel ini adalah studi kasus dari pengalaman pribadi saya, bukan tutorial generik. Saya akan memandu Anda lewat proses implementasinya, mulai dari setup environment hingga pengujian produk akhir. Mari langsung masuk ke studinya.
Setup Environment Development
Sebelum menulis kode, saya menyiapkan environment development yang rapi agar iterasi bisa cepat dan terisolasi. Saya menginstal LocalWP untuk local WordPress development karena tool ini memudahkan pembuatan instalasi WordPress yang terpisah. Saya memakai tema Storefront sekaligus membuat child theme-nya, sebab Storefront adalah tema resmi WooCommerce dan cocok sebagai fondasi proyek ini. Saya juga mengonfigurasi Prepros sebagai build tool dengan live reload. Kombinasi itu menghemat banyak waktu saat saya menguji perubahan di admin maupun frontend. Setelah environment siap, baru saya mulai membangun sistem diskonnya.
Alur Pengembangan
Mendaftarkan Custom User Role di WordPress
Langkah pertama adalah membuat custom user role agar tipe pelanggan bisa dibedakan dengan jelas. Selain role bawaan Customer, saya menambahkan tiga role baru: Special Customer, Reseller, dan Super Reseller. Ketiga role ini menjadi dasar logika harga yang akan diterapkan di cart, product page, dan panel admin. Tanpa pemisahan role yang tegas sejak awal, sistem diskon berbasis role akan sulit dipelihara ketika jumlah tipe pelanggan bertambah.
Implementasi Diskon untuk Simple Product
Setelah role siap, saya menambahkan custom discount field di product editor untuk simple product. Tujuannya agar admin toko bisa mengatur persentase diskon per tipe pelanggan langsung dari halaman produk. Saya menambahkan tiga field di panel editor Simple Product: Special Customer Discount (%), Reseller Discount (%), dan Super Reseller Discount (%). Saya juga menulis JavaScript agar harga setelah diskon dihitung dan ditampilkan secara dinamis saat admin mengubah nilai persentase. Dengan begitu, admin tidak perlu menghitung manual setiap kali mengatur harga promo untuk tiap role.
Implementasi Diskon untuk Variable Product
Untuk variable product seperti kopi dengan tipe dan ukuran berbeda, pendekatan yang sama tetap dipakai, tetapi harus memperhitungkan setiap variation. Bagian ini lebih kompleks karena field diskon perlu muncul di tiap product variation, lalu perhitungan harga real-time harus tetap akurat. Saya menambahkan field diskon di level variation dan menjaga agar kalkulasi tetap sinkron saat admin mengubah persentase per role. Hasilnya, setiap kombinasi atribut tetap punya aturan diskonnya sendiri tanpa mengganggu harga reguler pelanggan biasa.
Mengatur Default Diskon Berdasarkan Tipe Produk
Agar admin tidak mengulang input yang sama berulang kali, saya menambahkan default discount berdasarkan tipe produk. Nilai default ini bersifat sebagai titik awal yang bisa diubah per produk bila diperlukan. Pendekatan tersebut menghemat waktu setup katalog, terutama saat toko punya banyak SKU dengan pola diskon yang mirip antar role. Di praktiknya, default value ini menjadi salah satu bagian yang paling membantu operasional toko harian.
Menampilkan Informasi Diskon di Frontend
Setelah admin bisa mengatur diskon, pengguna perlu melihat harga khusus mereka. Saya menambahkan fitur untuk menampilkan persentase diskon yang berlaku beserta harga akhir di halaman produk, tetapi hanya untuk pengguna dengan role khusus. Pelanggan reguler tetap melihat harga normal tanpa label diskon role. Cara ini menjaga transparansi bagi reseller tanpa membingungkan customer biasa yang tidak berhak mendapat harga bertingkat.
Mengimplementasikan AJAX untuk Kalkulasi Harga Dinamis

Pada variable product, informasi diskon harus berubah saat pengguna memilih variation yang berbeda. Saya mengimplementasikan solusi AJAX agar data diskon yang benar diambil setiap kali sebuah variation dipilih. Tanpa AJAX, halaman bisa menampilkan harga role yang stale atau tidak sesuai variation aktif. Dengan request dinamis, pengalaman belanja tetap sinkron antara atribut yang dipilih, persentase diskon role, dan harga final yang tampil di frontend.
Demo pada Variable Product
Untuk memverifikasi perilaku real-time-nya, saya menguji alur pemilihan variation pada produk variable di frontend. Setiap kali atribut berubah, label diskon role dan harga akhir ikut menyesuaikan tanpa reload halaman penuh. Demo lengkapnya bisa Anda coba langsung di https://case-study.rizwanaritonang.com/shop-1.
Pengujian Lintas Role Pengguna
Untuk memastikan semuanya berjalan benar, saya menguji sistem dengan akun berbeda untuk tiap role. Saya membuat test account per role dan memverifikasi bahwa regular customer melihat harga normal, special customer melihat Special Customer Discount beserta harga yang sudah turun, reseller melihat diskon dan harga spesifik mereka, serta super reseller melihat diskon mereka dengan harga terendah. Anda bisa menguji sistem ini sendiri di https://case-study.rizwanaritonang.com/shop-1 menggunakan kredensial berikut.
- Role: Customer — username: JustCustomer — password: LJneZd8YDd8J)6BwD$A#&13F
- Role: Special Customer — username: TestSpecialCustomer — password: Mw@okNZoNdlOLFtbgvvv3&vt
- Role: Reseller Account — username: ResellerAccount — password: LeRLEgvayJVcs*m&sjDSJSu%
Kesimpulan
Membangun Role-Based Discount WooCommerce adalah proyek yang menantang sekaligus bermanfaat. Beberapa takeaway utama dari implementasi ini: custom user role penting untuk membedakan tipe pelanggan, custom meta field memberi opsi diskon yang fleksibel bagi administrator, kalkulasi JavaScript meningkatkan UX di sisi admin maupun customer, AJAX krusial untuk update dinamis pada variable product, dan default value bisa menghemat waktu setup yang signifikan bagi admin toko. Solusi ini memungkinkan pemilik toko minuman menawarkan pricing bertingkat ke berbagai tipe pelanggan tanpa perlu toko terpisah atau plugin yang berlebihan. Pendekatan ini cukup fleksibel dan maintainable untuk dikembangkan ke kebutuhan e-commerce lain. Silakan coba demonya dan beri tahu saya jika ada pertanyaan atau saran perbaikan.

