Created
March 20, 2016 10:42
-
-
Save xeiter/3d7d101165ba25c1a6cc 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 | |
/** | |
* 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