Skip to content

Instantly share code, notes, and snippets.

@psaikali
Created January 4, 2019 13:43
Show Gist options
  • Save psaikali/2b29e6e83f50718625af27c2958c828f to your computer and use it in GitHub Desktop.
Save psaikali/2b29e6e83f50718625af27c2958c828f to your computer and use it in GitHub Desktop.
Populate ACF select field options with Gravity Forms to select a specific form
<?php
/**
* Populate ACF select field options with Gravity Forms forms
*/
function acf_populate_gf_forms_ids( $field ) {
if ( class_exists( 'GFFormsModel' ) ) {
$choices = [];
foreach ( \GFFormsModel::get_forms() as $form ) {
$choices[ $form->id ] = $form->title;
}
$field['choices'] = $choices;
}
return $field;
}
add_filter( 'acf/load_field/name=submit_project_gf_form_id', 'acf_populate_gf_forms_ids' );
@psaikali
Copy link
Author

psaikali commented Mar 4, 2021

Glad you found the solution @KingWebsites, and thank you for sharing it!

@sjaakbanaan
Copy link

sjaakbanaan commented Mar 31, 2021

Thanks. And you can use this if you'd like to use this function in a exported PHP file:

if (class_exists('GFFormsModel')) {
    $choices = [];
    foreach (\GFFormsModel::get_forms() as $form) {
        $choices[$form->id] = $form->title;
    }
}

acf_add_local_field(array(
    'key' => 'contact_form',
    'label' => 'Contact form',
    'name' => 'contact_form',
    'type' => 'select',
    'instructions' => '',
    'required' => 0,
    'conditional_logic' => 0,
    'choices' => $choices,
    'default_value' => array(),
    'allow_null' => 0,
));

@SjorsHartwijk
Copy link

Great solution! How do i display the selected form on my page? The value from the select box is the form ID.

@psaikali
Copy link
Author

Hey @SjorsHartwijk

You're looking for the gravity_form() function, see https://docs.gravityforms.com/adding-a-form-to-the-theme-file/

@HeliumChris
Copy link

HeliumChris commented Apr 13, 2024

Thank you psaikali! This was so helpful for me. I was getting a php warning (running php 8+) with the original code, so I'm offering this version that worked for me.

*Note to others: remember to change 'your_field_name' to whatever you named your ACF Select field.


// Populate ACF select field options with Gravity Forms forms 
function acf_populate_gf_forms_ids( $field ) {
    if ( class_exists( 'GFFormsModel' ) ) {
        $choices = array(
            'none' => 'None'
        );

        $forms = \GFFormsModel::get_forms();

        if ( $forms ) {
            foreach ( $forms as $form ) {
                $choices[ $form->id ] = $form->title;
            }
        }

        $field['choices'] = $choices;
    }

    return $field;
}
add_filter( 'acf/load_field/name=your_field_name', 'acf_populate_gf_forms_ids' );


Here's the PHP code to render the shortcode:

<?php 
	$form_id = get_field('your_field_name');
	if ($form_id && $form_id !== 'none') {
	    $escaped_form_id = acf_esc_html($form_id);
	    echo do_shortcode("[gravityform id=\"$escaped_form_id\" title=\"true\" description=\"true\" ajax=\"true\" tabindex=\"4\" theme=\"gravity\"]");
	}
?>

*Edited to set the default field to "none"

@davidhyland
Copy link

This is fantastic! Exactly what I was looking for and just worked, thank you. Adding the 'none' option is good idea too. Kudos for sharing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment