验证失败时在表单中显示提交的值

时间:2015-05-16 作者:Jürgen Paul

目前我有:

$options = get_option( \'jons-plugin-options\' );
        echo "<input id=\'jons-plugin-options[field-two]\' name=\'jons-plugin-options[field-two]\' size=\'4\' type=\'text\' value=\'" . $options[\'field-two\'] . "\' />";
但它不会获取提交的表单值,并在执行以下操作时显示它:

add_settings_error( \'field-two\', \'field-two\', \'Field two must not be 0.\' );
return false;
在register\\u设置回调中。

2 个回复
SO网友:TheDeadMedic

您不能。如果您正确使用设置API,以下是您尝试保存选项时发生的情况:

将帖子发送到options.phpupdate_option 在您的注册设置上,从register_setting 应用

  • 任何失败/您没有在回调中返回的数据都不会被保存
  • WordPress重定向回您的选项页(GET)
  • 现在您返回到选项页,并显示错误消息,但数据未写入数据库,现在$_POST 将为空。

    我能看到的唯一方法是将“不正确”的数据存储在另一个选项中,在清理回调中,以便在返回的页面上使用。

    SO网友:Tim

    下面是我如何处理这个问题的。希望它能帮助别人。

    /**
     * Add a validation callback to the settings form
     */
    public function options_update()
    {
        register_setting($this->plugin_name, $this->plugin_name, array($this, \'validate\'));
    }
    
    /**
     * Validates and sanitizes the submitted values
     * @param $input
     * @return array
     */
    public function validate($input)
    {
        $valid = array();
    
        $valid[\'is_api_enabled\'] = (isset($input[\'is_api_enabled\']) && !empty($input[\'is_api_enabled\'])) ? 1 : 0;
        $valid[\'api_key\'] = (isset($input[\'api_key\'])) ? $input[\'api_key\'] : \'\';
    
        if ($valid[\'is_api_enabled\'] === 1) {
            if (!$valid[\'api_key\'] || empty(trim($valid[\'api_key\']))) {
                add_settings_error($this->plugin_name, \'api_key\', __(\'API key is mandatory if API is enabled\'));
    
                $this->revert_setting($valid, $this->plugin_name, \'api_key\');
                $this->revert_setting($valid, $this->plugin_name, \'is_api_enabled\');
            }
        }
    
        // only return accepted values (old ones or correct)
        return $valid;
    }
    
    /**
     * Revert the submitted setting to its original value
     * @param $new
     * @param $option
     * @param null $key
     */
    private function revert_setting(&$new, $option, $key = null)
    {
        $old = get_option($option);
    
        if ($key) {
            $new[$key] = array_key_exists($key, $old) ? $old[$key] : null;
        } else {
            $new = $old;
        }
    }
    

    结束

    相关推荐

    添加提交options.php的函数

    我有一张表格<form method=\"post\" action=\"options.php\"> ......... <input type=\"submit\" class=\"button-primary\" value=\"<?php _e( \'Save changes\', \'bsp_style_settings\' ); ?>\" /> 我有所有的注册设置/admin\\u init等,一切正常,并将数据保存到数据库的WP\