Filter PHP dan event JavaScript yang tersedia di Sejoli Commerce untuk integrasi dan kustomisasi.
Kumpulan filter PHP dan event JavaScript yang disediakan Sejoli Commerce untuk kebutuhan integrasi.
Filter PHP
| Filter | Fungsi |
|---|
sejoli/commerce/checkout_login_form | Mengganti form login inline di halaman checkout Commerce — mis. untuk login 2FA/OTP milik plugin lain. |
sejoli/payment/duitku/item-details | Mengubah daftar item yang dikirim ke gateway Duitku — defaultnya adalah array siap pakai dari helper item details. |
sejoli_commerce/embed/config, -style, -wording | Mengubah konfigurasi, warna, dan teks katalog embed. |
sejoli_commerce/product_detail/sections | Menambah/menyisipkan section di body halaman detail produk (mode commerce-detail) — pintu integrasi kursus berkontainer produk: plugin kursus menambah section Silabus (accordion bab/pelajaran) bila produk punya silabus. |
sejoli_commerce/product_modal/sections | Menambah konten di modal detail embed (quick-view) — pasangan modal dari filter di atas. |
Detail product sections (kursus berkontainer produk)
Kedua filter selalu tersedia walau tidak ada yang memakainya — Commerce tidak memuat logika kursus apa pun; ia hanya menyuntikkan hasil filter.
sejoli_commerce/product_detail/sections — dikirim di render_commerce_product_detail (mode halaman produk commerce-detail):
add_filter( 'sejoli_commerce/product_detail/sections', function ( array $sections, int $product_id ) {
if ( ! my_plugin_product_has_silabus( $product_id ) ) {
return $sections;
}
$sections['silabus'] = '<section class="sjc-product-section sjc-product-silabus">'
. '<h3>Silabus</h3>' . my_plugin_render_silabus_accordion( $product_id )
. '</section>';
return $sections;
}, 10, 2 );
$sections masuk berisi section bawaan (kunci content = body halaman); tambah kunci baru untuk menyisipkan, ganti nilai content untuk mengganti.
- Kontrak return: array section (HTML siap-echo, dirender apa adanya — tanpa
wp_kses, karena markup kursus butuh struktur kaya) atau string HTML utuh pengganti seluruh body. Return invalid/kosong → markup default Commerce.
sejoli_commerce/product_modal/sections — dikirim di payload REST GET /sejoli-commerce/v1/catalog/products/{id} pada field content, sehingga modal quick-view embed ikut menampilkan hasilnya:
sejoli_commerce/export/product — dikirim di Export JSON untuk SETIAP produk (array data produk hasil perakitan; param kedua = product ID). Plugin kursus menambah data publiknya ke produk — mis. kunci silabus (struktur bab/pelajaran: judul + durasi + tipe + flag preview; tanpa konten pelajaran, buyer-safe seperti payload REST). Kontrak return: array produk; return invalid → produk dikeluarkan dari export.
add_filter( 'sejoli_commerce/export/product', function ( array $data, int $product_id ) {
if ( my_plugin_product_has_silabus( $product_id ) ) {
$data['silabus'] = my_plugin_silabus_public_structure( $product_id );
}
return $data;
}, 10, 2 );
add_filter( 'sejoli_commerce/product_modal/sections', function ( string $content, int $product_id ) {
return $content . my_plugin_render_silabus_preview( $product_id );
}, 10, 2 );
- Kontrak return: string HTML (modal merendernya sebagai HTML); array section di-implode dengan newline. Return invalid/kosong → konten default.
Event JavaScript (Embed)
Semua event di bawah tersedia saat script embed terpasang di halaman (lihat Katalog Embed).
| Event | Di mana | Detail (event.detail) | Kegunaan |
|---|
sejoli-commerce:embed-ready | elemen katalog (bubbles ke document) | target, config, state | Hook saat shell katalog selesai dirender |
sejoli-commerce:embed-cart-updated | document | count | Setiap keranjang berubah — sinkronkan widget kustom Anda |
storage (bawaan browser) | window | key = sjc_embed_cart::{url-commerce} | Sinkronisasi antar tab browser |
API JavaScript (Embed)
sejoliCommerceEmbedCart.add(productId, qty);
sejoliCommerceEmbedCart.count();