Skip to content

Instantly share code, notes, and snippets.

@saifsultanc
Created July 31, 2025 10:03
Show Gist options
  • Select an option

  • Save saifsultanc/0d2cbaef7fb59343759503d6203a2ce9 to your computer and use it in GitHub Desktop.

Select an option

Save saifsultanc/0d2cbaef7fb59343759503d6203a2ce9 to your computer and use it in GitHub Desktop.
gravity-forms/gw-force-default-value.php
<?php
class GW_Force_Default_Value {
private $_args = array();
public function __construct( $args = array() ) {
// set our default arguments, parse against the provided arguments, and store for use throughout the class
$this->_args = wp_parse_args( $args, array(
'form_id' => false,
'field_ids' => array(),
) );
// do version check in the init to make sure if GF is going to be loaded, it is already loaded
add_action( 'init', array( $this, 'init' ) );
}
public function init() {
// make sure we're running the required minimum version of Gravity Forms
if ( ! property_exists( 'GFCommon', 'version' ) || ! version_compare( GFCommon::$version, '1.9', '>=' ) ) {
return;
}
// carry on
add_filter( 'gform_entry_post_save', array( $this, 'add_default_values_to_entry' ), 10, 2 );
add_filter( 'gform_replace_merge_tags', array( $this, 'replace_unreplaced_merge_tags' ) );
}
public function add_default_values_to_entry( $entry, $form ) {
if ( ! $this->is_applicable_form( $form ) ) {
return $entry;
}
$requires_update = false;
/** @var GF_Field $field */
foreach ( $form['fields'] as $field ) {
if ( ! $this->is_applicable_field( $field ) ) {
continue;
}
$entry_value = rgar( $entry, $field->id );
$is_hidden = GFFormsModel::is_field_hidden( $form, $field, array(), $entry );
// Get default value if field is hidden.
if ( $is_hidden || ( empty( $entry_value ) && ! GFFormDisplay::is_field_validation_supported( $field ) ) ) {
$value = $field->get_value_default_if_empty( $field->get_value_submission( array(), false ) );
} else {
$value = $entry_value;
}
if ( rgblank( $value ) ) {
continue;
}
$value = is_string( $value ) ? GFCommon::replace_variables( $value, $form, $entry ) : $value;
if ( $value != $entry_value ) {
$requires_update = true;
// For array based values like Date Field and Time Field.
if ( is_array( $value ) ) {
$value = $field->get_value_save_entry( $value, $form, null, null, null );
}
$entry[ $field->id ] = $value;
}
}
if ( $requires_update ) {
GFAPI::update_entry( $entry );
}
return $entry;
}
/**
* If default value *is* a merge tag (or multiple merge tags), and these merge tags still exist after prepopulation
* merge tags have been replaced, assume that this is a merge tag that should be replaced on submission and clear
* it from the default value so that the user does not see the merge tag if the field is visible.
*
* @param $text
*
* @return mixed|string
*/
public function replace_unreplaced_merge_tags( $text ) {
if ( isset( $_POST['gform_submit'] ) ) {
return $text;
}
$chars = str_split( trim( $text ) );
if ( rgar( $chars, 0 ) === '{' && rgar( $chars, count( $chars ) - 1 ) === '}' && ! strpos( $text, '"' ) ) {
$text = '';
}
return $text;
}
function is_applicable_form( $form ) {
$form_id = isset( $form['id'] ) ? $form['id'] : $form;
return empty( $this->_args['form_id'] ) || $form_id == $this->_args['form_id'];
}
function is_applicable_field( $field ) {
return empty( $this->_args['field_ids'] ) || in_array( $field->id, $this->_args['field_ids'] );
}
}
# Configuration
new GW_Force_Default_Value( array(
'form_id' => 123,
'field_ids' => array( 4, 5 ),
) );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment