Description
This filter is executed before the form is displayed and can be used to manipulate the Form Object prior to rendering the form.
Usage
<?php
add_filter("gform_pre_render", "pre_render_function");
?>
You can also specify this per form by adding the form id after the hook name.
<?php
add_filter("gform_pre_render_6", "pre_render_function");
?>
Parameters
$form
- (Form Object) The current Form Object to be filtered.
Examples
This example dynamically populates a drop down field with posts that are in the Business category.
<?php
add_filter("gform_pre_render", "populate_dropdown");
//Note: when changing drop down values, we also need to use the gform_admin_pre_render so that the right values are displayed when editing the entry.
add_filter("gform_admin_pre_render", "populate_dropdown");
function populate_dropdown($form){
//only populating drop down for form id 5
if($form["id"] != 5)
return $form;
//Reading posts for "Business" category;
$posts = get_posts("category=" . get_cat_ID("Business"));
//Creating drop down item array.
$items = array();
//Adding initial blank value.
$items[] = array("text" => "", "value" => "");
//Adding post titles to the items array
foreach($posts as $post)
$items[] = array("value" => $post->post_title, "text" => $post->post_title);
//Adding items to field id 8. Replace 8 with your actual field id. You can get the field id by looking at the input name in the markup.
foreach($form["fields"] as &$field)
if($field["id"] == 8){
$field["choices"] = $items;
}
return $form;
}
?>
The following example dynamically populates a checkbox field with a list of published posts
//NOTE: update the '221' to the ID of your form
add_filter('gform_pre_render_221', 'populate_checkbox');
add_filter("gform_pre_submission_filter_221", "populate_checkbox");
function populate_checkbox($form){
foreach($form['fields'] as &$field){
//NOTE: replace 3 with your checkbox field id
$field_id = 3;
if($field['id'] != $field_id)
continue;
// you can add additional parameters here to alter the posts that are retreieved
// more info: http://codex.wordpress.org/Template_Tags/get_posts
$posts = get_posts('numberposts=-1&post_status=publish');
$input_id = 1;
foreach($posts as $post){
//skipping index that are multiples of 10 (multiples of 10 create problems as the input IDs)
if($input_id % 10 == 0)
$input_id++;
$choices[] = array('text' => $post->post_title, 'value' => $post->post_title);
$inputs[] = array("label" => $post->post_title, "id" => "{$field_id}.{$input_id}");
$input_id++;
}
$field['choices'] = $choices;
$field['inputs'] = $inputs;
}
return $form;
}
This example is for a two-page form. The data submitted from the first page is displayed on the second page as a preview. The second page has only one field, an html field that will be populated with the data from the first page.
<?php
add_filter("gform_pre_render_31", "populate_html");
function populate_html($form)
{
//this is a 2-page form with the data from page one being displayed in an html field on page 2
$current_page = GFFormDisplay::get_current_page($form["id"]);
$html_content = "The information you have submitted is as follows:<br/><ul>";
if ($current_page == 2)
{
foreach($form["fields"] as &$field)
{
//gather form data to save into html field (id 3 on my form), exclude page break
if ($field["id"] != 3 && $field["type"] != "page")
{
//see if this is a complex field (will have inputs)
if(rgar($field, "inputs"))
{
//this is a complex fieldset (name, adress, etc.) - get individual field info
foreach($field["inputs"] as $input){
//get name of individual field, replace period with underscore when pulling from post
$input_name = "input_" . str_replace(".","_",$input["id"]);
$value = rgpost($input_name);
$html_content .= "<li>" . $input["label"] . ": " . $value . "</li>";
}
}
else
{
//this can be changed to be a switch statement if you need to handle each field type differently
//get the filename of file uploaded or post image uploaded
if ($field["type"] == "fileupload" || $field["type"] == "post_image")
{
$input_name = "input_" . $field["id"];
//before final submission, the image is stored in a temporary directory
//if displaying image in the html, point the img tag to the temporary location
$temp_filename = RGFormsModel::get_temp_filename($form["id"], $input_name);
$uploaded_name = $temp_filename["uploaded_filename"];
$temp_location = RGFormsModel::get_upload_url($form["id"]) . "/tmp/" . $temp_filename["temp_filename"];
if (!empty($uploaded_name)) {
$html_content .= "<li>" . $field["label"] . ": " . $uploaded_name . "<img src='" . $temp_location . "' height='200' width='200'></img></li>";
}
}
else
{
//get the label and then get the posted data for the field (this works for simple fields only - not the field groups like name and address)
$html_content .= "<li>" . $field["label"] . ": " . rgpost('input_' . $field['id']) . "</li>";
}
}
}
}
$html_content .= "</ul>";
//loop back through form fields to get html field (id 3 on my form) that we are populating with the data gathered above
foreach($form["fields"] as &$field)
{
//get html field
if ($field["id"] == 3)
{
//set the field content to the html
$field["content"] = $html_content;
}
}
}
//return altered form so changes are displayed
return $form;
}
?>
Placement
This code should be placed in the functions.php file of your active theme.
Source Code
This filter is located in form_display.php