Arsitektur SaaS, Hooks & Filter API untuk Pengembang Web
Membedah arsitektur kode WDP RSVPKit yang dirancang khusus untuk agensi dan pengembang web profesional: tabel basis data terindeks cepat, sistem injeksi kolom kustom (
cf_*), 15+ action hooks/filters, dan skalabilitas multi-tenant SaaS.
Memahami Kebutuhan & Masalah Lapangan
Banyak agensi web dan software engineer yang membangun platform bisnis SaaS (Software-as-a-Service) atau WaaS (Website-as-a-Service) untuk pembuatan undangan digital otomatis. Ketika mereka menggunakan plugin form pihak ketiga umum:
- Data form disimpan di dalam tabel raksasa
wp_postmetaatauwp_options. Ketika ada puluhan ribu respon tamu, performa database melambat drastis (database bloat) dan website menjadi berat. - Ketiadaan action hooks dan filters resmi membuat pengembang terpaksa memodifikasi kode inti (core plugin hacking), yang berakibat fatal karena kode kustom mereka akan terhapus saat plugin diperbarui.
- Sulitnya menghubungkan data formulir dengan sistem CRM eksternal, aplikasi mobile, atau gateway WhatsApp internal agensi.
WDP RSVPKit dibangun dengan standar Engineering Discipline kelas atas: basis data terisolasi, skema relasional bersih, serta ketersediaan ekosistem developer hooks yang memungkinkan kustomisasi tanpa batas tanpa pernah menyentuh kode inti plugin.
Prasyarat Sebelum Memulai
Panduan ini ditujukan bagi:
- Pengembang web (web developer) dan agensi teknis dengan pemahaman PHP, WordPress Hooks API, dan Elementor Developer Toolkit.
- Menjalankan WDP RSVPKit v1.4.0 pada lingkungan WordPress staging atau produksi.
Pokok Bahasan & Konfigurasi Teknis
1. Skema Database Terisolasi: wp_wdp_rsvp_responses
WDP RSVPKit tidak mencemari tabel wp_postmeta. Seluruh respon tamu disimpan pada tabel khusus berindeks cepat:
CREATE TABLE wp_wdp_rsvp_responses (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
post_id BIGINT(20) UNSIGNED NOT NULL,
guest_name VARCHAR(255) NOT NULL,
status VARCHAR(50) NOT NULL,
pax INT(11) DEFAULT 1,
session VARCHAR(100) DEFAULT NULL,
phone VARCHAR(50) DEFAULT NULL,
wishes TEXT DEFAULT NULL,
sticker VARCHAR(100) DEFAULT NULL,
custom_data LONGTEXT DEFAULT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY post_id_idx (post_id),
KEY status_idx (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Struktur ini memastikan pencarian data puluhan ribu tamu tetap secepat kilat (under 5ms query execution).
2. Injeksi Kolom Kustom Dinamis (cf_*)
Pengembang dapat menambahkan pertanyaan kustom pada formulir (misal: "Pilihan Menu Diet", "Hotel Shuttle", "Rencana Kedatangan"):
- Setiap kolom kustom otomatis diberi namespace prefiks
cf_(misal:cf_dietary_needs). - Data kolom kustom disanitasi secara ketat dan disimpan dalam format JSON terstruktur pada kolom
custom_data. - Data ini dapat dipanggil kembali kapan saja via helper function resmi:
$diet = WDP_RSVP_Helper::get_custom_field($response_id, 'cf_dietary_needs');
3. Daftar Action Hooks Utama untuk Pengembang
| Nama Hook | Titik Eksekusi | Parameter yang Dikirim | Contoh Penggunaan |
|---|---|---|---|
wdp_rsvp_before_submit | Sebelum data disimpan | $post_id, $sanitized_data | Validasi custom, blocking IP spam |
wdp_rsvp_after_response_saved | Setelah data masuk DB | $response_id, $post_id, $data | Push ke external CRM, trigger notifikasi custom |
wdp_rsvp_before_wa_dispatch | Sebelum kirim WA | $phone, $message, $gateway | Filter template pesan atau ganti gateway dinamis |
wdp_rsvp_before_gsheet_push | Sebelum push ke Sheet | $payload, $webhook_url | Menambahkan kolom kustom tambahan ke spreadsheet |
4. Contoh Implementasi Hook PHP di functions.php
Berikut adalah contoh praktis bagi agensi yang ingin mengirimkan data konfirmasi tamu ke sistem CRM eksternal (misal n8n atau webhook internal agensi):
// Letakkan pada functions.php tema anak (child theme)
add_action('wdp_rsvp_after_response_saved', 'agency_push_to_internal_crm', 10, 3);
function agency_push_to_internal_crm($response_id, $post_id, $data) {
$crm_endpoint = 'https://n8n.agencyanda.com/webhook/rsvp-collector';
$payload = [
'event_id' => $post_id,
'guest_name' => $data['guest_name'],
'status' => $data['status'],
'pax_count' => $data['pax'],
'session' => $data['session'],
'wishes' => $data['wishes'],
'source' => 'WDP_RSVPKit_SaaS'
];
wp_remote_post($crm_endpoint, [
'blocking' => false, // Non-blocking agar proses pengunjung tidak terhambat
'headers' => ['Content-Type' => 'application/json'],
'body' => wp_json_encode($payload)
]);
}
Studi Kasus Nyata: Pernikahan Andy & Zhea
Agensi pembuat website Andy & Zhea membangun platform pembuatan undangan otomatis (WaaS) dengan 500+ klien aktif:
- Tantangan: Memastikan penambahan fitur custom (seperti integrasi ke aplikasi iPad meja VIP keluarga) tidak merusak sistem undangan klien lain saat plugin RSVPKit diupdate ke versi baru.
- Penerapan: Tim engineer agensi memanfaatkan hook
wdp_rsvp_after_response_saveduntuk mem-push data secara real-time ke WebSocket server lokal di ballroom hotel. - Hasil: Begitu tamu mengonfirmasi hadir, iPad di ruang rias pengantin berbunyi menampilkan nama kerabat yang baru saja konfirmasi. Arsitektur modular ini bekerja stabil 100% tanpa mengubah sebaris pun kode asli WDP RSVPKit.
Tips & Praktik Terbaik
'blocking' => false pada wp_remote_post agar pengunjung website tidak mengalami jeda loading saat mengirim formulir.