Skip to content
Ultivo Toolkit 1.0 is here! Get 10% off your first year with LAUNCH10 until September 30. See pricing
Documentation menu

Builder basics

The field group screen#

Go to Custom Fields → Add New to open the builder. A field group has three parts: a title, a list of fields, and the location rules that decide where the group appears. Fields can be reordered by dragging, and every change stays local until you save the group.

Adding fields#

Each field has three core properties:

  • Label: what editors see next to the input.
  • Name: the meta key the value is stored under. Lowercase with underscores (hero_title), and the same string you pass to ultivo_field() in your templates.
  • Type: one of the 35 field types, from a plain text input to repeaters and flexible content.

The name is generated from the label as you type, but you can always override it. Pick names you are happy to keep. Changing a name later means the stored meta key changes too.

Duplicate names#

Two fields in the same place cannot share a name without losing data: they write to the same meta key, so whichever saves last wins and the other value is gone. The builder marks both fields in red when that happens, and says so under the Name field. It never blocks saving: you may well be halfway through swapping two names around.

"The same place" means among siblings, not anywhere in the group. Sub fields store as repeater_0_title, so two different repeaters can both have a title sub field with nothing to worry about.

Duplicating a field picks a free name for the copy. A trailing number counts on, so duplicating card_1 gives you card_2 and then card_3, and numbers already taken are skipped.

Across field groups, a shared name is usually fine: two groups that never appear on the same screen can both use title. So when you add or duplicate a top-level field whose name exists in another group, you get a grey note rather than an error. It is there to help you spot a real overlap, not to tell you to rename anything.

Field settings#

Beyond label, name and type, every field shares a common set of settings:

  • Instructions: help text shown to editors underneath the label.
  • Required: the field must have a value before the post saves.
  • Wrapper: width, CSS class and id for the field's wrapper element, for laying fields out side by side.
  • Conditional logic: show or hide the field based on other field values; see Conditional logic.

Most types add their own settings on top: text-based fields have Default Value, Placeholder, prepend/append and a character limit; choice fields have a Choices list; relational fields have post type or role filters and a return format. Text-based fields also expose validation rules.

How values are stored#

Values live in regular WordPress meta (post meta, or user/term meta and options, depending on where the group is shown). Each field writes two entries:

  • field_name: the value itself.
  • _field_name: a hidden reference to the field's key, so the plugin knows which field definition produced the value.

For example, a text field named hero_title on a page stores:

hero_title   =>  "Welcome to the site"
_hero_title  =>  "field_64f2a1b3c4d5e"

This is the same storage pattern ACF uses, which is why migrated sites keep working without touching any post meta. Repeater rows fan out as name_0_subname, name_1_subname and so on. See Repeater. Values saved to an options page are stored as options with the page's prefix: {prefix}_{name}.