Skip to content

Ikhtisar Chapter 23: Plugin Development (Blocks / JSX)

Apa yang Dipelajari?

Membangun custom block type Gutenberg dari nol — mulai dari createElement(), setup JSX dengan @wordpress/scripts, hingga konsep dynamic blocks yang di-render PHP.

Poin Utama

1. Mendaftarkan Block Type

js
wp.blocks.registerBlockType('namespace/name', {
  title, icon, category, attributes, edit, save
})
PropertiFungsi
editUI yang tampil di editor (admin)
saveHTML yang disimpan ke database (static) atau return null (dynamic)

2. createElement() vs JSX

PendekatanContoh
createElementwp.element.createElement('div', null, 'Hello') — verbose
JSX<div>Hello</div> — mudah dibaca, perlu build step

Setup JSX: npm init -ynpm install @wordpress/scripts --save-dev → tulis di src/index.js → build ke build/index.js.

3. Aturan JSX

  • Satu root element (atau gunakan Fragment <>...</>)
  • className bukan class
  • Self-closing tags: <input />, <br />
  • Dynamic values: {variable}

4. Static vs Dynamic Blocks

AspekStaticDynamic
save()Return HTMLReturn null
RenderHTML tersimpan di DBPHP render_callback
Update strukturPerlu deprecated + re-save tiap postCukup ubah PHP, otomatis berlaku

Dynamic block lebih direkomendasikan — tidak perlu pusing soal backward compatibility.

5. Attributes & Props

  • Attributes didefinisikan di registerBlockType (type, default)
  • Data disimpan sebagai JSON di HTML comment: <!-- wp:... {"key":"val"} -->
  • Akses via props.attributes, update via props.setAttributes()
  • Jangan mutasi langsung — selalu buat copy array/object

6. Dependency Script

DependencyMemberikan
wp-blocksregisterBlockType()
wp-elementcreateElement() / React wrapper
wp-editorWordPress editor components

Satu Kalimat

Block type Gutenberg dibuat dengan registerBlockType(), ditulis dalam JSX yang di-compile @wordpress/scripts, dan sebaiknya gunakan dynamic block (save: null + PHP render) agar bebas masalah versi.