Wordpress - формы ниндзя редактировать выбранные значения

Я использую Ninja Forms 3.1.4 в настраиваемой теме Wordpress, и я пытаюсь проверить и отредактировать значение <select> на сервере перед сохранением его в базе данных, например:

<select>
  <option value="0">Please select a value</option>
  <option value="1" selected>Option One</option>
  <option value="2">Option Two</option>
</select>

При отправке, если выбран <option value="1" selected>Option One</option>, его значение будет сохранено в базе данных. Это означает, что если я захочу получить эту информацию позже, например, в уведомлении по электронной почте, я получу «1». Я бы предпочел показать "Вариант 1" или что-нибудь более понятное для человека.

Я также хотел бы выдать ошибку, если значение select равно «0».

Я нашел этот раздел в кодексе: http://developer.ninjaforms.com/codex/submission-processing-hooks/

Итак, я попытался реализовать это в моем functions.php вот так:

add_filter('ninja_forms_submit_data', 'edit_select_submit_data');

function edit_select_submit_data($form_data) {

    foreach($form_data['fields'] as $field) {

         /* The doc uses $field['key'] but it seems that
          * I don't have access to it...
          */
        if($field['id'] == '19') { // 19 being my select field ID
            switch($field['value']) {
                case '0':
                    $field['value'] = ''; // Set to empty, so it throws an error
                case '1':
                    $field['value'] = 'Option One'; // Set custom value
                case '2':
                    $field['value'] = 'Option Two'; // Set custom value
            }
        }

    }

    return $form_data;
}

Эта ловушка вызывается, и код выполняется в случае '1', но $field['value'] остается прежним и не обновляется.

Итак, мне интересно, правильно ли я использовал подход к редактированию значения отправки выбранного поля, потому что я не могу заставить его работать.


person Thomas Milan    schedule 07.06.2017    source источник


Ответы (1)


Пример в кодексе на самом деле не работает при обновлении значения поля, поскольку foreach переменная $field не является ссылкой на поля в $form_data, а просто копией значений.

Вместо этого попробуйте сделать это так:

foreach($form_data['fields'] as $key => $field)
{
    $form_data['fields'][$key]['value'] = 'Custom value';
}

Таким образом будут обновлены фактические данные формы, а не только переменная $field.

person steamountain    schedule 07.06.2018