Гравитационные формы / раскрывающиеся поля — Пустой раскрывающийся список после неверной отправки

У меня есть код ниже, чтобы заполнить раскрывающиеся поля динамически:

add_filter( 'gform_pre_render_1', 'populate_dates' );
add_filter( 'gform_pre_validation_1', 'populate_dates' );
add_filter( 'gform_pre_submission_filter_1', 'populate_dates' );
add_filter( 'gform_admin_pre_render_1', 'populate_dates' );

function populate_dates( $form ) {
$post_id = ibs_id();
foreach ( $form['fields'] as &$field ) {
if ( $field->type != 'select' || strpos( $field->cssClass, 'populate-dates' ) === false ) {
continue;
}
$the_date = array();
$DatesArr = array();
for($i=0;$i<20;$i++)
{
$the_date[$i] = get_post_meta($post_id, 'date' . $i);
if(!empty($the_date[$i]))
{        array_push($DatesArr, $the_date[$i][0]); }
}
$choices = array();
foreach ( $DatesArr as $Date ) {
$choices[] = array( 'text' => $Date, 'value' => $Date);
}
$field->choices = $choices;
}
return $form;
}

Я беру идентификатор сообщения с методом post с помощью функции ibs_id. Функция работает отлично, но когда я нажимаю на кнопку отправки с неверными данными (например, у меня нет поля для заполнения), выпадающие списки исчезают.

Я должен отметить, что другие поля, которые динамически заполняются функцией ibs_id для получения идентификатора записи, все еще заполнены.

0

Решение

Вам нужно использовать isSelected сохранить его выбранным. проверьте ниже полный код.

 function populate_dates( $form ) {
$post_id = ibs_id();
foreach ( $form['fields'] as &$field ) {
if ( $field->type != 'select' || strpos( $field->cssClass, 'populate-dates' ) === false ) {
continue;
}
$the_date = array();
$DatesArr = array();
for($i=0;$i<20;$i++)
{
$the_date[$i] = get_post_meta($post_id, 'date' . $i);
if(!empty($the_date[$i]))
{        array_push($DatesArr, $the_date[$i][0]); }
}
$choices = array();
foreach ( $DatesArr as $Date ) {
$isselected=false;
if($_POST['input_'.$field->id]==$Date)   $isselected=true;
$choices[] = array( 'text' => $Date, 'value' => $Date,'isSelected' => $isselected );
}
$field->choices = $choices;
}
return $form;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]