Skip to content

Instantly share code, notes, and snippets.

@xeiter
Created March 20, 2016 10:42
Show Gist options
  • Save xeiter/3d7d101165ba25c1a6cc to your computer and use it in GitHub Desktop.
Save xeiter/3d7d101165ba25c1a6cc to your computer and use it in GitHub Desktop.
<?php
/**
* Dynamically populate the values for Gravity Form drop downs
*
* @param array $form
* @return mixed
* @access public
*/
function az_gravityforms_dynamic_dropdown_values( $form ) {
$registered_classes = array( 'dynamic-values-partners' );
foreach( $form['fields'] as &$field ) {
// Get array of all CSS classes of the field
$field_classes = explode( ' ', $field['cssClass'] );
// Find a match in CSS class setting
$matched_css_classes = array_intersect( $registered_classes, $field_classes );
// Ignore this hook if not a drop down with the appropriate class
if( $field['type'] != 'select' || !empty( $matched_css_classes ) === FALSE ) {
continue;
}
$choices = array();
$already_added = array();
// Process the match
switch( array_pop( $matched_css_classes ) ) {
// Load a dropdown with the list of all partners
case 'dynamic-values-partners':
// Get all published partners
$params = array(
'post_type' => 'partners',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_key' => 'partner_name'
);
$partners = get_posts( $params );
$choices[] = array( 'text' => '-- None --', 'value' => ' ' );
$choices[] = array( 'text' => '-- Other --', 'value' => 'Other' );
foreach( $partners as $partner ) {
$partner_name = get_field( 'partner_name', $partner->ID );
if ( !isset( $already_added[ $partner_name ] ) ) {
$choices[] = array( 'text' => $partner_name, 'value' => $partner_name );
$already_added[ $partner_name ] = $partner_name;
}
}
break;
}
$field['choices'] = $choices;
}
return $form;
}
// Implement pre-render, pre-validation, pre-submission filter and admin pre-render hooks
add_filter( 'gform_pre_render', 'az_gravityforms_dynamic_dropdown_values' );
add_filter( 'gform_pre_validation', 'az_gravityforms_dynamic_dropdown_values' );
add_filter( 'gform_pre_submission_filter', 'az_gravityforms_dynamic_dropdown_values' );
add_filter( 'gform_admin_pre_render', 'az_gravityforms_dynamic_dropdown_values' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment