Created
June 2, 2025 18:19
-
-
Save jonschr/a384d336be9630d8a9f2822c80f07cee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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