设置API-输入始终在验证上更新

时间:2016-07-27 作者:thairish

我正在关注Wordpress的一本书,并试图创建一个插件,并显示了一个选项页面。

在这个页面中,我有两个文本字段(这些值存储在一个数组中)。我正在尝试添加自定义验证(例如,如果为空)。验证在register\\u setting函数的第三个参数中设置。

然而,这本书没有任何可能验证的例子(只是使用Wordpress函数来清理输入)。

要获取显示的错误消息,请遵循以下链接:https://codex.wordpress.org/Function_Reference/add_settings_error

在验证函数中,我做了如下操作:

if( $input[\'field_1\'] == \'\' ) {

    $type = \'error\';
    $message = __( \'Error message for field 1.\' );

    add_settings_error(
        \'uniq1\',
        esc_attr( \'settings_updated\' ),
        $message,
        $type
    ); 

} else {
    $input[\'field_1\'] = sanitize_text_field( $input[\'field_1\'];
}

if( $input[\'field_2\'] == \'\' ) {

    $type = \'error\';
    $message = __( \'Error message for field 2.\' );

    add_settings_error(
        \'uniq2\',
        esc_attr( \'settings_updated\' ),
        $message,
        $type
    ); 

} else {
     $input[\'field_2\'] = sanitize_text_field( $input[\'field_2\']
}

return $input;
我一直坚持的是,如果遇到错误情况,如何不更新该值。例如,我当前拥有的空值将显示正确的错误消息,但仍会将值更新为空。

是否有办法将旧值传递给该函数,以便在满足错误条件时将值设置为旧值,例如:

if( $input[\'field_1\'] != \'\' ) {

    $type = \'error\';
    $message = __( \'Error message for field 1.\' );

    add_settings_error(
        \'uniq1\',
        esc_attr( \'settings_updated\' ),
        $message,
        $type
    ); 

    $input[\'field_1\'] = "OLD VALUE";

} else {
    $input[\'field_1\'] = sanitize_text_field( $input[\'field_1\'];
}
或者,如果我以错误的方式处理这个问题,如果有人能为我指出正确的方向,我将不胜感激。

2 个回复
最合适的回答,由SO网友:thairish 整理而成

好吧,我想出来了。在执行验证的函数中,我可以从get\\u option函数获取保存在数据库中的原始值。

//The option name which is set in the second argument in the register_setting function
get_option( \'option_name\' ); 
之后,如果满足错误条件,我可以将输入值设置为旧值。

$old_options = get_option( \'option_name\' );

if( condition ) {

    //$input being the argument name for the validation function
    $input[\'option_name\'] = $old_options[\'option_name\'];

}

SO网友:stoi2m1

您的验证参数似乎为负数。

if ($foo != "") { //means if foo not equal to empty space
  // do something when not empty
  // here you are setting an error
} else {
  // do something when empty
  // here you are trying to do your normal operation
}
您在有数据时设置错误,然后在没有数据时尝试处理数据。

尝试更改!===

或者改变if中处理事情的顺序