防止Wordpress设置保存 - 验证

时间:2015-05-04 21:28:30

标签: php wordpress validation wordpress-plugin

我的验证功能:

 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覆盖设置中保存的先前值。

1 个答案:

答案 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;
}