ACF repeater without Pro: how to store and display repeatable rows

Free Advanced Custom Fields does not include ACF's Repeater field. To build a list without Pro, choose between an independent repeater add-on and WordPress blocks. If existing templates already depend on ACF's own row API, retaining the native Repeater may cost less than converting the stored data (plan details checked November 2026).
Which ACF repeater without Pro fits the data?
Suppose an editor needs to list sessions in a workshop. The important question is what happens after the list is saved. A page that only displays a simple agenda can use headings and paragraphs. A timetable that must also generate a downloadable program needs stable field names, predictable ordering and a clear representation for a missing value. A session that appears in several workshops may deserve its own post.
| Requirement | Practical choice | What you own afterward |
|---|---|---|
| Readers only need a formatted list | Core List, Group or Table blocks | Content lives in the page and editors control its layout |
| Every item has named fields and a template renders the list | Independent repeater field with free ACF | The add-on's storage, update path and return format |
| Existing templates use native row loops or nested ACF fields | Native Repeater in ACF Pro | Its license, field definitions and compatible templates |
| Items need URLs, filtering or reuse across pages | Separate posts or a custom post type | Relationships, ordering and a query to retrieve the items |
When the native field is the right choice
The ACF Repeater documentation describes a parent field containing repeated sets of subfields. Its formatted value can be read as rows, or templates can use its row loop. That API belongs to the native field. An add-on with the word “repeater” in its name does not automatically supply the same field keys, data layout or loop behavior.
Before replacing a licensed installation, search the theme, plugins and any site-specific code for the existing field name and calls to the repeater API. Check shortcodes and builder dynamic fields as well. Export a representative item with an empty row, several populated rows and any nested data. If no one can explain how to reconstruct those after a conversion, keep the current configuration while planning a migration.
A free add-on with an explicit limit
RepeaterKit on WordPress.org registers its own repeater type. At the November 2026 check the directory offered version 1.0.0, with a recent release, named subfields and no nested repeaters. That is evidence of current availability. A first release cannot establish a long support record. A complex paid site's first trial should be on a copy with a restorable database.
For a small agenda, activate free ACF and RepeaterKit. Create a field group for the post type that holds the agenda. Add a RepeaterKit field named session_list with one Text subfield named session_title. Save a post with two different rows. Change their order, save again and reload the editor before writing the template. Use the field names in the template. The visible label can contain spaces and can change without updating the code.
Read the rows in a WordPress template
Place this in the relevant PHP template inside the post loop. It expects an array of rows with a plain-text title. An empty field or blank title produces no empty list item. Only the fixed list markup is emitted as HTML.
<?php
$rows = get_field( 'session_list' );
if ( is_array( $rows ) ) {
$items = array();
foreach ( $rows as $row ) {
$label = $row['session_title'] ?? '';
if ( is_string( $label ) && '' !== trim( $label ) ) {
$items[] = '<li>' . esc_html( $label ) . '</li>';
}
}
if ( $items ) {
echo '<ul>' . implode( '', $items ) . '</ul>';
}
}
If you add a URL field, escape its value with esc_url() when writing the link. A Link field can instead return an array of properties. See the ACF Link field guide before casting an array to text or assuming every row has a destination. Changing a field's return settings is a template change as well as an editor change.
Use core blocks when the list is just content
Build one example item with a heading and paragraph, group them, then duplicate the group for the second session. Give the editor a sample layout with sensible heading levels. If headings change order because the agenda changed, check them in List View as well as on the front end. This route avoids another plugin and keeps the material readable through the usual WordPress editing workflow.
Its limitation becomes clear when someone asks for “all sessions by this speaker” or “the next three dates from every workshop.” Text inside a paragraph is a weak basis for those queries. Model the session as an independent record when retrieval, permissions or reuse matter. A repeater attached to one workshop is convenient for editing one workshop, but makes cross-site queries harder.
Check the exit path before collecting hundreds of rows
Save zero rows, one row and several rows. Include an ampersand, a blank title and an unusually long title. Duplicate or translate a staging post if that is part of your normal workflow. Compare the saved values after an update and an export/import. An export of field definitions describes the form. It does not, by itself, back up every post's values.
For a rectangular grid where each row has the same column headings, consider the ACF table field. For differing language layouts, read ACF and WPML. If the data must migrate between implementations, custom WordPress development can help map the old and new field keys before editors enter more records.