我正在使用设置API保存插件的设置。我想要设置字段中的正整数值。
register_setting( $option_group, $option_name . \'_number\', \'sanitize_number_callback\' );
function sanitize_number_callback( $value ) {
$filtered = sanitize_text_field( $value );
if ( preg_match(\'/\\A[1-9]\\d*\\Z/\', $filtered) ) {
return $filtered;
}
else{
$type = \'error\';
$message = \'Number must be a positive integer\';
add_settings_error(
\'my_settings\',
esc_attr( \'settings_updated\' ),
$message,
$type
);
}
}
现在,如果用户输入非整数值并尝试保存设置,则会显示错误,并将空值保存到数据库中,覆盖先前保存的值,因为没有
return
条件为false时的语句。字段值也为空。
现在,如果我返回无效的净化值,那么它仍然保存在数据库中!
我不知道显示了一个错误,设置仍然保存着,这有什么意义!真奇怪!
我想要的:
- 清洁并验证
$value
如果设置无效,则阻止保存设置 - 在表单字段中保留输入的值是否有解决方法?
SO网友:Neil McGann
你可以这样做:
function sanitize_number_callback ($input){
if( !preg_match( \'/...regex for valid here.../\', $input ) ){
add_settings_error(
\'my_option\',
esc_attr( \'my_option\' ), //becomes part of id attribute of error message
__( \'Number must be a positive integer\', \'wordpress\' ), //default text zone
\'error\'
);
$input = get_option( \'my_option\' ); //keep old value
}
return $input;
}
基本上,如果验证失败,则返回旧的保存值。您的验证完全限制了输入值,因此无需进行清理。
我不知道如果验证失败,您如何在表单字段中保留不正确的值。据我所知,设置API不允许直接使用它。其他人可能会提供解决方案?