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:

  1. Data form disimpan di dalam tabel raksasa wp_postmeta atau wp_options. Ketika ada puluhan ribu respon tamu, performa database melambat drastis (database bloat) dan website menjadi berat.
  2. 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.
  3. 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

Arsitektur SaaS Hooks dan Filter WDP RSVPKit
Arsitektur SaaS Hooks dan Filter WDP RSVPKit

1. Skema Database Terisolasi: wp_wdp_rsvp_responses

WDP RSVPKit tidak mencemari tabel wp_postmeta. Seluruh respon tamu disimpan pada tabel khusus berindeks cepat:

SQL
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:
PHP
  $diet = WDP_RSVP_Helper::get_custom_field($response_id, 'cf_dietary_needs');

3. Daftar Action Hooks Utama untuk Pengembang

Nama HookTitik EksekusiParameter yang DikirimContoh Penggunaan
wdp_rsvp_before_submitSebelum data disimpan$post_id, $sanitized_dataValidasi custom, blocking IP spam
wdp_rsvp_after_response_savedSetelah data masuk DB$response_id, $post_id, $dataPush ke external CRM, trigger notifikasi custom
wdp_rsvp_before_wa_dispatchSebelum kirim WA$phone, $message, $gatewayFilter template pesan atau ganti gateway dinamis
wdp_rsvp_before_gsheet_pushSebelum push ke Sheet$payload, $webhook_urlMenambahkan 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):

PHP
// 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_saved untuk 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

Gunakan Asynchronous (Non-Blocking): Saat memanggil API eksternal via hook, selalu gunakan opsi 'blocking' => false pada wp_remote_post agar pengunjung website tidak mengalami jeda loading saat mengirim formulir.
Gunakan Child Theme atau Must-Use Plugin: Selalu simpan script hook kustom Anda di dalam child theme atau direktori mu-plugins agar modifikasi kode tidak hilang saat tema utama diperbarui.

Pertanyaan yang Sering Diajukan (FAQ)

Apakah pengembang web dapat menambahkan validasi logika kustom sebelum form disubmit? +
Sangat bisa. Pengembang dapat memanfaatkan action hook wdp_rsvp_before_submit untuk menyematkan validasi khusus, seperti pembatasan usia atau verifikasi nomor KTP.
Di tabel database mana seluruh respon konfirmasi RSVPKit disimpan? +
Respon disimpan pada tabel khusus terindeks cepat wp_wdp_rsvp_responses, menjamin performa query kilat tanpa membebani tabel wp_postmeta.
Bagaimana cara menambahkan kolom kustom baru di formulir tanpa mengubah kode inti plugin? +
Gunakan fitur Custom Fields Repeater di Metabox atau filter wdp_rsvp_form_fields. Setiap kolom kustom otomatis diberi prefiks cf_* dan disimpan rapi dalam format JSON.
Apakah WDP RSVPKit mendukung instalasi WordPress Multisite (WaaS / SaaS)? +
Ya. RSVPKit mengisolasi data per subsite ID, sehingga sangat siap digunakan untuk platform SaaS undangan otomatis multi-tenant.
Bisakah data respon RSVPKit dihubungkan ke webhook eksternal atau sistem CRM lain via hook? +
Bisa. Gunakan hook wdp_rsvp_after_response_saved untuk memicu webhook kustom ke Zapier, Make, n8n, atau API server milik Anda sendiri.