将某些管理选项表单重置为默认设置的最佳方式?

时间:2011-01-22 作者:kaiser

我的主题有一些选项页。我在add\\u menu\\u page,add\\u submenu\\u page上做了这个。我还通过register\\u setting获得了设置,在那里我获得了add\\u settings\\u部分和add\\u settings\\u字段。字段回调函数来自一个自动生成我的字段的类。然后,我构建了一个表单回调函数(用于add\\uu(sub)menu\\u页面,如下所示。

public function render() {
  $this->notify();
  ?>
   <div class="wrap">   
    <div id="icon-themes" class="icon32"><br /></div>
    <h2><?php echo $this->page_title; ?></h2>
    <p><?php _e(\'The developer mode allows access to some of your most important rapid prototyping tools.\', MY_TEXTDOMAIN); ?></p>

    <div class="postbox-container">
     <div class="postbox ">
      <div class="inside">

       <form action="options.php" method="post">

        <?php
        settings_fields( MY_OPTIONS );
        do_settings_sections(__FILE__);
        ?>

        <p class="submit">
         <input class="button-primary" name="Submit" type="submit" value="<?php _e(\'Save Changes\', MY_TEXTDOMAIN); ?>" />
        </p>

       </form>

       <form method="post">
        <p class="submit">
         <input class="button-secondary" name="Reset" type="submit" value="<?php _e(\'reset\', MY_TEXTDOMAIN); ?>" />
         <input name="action" type="hidden" value="reset" />
        </p>
       </form>

      </div>
     </div>
    </div>

   </div>
   <div class="clear"></div>
  <?php 

 }

 private function notify() {
  if ( isset($_POST[\'save\']) ) :
   ?>
   <div id="message" class="updated fade">
    <p><?php sprintf(__(\'$1$s Options update %2$ssuccessfull%3$s.\', MY_TEXTDOMAIN), $this->name, \'<strong>\', \'</strong>\'); ?></p>
   </div>
   <?php 
  elseif ( isset($_POST[\'reset\']) )  :
   delete_option( MY_OPTIONS );
   ?>
   <div id="message" class="updated fade">
    <p><?php sprintf(__(\'$1$s Options have been %2$sdeleted%3$s.\', MY_TEXTDOMAIN), $this->name, \'<strong>\', \'</strong>\'); ?></p>
   </div>
   <?php 
  endif;
 }
(这都是在一节课上完成的)

我可以设置默认值,更改和保存它们,一切都很好。但有一个问题仍然存在:我无法删除我的选项,也无法将它们重置为默认值。有人知道如何做到这一点吗?谢谢

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

您应该(并且必须为安全起见)使用验证函数,这是设置API的一部分。我似乎没有在你的代码中看到它。在那个里,您应该能够简单地为选项传递空值,在这种情况下,它应该被保存为禁用。

当然你也可以用普通的Options API 从代码中的任何适当位置直接访问和修改设置的函数。

结束