Skip to content

Instantly share code, notes, and snippets.

@jonschr
Created June 2, 2025 18:19
Show Gist options
  • Save jonschr/a384d336be9630d8a9f2822c80f07cee to your computer and use it in GitHub Desktop.
Save jonschr/a384d336be9630d8a9f2822c80f07cee to your computer and use it in GitHub Desktop.
<?php
// Adjust your form ID
function prf_add_people_repeater( $form ) {
$form_ids = get_conference_connected_gform_ids();
if ( ! in_array( $form['id'], $form_ids ) ) {
return $form; // Exit if the form ID is not in the list
}
$repeater_fields = array();
// Get conference settings from ACF options page
$conference_settings = get_conference_settings( $form['id'] );
// Add conference identifier field before the repeater
$conference_identifier_field = prf_register_conference_identifier( $form['id'], $conference_settings );
// Build repeater fields using modular functions
$repeater_fields[] = prf_register_repeater_first_name( $form['id'] );
$repeater_fields[] = prf_register_repeater_last_name( $form['id'] );
$repeater_fields[] = prf_register_repeater_email( $form['id'] );
$repeater_fields[] = prf_register_repeater_phone( $form['id'] );
$repeater_fields[] = prf_register_repeater_role( $form['id'], $conference_settings );
$repeater_fields[] = prf_register_repeater_events( $form['id'], $conference_settings );
$repeater_fields[] = prf_register_repeater_events_textbox( $form['id'] );
// Create a repeater for the team members and add the name and email fields as the fields to display inside the repeater.
$people = GF_Fields::create( array(
'type' => 'repeater',
'description' => 'Add all registrants here, including yourself.',
'id' => 1000, // The Field ID must be unique on the form
'formId' => $form['id'],
'label' => 'Registrants',
'addButtonText' => 'Add another person', // Optional
'removeButtonText' => 'Remove person', // Optional
'cssClass' => 'repeater-people', // Add custom class
// 'maxItems' => 3, // Optional
'pageNumber' => 1, // Ensure this is correct
'fields' => $repeater_fields,
) );
// $form['fields'][] = $people;
// Insert the conference identifier field and repeater into the form
array_splice( $form['fields'], 3, 0, array( $conference_identifier_field, $people ) );
return $form;
}
add_filter( 'gform_form_post_get_meta', 'prf_add_people_repeater' );
// Remove the field before the form is saved. Adjust your form ID
function prf_prevent_duplicate_people_repeater_on_save( $form_meta, $form_id, $meta_name ) {
$form_ids = get_conference_connected_gform_ids();
if ( ! in_array( $form_id, $form_ids ) ) {
return $form_meta; // Exit if the form ID is not in the list
}
if ( $meta_name == 'display_meta' ) {
// Remove the Repeater field: ID 1000 and Conference Identifier field: ID 999
$form_meta['fields'] = wp_list_filter( $form_meta['fields'], array( 'id' => 1000 ), 'NOT' );
$form_meta['fields'] = wp_list_filter( $form_meta['fields'], array( 'id' => 999 ), 'NOT' );
}
return $form_meta;
}
add_filter( 'gform_form_update_meta', 'prf_prevent_duplicate_people_repeater_on_save', 10, 3 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment