Гравитационные формы / раскрывающиеся поля - Пустой раскрывающийся список после неверной отправки - PullRequest
0 голосов
/ 12 июня 2018

У меня есть код ниже для динамического заполнения выпадающих полей:

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 для получения идентификатора записи, все еще заполнены.

1 Ответ

0 голосов
/ 12 июня 2018

Вам нужно использовать 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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...