我正在关注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\'];
}
或者,如果我以错误的方式处理这个问题,如果有人能为我指出正确的方向,我将不胜感激。
最合适的回答,由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\'];
}