WordPress 6.5 (April 2024) shipped an API we had been waiting for since the block editor existed: Block Bindings. It lets you connect a native block (paragraph, image, button) to an external data source — post meta, ACF, custom — without writing PHP custom blocks.
The problem it solves
In Gutenberg world, if you wanted a paragraph to show a custom field (e.g. "unit price"), you had to ship a dedicated block. Every field, one block. Result: projects with 30 custom blocks nobody maintains.
How it works
You mark a block with a binding:
<!-- wp:paragraph {
"metadata": { "bindings": { "content": { "source": "core/post-meta", "args": { "key": "price" } } } }
} -->
<p>Price placeholder</p>
<!-- /wp:paragraph -->
The paragraph reads the price post meta. Editor sees it live, frontend renders it.
Supported sources
- core/post-meta: native post meta.
- ACF: auto-registered from ACF 6.2+.
- Custom: register your sources via PHP with
register_block_bindings_source.
What we did right away
On a real estate client we went from 14 custom blocks (one per property card field) to 0. Editors use native blocks and bind via a menu; when we add a field, no theme changes.
Current limits
- Only some blocks are bindable (paragraph, heading, image, button). Others must wait.
- Inline editing of bound values is still partial: some sources are read-only.
- The bind UX is technical for pure editors (better today for those who know custom fields).
This is the kind of change that would have saved years had it landed in 2019. Better late than never.