Gravity Wiz // Gravity Forms // Advanced Conditional Shortcodes
<?php
/**
* Gravity Wiz // Gravity Forms // Advanced Conditional Shortcodes
*
* [gravityforms action="conditional" relation="any"
value="{:2}" operator="is" compare="First Choice"
value2="{:1}" operator2="isnot" compare2="Second Choice"]
Content you would like to conditionally display.
[/gravityforms]
*
*/
add_filter( 'gform_shortcode_conditional', function( $result, $atts, $content ) {
if( ! isset( $atts['value'] ) || isset( $atts['merge_tag'] ) ) {
return $result;
}
$relation = strtolower( rgar( $atts, 'relation', 'all' ) ); // or 'any'
$conditions = array();
foreach( $atts as $key => $prop ) {
preg_match( '|value(\d*)$|', $key, $match );
if( ! empty( $match ) ) {
list( , $index ) = $match;
$conditions[] = array(
'value' => rgar( $atts, sprintf( 'value%s', $index ) ),
'operator' => rgar( $atts, sprintf( 'operator%s', $index ) ),
'compare' => rgar( $atts, sprintf( 'compare%s', $index ) ),
);
}
}
$conditional_met = $relation == 'all';
foreach( $conditions as $condition ) {
$is_match = GFFormsModel::matches_operation( $condition['value'], $condition['compare'], $condition['operator'] );
if( $relation == 'any' && $is_match ) {
$conditional_met = true;
break;
} else if( $relation == 'all' && ! $is_match ) {
$conditional_met = false;
}
}
if( ! $conditional_met ) {
return '';
}
// find and remove any starting/closing <br> tags
if( rgar( $atts, 'format' ) != 'raw' ) {
$content = preg_replace( '/^<br(?: *\/)?>|<br(?: *\/)?>$/', '', $content );
}
return do_shortcode( $content );
}, 10, 3 );