Case study 03 · WooCommerce · Apr – Sep 2026Studi kasus 03 · WooCommerce · Apr – Sep 2026

REDAS.

A members' store for a real estate association, where every PDF a customer buys is stamped with its own serial number and can be traced back to the order that bought it.Toko anggota untuk asosiasi real estate, di mana setiap PDF yang dibeli diberi nomor serial sendiri dan bisa dilacak ke pesanan yang membelinya.

Visit live siteKunjungi websiteredas.com

RolePeran
Developer of the store's custom PHPDeveloper PHP custom toko
ClientKlien
REDAS · via Digital Marketing Buzz
Stack
WordPress · WooCommerce · FPDI · Flatsome · PayNow
Status
Live at redas.com ↗Online di redas.com ↗
160+custom functionsfungsi custom
45feature sectionsbagian fitur
4content shortcodesshortcode konten
6months, Apr – Sepbulan, Apr – Sep

The briefKebutuhannya

Every copy
has an owner.
Setiap salinan
punya pemilik.

The association sells documents and publications to members and the public. Each copy had to be traceable to its order, members needed their own prices, and nothing could depend on someone stamping and emailing PDFs by hand. WooCommerce gave the shop; everything that made it REDAS's shop I wrote as custom PHP in the child theme.Asosiasi menjual dokumen dan publikasi ke anggota dan umum. Setiap salinan harus bisa dilacak ke pesanannya, anggota butuh harga sendiri, dan tidak boleh ada proses manual menempelkan serial lalu mengirim PDF lewat email. WooCommerce menyediakan tokonya; semua yang membuatnya jadi toko REDAS saya tulis sebagai PHP custom di child theme.

What I builtYang saya bangun

  • The serial engine, with its own tracking tableMesin serial, dengan tabel tracking sendiri
  • FPDI stamping and secure download linksStamping FPDI dan link download yang aman
  • Bundles, member pricing and a custom checkoutBundle, harga anggota dan checkout custom
  • Order admin columns and an export pageKolom admin pesanan dan halaman export
  • Storefront changes and content shortcodesPerubahan tampilan toko dan shortcode konten

Already in placeSudah tersedia

  • WordPress, WooCommerce and the Flatsome themeWordPress, WooCommerce dan tema Flatsome
  • The payment gateway and PayNow accountsAkun payment gateway dan PayNow
  • The PDF publications themselvesFile PDF publikasinya sendiri

From checkout to downloadDari checkout sampai download

No hands
in the loop.
Tanpa
proses manual.

Once payment clears, the order moves through every step on its own. The customer gets a link, and each download produces a PDF carrying that copy's serial.Begitu pembayaran berhasil, pesanan melewati setiap langkah dengan sendirinya. Pelanggan menerima link, dan setiap download menghasilkan PDF yang membawa serial salinan tersebut.

01 · checkout

Checkout

Member price, validated fields, PayNow or cardHarga anggota, field tervalidasi, PayNow atau kartu

02 · order

Order paidPesanan lunas

Bundles split into components; virtual orders complete themselvesBundle dipecah jadi komponen; pesanan virtual selesai otomatis

03 · serial

Serials issuedSerial dibuat

One per copy, numbered per file code, reset each yearSatu per salinan, bernomor per kode file, reset tiap tahun

04 · email

Secure linkLink aman

Order email carries a link tied to the serial and orderEmail pesanan membawa link yang terikat ke serial dan pesanan

05 · fpdi

Stamped PDFPDF ber-serial

FPDI writes the serial onto the file; downloads are countedFPDI menulis serial ke file; jumlah download dicatat

What's insideIsinya

Seven systems,
one store.
Tujuh sistem,
satu toko.

All of it lives in the child theme as custom PHP, CSS and JavaScript, written against WooCommerce hooks rather than by editing plugins.Semuanya ada di child theme sebagai PHP, CSS dan JavaScript custom, ditulis lewat hook WooCommerce tanpa mengubah plugin.

01

Serial engineMesin serial

The heart of the store. Every copy sold gets a serial that is unique, sequential within its publication, and recorded in its own table.Inti dari toko ini. Setiap salinan yang terjual mendapat serial yang unik, berurutan di dalam publikasinya, dan dicatat di tabel sendiri.

  • Custom serial_tracking table: serial, file code, order, item, copy position, downloadsTabel custom serial_tracking: serial, kode file, pesanan, item, posisi salinan, download
  • A product map links each product to its file code and source PDFPeta produk menghubungkan setiap produk ke kode file dan PDF sumbernya
  • Sequence counted per file code and restarted every yearUrutan dihitung per kode file dan dimulai ulang setiap tahun
  • Each purchase is per project; the project name is stamped as a watermark on every pageSetiap pembelian per proyek; nama proyek ditempel sebagai watermark di setiap halaman
  • Quantity 3 means three serials, one per copyQuantity 3 berarti tiga serial, satu per salinan
  • Issued at checkout and on status change, with a sweep for any order that was missedDibuat saat checkout dan saat status berubah, dengan pengecekan untuk pesanan yang terlewat

How a serial is builtCara serial disusun

MC042026000046
MC04 · SC02
Document and edition: Main Contract 4th Edition, Sub-Contract 2nd EditionDokumen dan edisi: Main Contract 4th Edition, Sub-Contract 2nd Edition
2026
The current yearTahun berjalan
000046
Six-digit number, unique for every PDF sold. Buy two files and you get two different numbersEnam digit, unik untuk setiap PDF yang terjual. Beli dua file berarti dua nomor yang berbeda
Line 2Baris 2
The Name of Project the buyer types at checkout, capped at 85 characters so the stamp never wrapsName of Project yang ditulis pembeli saat checkout, dibatasi 85 karakter supaya stempel tidak pecah baris
A purchased cover with its serial and project line (test data)Cover yang dibeli dengan serial dan baris proyek (data tes)
02

Stamped PDF deliveryPengiriman PDF ber-serial

Customers never receive a raw file. Each download is generated on request with the copy's serial written into the PDF.Pelanggan tidak pernah menerima file mentah. Setiap download dibuat saat diminta, dengan serial salinan tertulis di PDF-nya.

  • Download links in the order email, tied to a serial and an orderLink download di email pesanan, terikat ke serial dan pesanan
  • Each request is checked against that order's serial map; anything else is refusedSetiap permintaan dicek ke peta serial pesanan; selain itu ditolak
  • FPDI imports the source PDF and stamps the serial on itFPDI mengimpor PDF sumber dan menempelkan serialnya
  • Download count and last download date recorded per serialJumlah download dan tanggal download terakhir dicatat per serial
03

Bundles

Some publications are sold as a set. A bundle had to behave like one product in the cart and like several products for serials.Beberapa publikasi dijual sebagai satu set. Bundle harus terlihat seperti satu produk di keranjang, tapi seperti beberapa produk untuk serial.

  • Bundles detected and split into their component items on checkoutBundle dideteksi dan dipecah jadi item komponennya saat checkout
  • Virtual component products created where neededProduk komponen virtual dibuat bila diperlukan
  • Every component gets its own serial and its own downloadSetiap komponen mendapat serial dan download sendiri
  • Component lines hidden on the thank-you page so the order still reads cleanlyBaris komponen disembunyikan di halaman terima kasih agar pesanan tetap rapi dibaca
04

Member pricingHarga anggota

Members of REDAS pay less, and the discount differs per publication.Anggota REDAS membayar lebih murah, dan potongannya berbeda per publikasi.

  • Discount configured per productDiskon diatur per produk
  • "REDAS Member" choice on the product page, with the price updating livePilihan "REDAS Member" di halaman produk, dengan harga yang langsung berubah
  • Validation before add to cart, and the same choice editable in the cartValidasi sebelum add to cart, dan pilihan yang sama bisa diubah di keranjang
  • Cart totals recalculated from the selectionTotal keranjang dihitung ulang dari pilihan tersebut
Product page: both prices and the required "REDAS Member" choiceHalaman produk: dua harga dan pilihan wajib "REDAS Member"
Cart with the member price applied and "Amend My Order"Keranjang dengan harga anggota dan tombol "Amend My Order"
05

Checkout

A checkout shaped for an association: the right fields, clear errors, and fewer ways to type something wrong.Checkout yang disesuaikan untuk asosiasi: field yang tepat, pesan error yang jelas, dan lebih sedikit peluang salah ketik.

  • Custom and conditional fields (e.g. organisation), saved to the orderField custom dan kondisional (misalnya organisasi), disimpan ke pesanan
  • One phone field with a country code picker and a digit limit per countrySatu field telepon dengan pemilih kode negara dan batas digit per negara
  • Email confirmation checked as the customer typesKonfirmasi email dicek saat pelanggan mengetik
  • Input restrictions, coupons off, guest email synced to billingPembatasan input, kupon dimatikan, email tamu disinkronkan ke billing
  • "Amend my order" button and automatic completion of paid virtual ordersTombol "Amend my order" dan penyelesaian otomatis pesanan virtual yang lunas
Member, company and UEN, confirm email, phone with country code, Name of Project, card or PayNowAnggota, perusahaan dan UEN, konfirmasi email, telepon dengan kode negara, Name of Project, kartu atau PayNow
06

Admin & exportAdmin & export

The association's staff work from the orders screen, so it shows what they need without opening each order.Staf asosiasi bekerja dari layar pesanan, jadi layar itu menampilkan yang mereka butuhkan tanpa membuka tiap pesanan.

  • Custom order columns on both HPOS and legacy screensKolom pesanan custom di layar HPOS maupun legacy
  • Payment transaction link, scrollable wide table, unused columns removedLink transaksi pembayaran, tabel lebar yang bisa di-scroll, kolom yang tidak dipakai dihapus
  • An export page under the WooCommerce menu that builds files from order and product detailsHalaman export di menu WooCommerce yang membuat file dari detail pesanan dan produk
  • Branded order emailsEmail pesanan dengan branding
07

Storefront & contentToko & konten

A catalogue that reads like a publications list rather than a generic shop, plus the association's news and events.Katalog yang terasa seperti daftar publikasi, bukan toko biasa, ditambah berita dan event asosiasi.

  • Price format, "Click to order" button, product cards that only open from the buttonFormat harga, tombol "Click to order", kartu produk yang hanya terbuka dari tombolnya
  • Cart badge counter, mini cart, empty cart and product page layout fixesCounter badge keranjang, mini cart, keranjang kosong dan perbaikan layout halaman produk
  • [redas_announcements] and an advocacy variant, filterable by year[redas_announcements] dan varian advocacy, bisa difilter per tahun
  • [industry_events] and a resources list, with 12-hour times and events that expire the day after they end[industry_events] dan daftar resource, dengan format jam 12 jam dan event yang kedaluwarsa sehari setelah selesai
The REDAS homepageHomepage REDAS

Engineering notesCatatan teknis

The hard
parts.
Bagian yang
sulit.

Decisions that shaped the code, described without sharing any of it.Keputusan yang membentuk kodenya, dijelaskan tanpa membagikan kodenya.

01 · sequences

Numbers that restart every yearNomor yang mulai ulang tiap tahun

Sequences are counted per file code within the current year, straight from the tracking table. An admin-only check shows the next number for every file code and simulates a future year to prove the reset.Urutan dihitung per kode file di tahun berjalan, langsung dari tabel tracking. Pengecekan khusus admin menampilkan nomor berikutnya untuk setiap kode file dan mensimulasikan tahun depan untuk membuktikan reset-nya.

02 · hpos

Two order storages at onceDua penyimpanan pesanan sekaligus

WooCommerce was moving orders to HPOS. Every read and write supports both HPOS and legacy post meta, and a one-time migration moved existing serial data across.WooCommerce sedang memindahkan pesanan ke HPOS. Setiap baca dan tulis mendukung HPOS dan post meta legacy, dan migrasi sekali jalan memindahkan data serial yang sudah ada.

03 · traceability

A serial per copy, not per orderSerial per salinan, bukan per pesanan

Each copy is stored with its position in the order line, so three copies of one report are three traceable files. A leaked PDF points to exactly one purchase.Setiap salinan disimpan bersama posisinya di baris pesanan, jadi tiga salinan satu laporan adalah tiga file yang bisa dilacak. PDF yang bocor menunjuk tepat ke satu pembelian.

04 · safety

Maintenance tools that stay offAlat perawatan yang tetap mati

Reset, migration and test tools exist for staging but are admin-only and disabled by default, so production serials cannot be wiped by a stray request.Alat reset, migrasi dan tes tersedia untuk staging, tapi khusus admin dan mati secara default, jadi serial di production tidak bisa terhapus oleh request yang nyasar.