Skip to content

ACF Fields

When you declare a field through ACF_Builder (title(), text(), wysiwyg(), link(), image(), etc.), the system decides whether to expand it into a multilang group. Reading via get_field('heading') always returns the active-language value automatically โ€” no special helper required.

Become multilang automatically when Multilang is ON:

  • text
  • textarea
  • wysiwyg
  • link
// With multilang ON, this declaration becomes a multilang group automatically:
ACF_Builder::text(['name' => 'heading', 'label' => 'Heading'])

Not expanded automatically โ€” pass 'multilang' => true explicitly:

  • image
  • gallery
  • url
  • file
// Image NOT multilang by default
ACF_Builder::image(['name' => 'logo'])
// Multilang image (opt-in)
ACF_Builder::image(['name' => 'hero_bg', 'multilang' => true])

Never expanded:

  • repeater, group, flexible_content โ€” containers (their sub-fields can be multilang)
  • spacing, bg_color, tab, note โ€” structural fields with no translatable content
  • select, radio, boolean, number, date, time โ€” values are codes/data, not text
  • relationship, post_object, taxonomy โ€” references to other posts, not content
ValueEffect
trueForce expansion to multilang (useful for image/gallery/url/file)
falseForce NO multilang (useful for explicit opt-out)
omittedAuto-apply by type
ACF_Builder::title(['name' => 'name_ml', 'multilang_skip_primary' => true])

When true: skips the sub-field for the primary language. Used when the default-language value already lives in a native WP field (post_title, term name, _thumbnail_id), to avoid visual duplication in the editor.

Knowledge Check

Test your understanding of this section

Loading questions...