Custom fields for the block editor

Build blocks,
not boilerplate.

GutenFields turns a group of fields into a real Gutenberg block. Define it in version-controlled PHP or an admin builder, edit it through one auto-generated UI, and render the front end with a theme template you own.

Free edition, then one payment WordPress 6.5–7.0 First year of updates included
theme/inc/blocks.php
gutenfields_register_block([  'name'   => 'testimonial',  'title'  => 'Testimonial',  'fields' => [    [ 'name'=>'quote',  'type'=>'textarea' ],    [ 'name'=>'author', 'type'=>'text' ],    [ 'name'=>'rating', 'type'=>'range' ],  ],]);
Post editor · Testimonial
Testimonial
A real Gutenberg block, generated from the fields above.
Priya Raman
Show a rating
22field types, one editor UI
0build steps required
0lines of React per block
100%your PHP on the front end
How it works

One pipeline, from field definition to rendered page.

A field group is registered once and becomes a dynamic block. The editor is generated from the schema; the front end resolves to a template in your theme. Nothing hand-wired per block.

  1. Define the fields

    Call gutenfields_register_block() in PHP, or build the group visually in wp-admin. Both feed the same pipeline.

  2. It becomes a block

    GutenFields calls register_block_type() with a shared render callback — a real dynamic block, in the inserter.

  3. Editor UI, generated

    One generic editor reads the schema and maps each field to a native control from @wordpress/components. No per-block React.

  4. Your template renders it

    The front end resolves to yourtheme/gutenfields/{slug}.php — ordinary PHP you fully control.

Two ways to define a block

Click it together, or ship it in code.

Config-as-code PHP

Field definitions live in a theme or mu-plugin, version-controlled, with no database rows. The right fit for a product you ship.

Admin builder DB

A field builder under the GutenFields menu — drag to reorder, auto-filled keys, per-type icons. Great for quick work and non-developers.

Graduate visually-built blocks into code. Hit Export PHP to generate a ready-to-paste gutenfields_register_block() call. And on a name conflict, the code version always wins.

wp-admin › GutenFields › field builder
The GutenFields field builder in wp-admin: a Testimonial block with quote, author, role, a rating toggle, and a range field whose conditional-logic rule shows it only when the rating toggle is on.
What you get

The ACF Blocks ethos — block-first, without the tax.

Everything a field system needs to be useful in the block editor, and nothing that ties you to a build toolchain or a proprietary render layer.

Templates you own

Markup is a plain PHP file in your theme, resolved child-theme first. Helpers like gf_the_field() read the data; the HTML is yours.

Fields in version control

Define blocks in PHP and ship them with your theme — no DB rows to migrate between environments, no export/import dance.

Conditional logic

Show or hide any field based on a sibling's value — ==, contains, >, empty and more, combined all/any or gathered into nested groups for [A and B] or C. Inside a repeater, each row evaluates on its own.

Repeater & flexible content

Repeat a set of subfields as rows, or let each row pick one of several named layouts, nesting up to five levels. Drag to reorder, with keyboard support.

Options pages

Field groups that belong to the site rather than to a block — contact details, social links, a footer notice. Their own admin screen, the same field types, read anywhere in your theme with gf_option().

No build step

The editor bundle ships hand-written against the global wp.* objects. Activate the plugin and blocks work — the JSX source is there if you'd rather build it.

Your content stays put

Rendering and editing make no external requests — only licence activation and update checks reach our server. Block data lives in post content as attributes, not scattered meta.

The type case · 22 fields

Every field you reach for, mapped to a native control.

Each type resolves to a real control from the block editor, and comes with a template helper to read it back out. Grouped the way you'd actually think about them.

Basic 9
  • text
  • textarea
  • rich
  • number
  • range
  • email
  • url
  • date
  • color
Choice 4
  • toggle
  • select
  • radio
  • checkbox
Content 4
  • image
  • gallery
  • file
  • link
Relational 3
  • post
  • taxonomy
  • user
Layout 2
  • repeater
  • flexible
The template is yours

Read the data. Write the markup.

Templates resolve from your theme first, so a block's HTML is a normal PHP file — no shortcodes, no render props, no framework in between. A small set of helpers reads each field; everything around them is your own markup and classes.

gf_the_field() gf_field() gf_image() gf_link_html() gf_repeater() gf_flexible() gf_sub_field() gf_posts()
theme/gutenfields/testimonial.php
<div <?php echo get_block_wrapper_attributes(); ?>>  <blockquote>    <?php gf_the_field( 'quote' ); ?>  </blockquote>  <cite>    <?php gf_the_field( 'author' ); ?>  </cite>  <?php if ( $stars = gf_field( 'rating' ) ) : ?>    <p class="stars"><?php echo str_repeat('★', $stars); ?></p>  <?php endif; ?></div>

No block.json per block. No React component per block. No build step.

The whole premise, in one line
In the editor

Fields generate the interface. Editors just fill it in.

The block canvas below is produced entirely from field definitions — no hand-written React component behind any of it.

By design

What GutenFields deliberately leaves out.

No block.json per block

One registration pipeline handles every block. You describe fields, not block metadata files.

No per-block React

A single generic editor component maps your schema to native controls. You never write or maintain a component per block.

No build step

Ships with a prebuilt, no-transpile bundle. Upload, activate, done — a toolchain stays optional.

No lock-in

Content stays in your database as standard block markup. Deactivate the plugin and your data is still there, untouched.

Questions

The things developers ask first.

Q. Do I need to know React?
No — that's the whole point. The editing interface is generated from your field definitions, and the front end is an ordinary PHP template. You never touch a React component.
Q. Is there a build step?
No. The plugin ships ready to run. The editor bundle is written against the global wp.* objects, so it works the moment you activate it. The JSX source is included if you'd rather build it yourself with @wordpress/scripts.
Q. Where is my block's data stored?
In the block's attributes, in post content — not in post meta. Each field group is a real dynamic block, so the data travels with the block wherever the content goes.
Q. Can I move an admin-built block into code?
Yes. Open it under the GutenFields menu and choose Export PHP. It generates the gutenfields_register_block() call, ready to paste into your theme. If a saved block and a code block share a name, the code version wins.
Q. What happens if I deactivate the plugin?
Blocks stop rendering, because the plugin owns the render callback — but your content isn't deleted. It stays in post content as block markup and returns the moment you reactivate.
Q. How does this compare to ACF Blocks?
GutenFields follows the same block-first ethos, but with no block.json or React per block, no build step, and templates that resolve from your theme. It's config-as-code first, with a DB builder alongside. The conveniences you'd reach for are here — a gallery field, nested rule groups, containers nested several levels deep, and options pages. What's deliberately absent is ACF's field-group-to-post-type location rules: GutenFields attaches fields to blocks and to options pages, not to edit screens.
Get started

Free to start. One payment to keep.

The free edition is a finished plugin — the builder, 19 field types, conditional logic, templates and the CLI — and it costs nothing, ever. Pro adds repeaters, flexible content, galleries and options pages: buy a licence and the zip is waiting on your account, so upload it under Plugins → Add New, paste your key, and every version after that arrives on the Plugins screen on its own. There's no build step at either end, and no subscription at any tier.

£ Free £0 · Single-site £79 · Agency £129 · Unlimited £299 · one-time, never a subscription