gform_post_data

Description

This filter is executed right before the post is created, allowing post data to be manipulated before the post is created.
Note: This filter only applies to forms that have Post Fields.

Usage

add_filter( 'gform_post_data', 'your_function_name', 10, 3 );

Parameters

  • $post_data array

    The array containing the post data to be filtered. This array is in the format used by the WP function wp_insert_post($post_data)

  • $form Form Object

    The form currently being processed.

  • $entry Entry Object

    The entry currently being processed.

Examples

1. Change the post_type

This example changes the default post type from post to page.

add_filter( 'gform_post_data', 'change_post_type', 10, 3 );
function change_post_type( $post_data, $form, $entry ) {
    //only change post type on form id 5
    if ( $form['id'] != 5 ) {
       return $post_data;
    }

    $post_data['post_type'] = 'page';
    return $post_data;
}

2. Change the post_status

This example sets the post status to private.

add_filter( 'gform_post_data', 'change_post_status', 10, 3 );
function change_post_status($post_data, $form, $entry){
    //only change post status on form id 5
    if ( $form['id'] != 5 ) {
       return $post_data;
    }

    $post_data['post_status'] = 'private';
    return $post_data;
}

3. Set the post date

This example sets the post date using date and time fields on the form.

add_filter( 'gform_post_data', 'set_post_date', 10, 3 );
function set_post_date( $post_data, $form, $entry ) {
  //only do this when the form id is 23
  if ( $form['id'] != 23 ) {
    return $post_data;
  }

  //set post date to field on form if date provided; get from entry data
  //using a date field in mm/dd/yyyy format and a time field in 24 hour format
  $date_value = rgar( $entry, '6' ); //pull the date value from the form data posted, field 6 on my form
  $time = rgar( $entry, '7' ); //pull the time value from the form data posted, field 7 on my form
  //only change post date/time when a date has been chosen
  if ( ! empty( $date_value ) ) {
    if ( empty( $time ) ) {
      //set default time
      $time_value = '00:00:00';
    } else {
      $time = explode( ':', $time ); //assumes you are using a time field in 24 hour format
      empty( $time[0] ) ? $time_hours = '00' : $time_hours = $time[0]; //pull hours out of array
      empty( $time[1] ) ? $time_minutes = '00' : $time_minutes = $time[1]; //pull minutes out of array
      $time_value = $time_hours . ':' . $time_minutes . ':00'; //add on seconds
    }
    //convert post date to the appropriate format so it will be inserted into the database
    $post_date = date( 'Y-m-d H:i:s', strtotime( $date_value . ' ' . $time_value ) );
    $post_data['post_date'] = $post_date; //set the post_date
  }
  return $post_data; //return the changed data to use when the post is created
}

4. Decode shortcodes in the post content

This example shows how you can decode the opening and closing brackets used by shortcodes in the post body field value.

add_filter( 'gform_post_data', function ( $post_data ) {
	$find    = array( '[', ']' );
	$replace = array( '[', ']' );

	$post_data['post_content'] = str_replace( $find, $replace, $post_data['post_content'] );

	return $post_data;
} );

Placement

This code should be placed in the functions.php file of your active theme.

Source Code

This filter is located in GFFormsModel::create_post() in forms_model.php.