我的验证功能:
function my_plg_validate_options( $input ) {
$valid = array();
if ( is_numeric( $input['num_tags'] ) )
$valid['num_tags'] = $input['num_tags'];
else
add_settings_error('my_plg_validate_num_tags_field','my_plg_validate_num_tags_error','Incorrect value entered!','error');
if(!empty($valid))
{
return $valid;
}
}
修改
function my_plg_options_page()
{
?>
<div class='wrap'>
<h2>Tagara | Postavke </h2>
<form action="options.php" method="post">
<?php settings_fields('my_plg_options'); ?>
<?php do_settings_sections('my_plg'); ?>
<input name="Submit" type="submit" value="Save Changes" class="button button-primary" />
</form>
</div>
}
function nd_tch_tagara_admin_init(){
register_setting( 'my_plg_options', 'my_plg_options','my_plg_validate_options' );
add_settings_section( 'my_plg_main', 'Postavke plugina','my_plg_section_text', 'my_plg' );
add_settings_field( 'my_plg_num_tags_field', 'Unesite broj tagova','my_plg_setting_input', 'my_plg', 'my_plg_main' );
}
如果num_tags不是数字,它会保存,没有任何内容并覆盖我之前的值(数据库中的字段为空)。如果验证未通过,如何防止Wordpress覆盖设置中保存的先前值。
答案 0 :(得分:6)
我认为你的代码看起来像是:
function my_plg_validate_options( $input ) {
$old_option = get_option('name_option'); // Your option name
if ( ! is_numeric( $input['num_tags'] ) ) {
$input['num_tags'] = $old_option['num_tags'];
add_settings_error('my_plg_validate_num_tags_field','my_plg_validate_num_tags_error','Incorrect value entered!','error');
}
return $input;
}
将name_option替换为您的。希望有所帮助!
更新:
在你的情况下:
function my_plg_validate_options( $input ) {
$option_name = 'my_plg_options';
$old_option = get_option($option_name); // Your option name
if ( ! is_numeric( $input['num_tags'] ) ) {
$input['num_tags'] = $old_option['num_tags'];
add_settings_error('my_plg_validate_num_tags_field','my_plg_validate_num_tags_error','Incorrect value entered!','error');
}
return $input;
}