Filter & Event

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

FilterFungsi
sejoli/commerce/checkout_login_formMengganti form login inline di halaman checkout Commerce — mis. untuk login 2FA/OTP milik plugin lain.
sejoli/payment/duitku/item-detailsMengubah daftar item yang dikirim ke gateway Duitku — defaultnya adalah array siap pakai dari helper item details.
sejoli_commerce/embed/config, -style, -wordingMengubah konfigurasi, warna, dan teks katalog embed.
sejoli_commerce/product_detail/sectionsMenambah/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/sectionsMenambah 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):

php
add_filter( 'sejoli_commerce/product_detail/sections', function ( array $sections, int $product_id ) {
    if ( ! my_plugin_product_has_silabus( $product_id ) ) {
        return $sections; // tanpa silabus → halaman default utuh.
    }
    // Nilai array = HTML section siap-echo, dirender berurutan sesuai urutan array.
    $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.

php
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 );
php
add_filter( 'sejoli_commerce/product_modal/sections', function ( string $content, int $product_id ) {
    return $content . my_plugin_render_silabus_preview( $product_id ); // judul + durasi + tipe saja
}, 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).

EventDi manaDetail (event.detail)Kegunaan
sejoli-commerce:embed-readyelemen katalog (bubbles ke document)target, config, stateHook saat shell katalog selesai dirender
sejoli-commerce:embed-cart-updateddocumentcountSetiap keranjang berubah — sinkronkan widget kustom Anda
storage (bawaan browser)windowkey = sjc_embed_cart::{url-commerce}Sinkronisasi antar tab browser

API JavaScript (Embed)

js
// Menambah produk ke keranjang sitewide (mengembalikan Promise).
sejoliCommerceEmbedCart.add(productId, qty);

// Jumlah item saat ini.
sejoliCommerceEmbedCart.count();

Last updated Oct 9, 2026