Deleting an ACF value is not one row. The value row goes, the field-key reference row goes with it, and for a repeater every sub-field row underneath goes too. Miss any of them and you leave orphaned meta that ACF will trip over later.
custom-fields/delete-acf-field goes through ACF’s delete_field(), which clears the whole set. The field definition is untouched — the field still appears on the edit screen, it is simply empty.
Before you run it
This clears a stored value and cannot be undone. The call refuses to run unless you pass confirm: true, and there is no revision history behind ACF meta to restore from. Read the current value with custom-fields/get-acf-field first if there is any chance you will want it back.
At a glance
| Ability | custom-fields/delete-acf-field |
| Toolset | Advanced Custom Fields — toolset/acf |
| Group | Field Values |
| Requires | Advanced Custom Fields (free edition is enough) |
| Capability | manage_options |
| Safety | Destructive — deletes stored values, and refuses to run without confirm: true |
| Repeatable | Idempotent — running it twice leaves the same result |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
How it works
Target and selector work as they do everywhere in this suite: a field name or key, against a post, user, term, comment or the options store.
The confirmation gate runs before anything is read or written. A call without confirm: true comes back with a typed error and an untouched site, which is what makes it safe to let an assistant propose the delete and a human approve it.
The operation is idempotent: deleting an already-empty field succeeds and reports the same result, so a retry cannot do extra damage.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
target_type | string | No — defaults to post | What the value is attached to: post, user, term, comment or option. post covers pages and any custom post type. |
target_id | integer | string | Yes, for post, user, term and comment | The ID of the target. Optional for option, where it names a specific options page; omit it for the default options store. |
selector | string | Yes | Field name or field key of the value to clear. |
confirm | boolean | Yes — must be true | The irreversibility gate. Without it the call is refused before anything is touched. |
What comes back
| Name | Type | What it is |
|---|---|---|
deleted | boolean | True once the value and its reference rows are gone. |
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:
Clear the legacy_banner field on post 412 — I’ve checked, we no longer use it.
It resolves to one call:
{
"ability": "custom-fields/delete-acf-field",
"parameters": {
"target_type": "post",
"target_id": 412,
"selector": "legacy_banner",
"confirm": true
}
}Worth knowing
- Read the value first. Once it is gone there is no copy anywhere.
- Removing a single repeater row is a different job —
custom-fields/remove-acf-repeater-rowtakes an index and leaves the rest of the field alone. - This does not delete the field definition. To stop the field appearing at all, edit the field group in the ACF admin.
Related abilities
- Get ACF Field Value — take a copy before you clear it
- Remove Repeater Row — remove one row instead of the whole field
- Update ACF Field Value — set an empty value rather than deleting
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category