blocks/register-acf-block declares an ACF block type, so a Gutenberg block backed by ACF fields becomes available in the editor.
It is a way to define and test a block, not a way to install one. Read the note on persistence below before you build anything on it.
At a glance
| Ability | blocks/register-acf-block |
| Toolset | Advanced Custom Fields — toolset/acf |
| Group | ACF Blocks |
| Requires | Advanced Custom Fields Pro |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Not idempotent — registering the same name twice is a collision, not a no-op |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
What registration means here
ACF blocks are declared in PHP on every page load. They are not rows in the database, which means a registration made through this ability lasts for the current request only — unless the calling code re-registers it on every load.
That makes this the right tool for prototyping a block, checking how it appears in the inserter, or testing a supports configuration. It is the wrong tool for shipping one: a block you want permanently belongs in a plugin or theme file.
Call blocks/list-acf-blocks first. Registering a name that already exists collides with the block that owns it.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
name | string | Yes | Block name. The acf/ prefix is added if you omit it. |
title | string | Yes | Human-readable title shown in the block inserter. |
description | string | No | What the block is for, shown in the inserter. |
category | string | No | Block category, e.g. formatting, layout, widgets. |
icon | string | No | Dashicon name or inline SVG. |
keywords | array of strings | No | Search keywords for the inserter. |
supports | object | No | Block supports, passed through to ACF unchanged. |
What comes back
| Name | Type | What it is |
|---|---|---|
block | object | The block as registered, with the values ACF resolved. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation. |
Example
Ask your assistant:
Register an ACF block called pricing-table, titled “Pricing Table”, in the layout category, so I can see how it looks in the inserter.
It resolves to one call:
{
"ability": "blocks/register-acf-block",
"parameters": {
"name": "pricing-table",
"title": "Pricing Table",
"description": "Three tiers with a feature list under each.",
"category": "layout",
"icon": "editor-table",
"keywords": ["pricing", "plans", "tiers"]
}
}Worth knowing
- Registration does not create the fields. Bind a field group to the block in the ACF admin — or check what is already bound with
blocks/get-acf-block-fields. - Not idempotent: registering the same name twice in one request is a collision, not a no-op.
- Requires ACF Pro.
Related abilities
- List ACF Blocks — check the name is free
- Get ACF Block Fields — see what is bound to it
- Insert ACF Block — put an instance into a post
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category