Wordpress Gutenberg Blocks Block Editor Block JSON Dynamic Blocks Rendering Strategies
Selesai membaca dokumentasi ini?
Kembali ke rujukan utama WordPress untuk melanjutkan topik lainnya.
Kembali ke rujukan utama WordPress untuk melanjutkan topik lainnya.
Gutenberg adalah sistem block editor di WordPress. Isinya bukan cuma editor visual, tapi juga model konten berbasis blok, API registration untuk block, metadata block.json, serta strategi rendering yang bisa dilakukan di client, server, atau gabungan keduanya.
Kalau dulu WordPress dipakai terutama sebagai halaman dengan editor berbasis HTML klasik, Gutenberg memindahkan cara kerja konten ke unit kecil yang bisa disusun ulang: paragraph, heading, image, query loop, custom block, dan seterusnya. Untuk developer, yang penting bukan sekadar “bisa bikin blok”, tapi memahami kapan block editor memang cocok, bagaimana block didaftarkan, dan kapan output harus dirender ulang di server.
Pakai block editor kalau konten yang dibangun:
Block editor kurang cocok kalau:
Aturan praktisnya: kalau konten akan disusun seperti komponen, block editor biasanya menang. Kalau yang dibutuhkan hanya satu bentuk output yang sangat kaku, jangan memaksa semua hal masuk ke block.
Registrasi block adalah proses memberi tahu WordPress bahwa sebuah block ada, metadata apa yang dimilikinya, skrip apa yang dipakai, dan bagaimana block itu diperlakukan di editor maupun di front end.
Urutannya biasanya seperti ini:
register_block_type().block.json atau argumen manual PHP.Yang sering terlupakan adalah bahwa block registration bukan cuma “daftar nama block”. Ia juga menentukan:
block.json adalah sumber metadata utama untuk block modern WordPress. File ini membuat registration lebih deklaratif, lebih konsisten, dan lebih mudah di-scan oleh WordPress tooling.
Biasanya block.json berisi:
name: nama block, misalnya my-plugin/cta-boxtitle: label yang tampil di inserterdescription: deskripsi singkatcategory: kategori insertericon: ikon blockattributes: schema atribut blockeditorScript: script khusus editorscript: script bersama untuk editor dan front endviewScript: script front end sajastyle: style bersamaeditorStyle: style editor sajarender: path template render server-side, pada setup tertentusupports: fitur block yang diaktifkanKeuntungan utama block.json:
Kalau menggunakan block.json, PHP biasanya tinggal memanggil:
register_block_type( __DIR__ . '/build' );Artinya WordPress akan membaca block.json di folder itu dan mendaftarkan block beserta asset yang dirujuk.
Static block menyimpan markup hasil save() ke dalam konten post. Saat front end dibuka, WordPress merender markup yang sudah tersimpan di database, lalu cocokkan atribut dan wrapper yang diperlukan.
Cocok untuk:
Kelebihan:
Risiko:
save() berubah, block lama bisa jadi invalidDynamic block tidak mengandalkan markup final dari save() sebagai output utama. Biasanya save() mengembalikan null atau placeholder minimal, lalu front end dirender oleh PHP via render_callback atau template render.
Cocok untuk:
Kelebihan:
Risiko:
Ada tiga strategi utama yang perlu dipahami:
Markup final disimpan di konten saat post disimpan.
Dipakai untuk block statis yang output-nya stabil.
PHP menghasilkan output saat request dibuka.
Dipakai untuk dynamic block dan block yang bergantung pada data runtime.
Editor menampilkan preview dari data client-side atau server-side, sementara front end tetap dirender oleh server.
Dipakai ketika editor butuh pengalaman visual yang baik, tapi front end tetap harus akurat terhadap data terbaru.
Pilihan strateginya biasanya begini:
Jangan memilih strategi hanya karena “lebih modern”. Pilih berdasarkan sifat data dan biaya maintenance.
Intinya:
save() menentukan apa yang disimpan di konten untuk block statisContoh struktur plugin block modern biasanya seperti ini:
my-plugin/
├── build/
│ ├── block.json
│ ├── index.js
│ ├── style-index.css
│ └── index.asset.php
├── src/
│ ├── edit.js
│ ├── save.js
│ └── style.scss
└── my-plugin.phpAlur build-nya umumnya:
src/ ditulis saat developmentbuild/block.json menunjuk ke asset hasil buildbuild/save() tanpa rencana migrasiIni jebakan paling umum di static block. Begitu markup output berubah, block lama bisa dianggap invalid.
Solusi:
Tidak semua block perlu render server-side. Kalau output statis, dynamic block hanya menambah kompleksitas.
Solusi:
edit()Komponen editor bisa membengkak kalau bisnis logic, fetch, formatting, dan UI digabung semua.
Solusi:
edit() sebagai layer UI, bukan dump seluruh logicAtribut block yang tidak jelas tipe dan sumbernya sering bikin parsing konten rapuh.
Solusi:
block.jsonIni sering terjadi pada dynamic block atau block yang bergantung pada style global.
Solusi:
Block bisa terlihat benar di editor tetapi rusak di front end, atau sebaliknya.
Solusi:
style, editorStyle, script, dan editorScriptDynamic block yang bergantung pada query bisa bentrok dengan page cache atau object cache.
Solusi:
Kalau block terlalu banyak menyimpan HTML custom di string, maintenance jadi susah.
Solusi:
block.json dulu agar metadata, asset, dan dukungan fitur tersusun rapi.register_block_type() untuk mendaftarkan blockblock.json untuk metadata block modernsave() untuk output static blockrender_callback untuk dynamic blocksupports untuk fitur editor dan style supportKalau mau merangkum satu kalimat: Gutenberg block adalah unit konten yang didaftarkan ke WordPress, diedit lewat block editor, disimpan sebagai markup atau data terstruktur, lalu dirender dengan strategi yang cocok untuk sifat kontennya.
Kalau Anda memahami kapan block editor dipakai, bagaimana registration bekerja, apa fungsi block.json, dan kapan harus pindah ke dynamic rendering, biasanya setengah masalah plugin/block WordPress sudah selesai sebelum coding dimulai.