0

我在自定义 Wordpress 主题中使用 Ninja Forms 3.1.4,我试图<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 ”。我宁愿展示“选项一”或更人性化的东西。

如果选择值为“ 0 ”,我也想抛出错误。

我在 codex 中找到了这一部分: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;
}

这个钩子被调用并且代码在case '1'下被执行,但是$field['value']保持不变并且没有更新。

所以,我想知道我是否使用了正确的方法来编辑选择字段提交值,因为我似乎无法让它工作。

4

1 回答 1

1

更新字段值时,codex 中的示例实际上不起作用,因为该foreach变量$field不是对中的字段的引用$form_data,而只是值的副本。

尝试这样做:

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

这样,实际的表单数据将被更新,而不仅仅是$field变量。

于 2018-06-07T12:55:39.977 回答