在带有选项卡的设置页面中保存两次设置

时间:2013-12-29 作者:rram

我试图通过教程在管理设置页面中显示选项卡式设置,但对我来说,我收到了两次保存设置的通知。

我认为这是由于不同的设置字段,但基于选项卡的选择,我只显示一个使用php条件的表单。所以可能只有一种形式settings_fields() 但在我保存时,它是如何显示两次保存的设置的。我什么都不知道。有人能帮忙吗。

Code

    <div class="wrap">  

        <div id="icon-themes" class="icon32"></div>  
        <h2>Sandbox Theme Options</h2>  
        <?php settings_errors(); ?>  
        <?php $active_tab = isset( $_GET[ \'tab\' ] ) ? $_GET[ \'tab\' ] : \'d_options\';  ?>
        <h2 class="nav-tab-wrapper">  
    <a href="?page=followshape&tab=d_options" class="nav-tab <?php echo $active_tab == \'d_options\' ? \'nav-tab-active\' : \'\'; ?>">Display</a>  
    <a href="?page=followshape&tab=s_options" class="nav-tab <?php echo $active_tab == \'s_options\' ? \'nav-tab-active\' : \'\'; ?>">Shape</a> 
    <a href="?page=followshape&tab=Stat" class="nav-tab <?php echo $active_tab == \'Stat\' ? \'nav-tab-active\' : \'\'; ?>">Stat</a> 
</h2>



            <?php  if( $active_tab == \'d_options\' ) { ?>
        <form method="post" action="options.php">  
            <?php
            settings_fields( \'shapet\' );  
            ?>

            <div class="show_type">
            <input type="radio" name="shape" id="radio1" value="1"<?php checked(1,get_option(\'shape\')); ?>/>
            <label for="radio1"><img src="<?php echo plugins_url(); ?>/slider/images/1.jpg"></label>

            <input type="radio" id="radio2" name="shape" value="2"<?php checked(2,get_option(\'shape\')); ?> />
            <label for="radio2"><img src="<?php echo plugins_url(); ?>/slider/images/2.jpg"></label>

            <input type="radio" id="radio3" name="shape" value="3"<?php checked(3,get_option(\'shape\')); ?> />
            <label for="radio3"><img src="<?php echo plugins_url(); ?>/slider/images/3.jpg"></label>

            <input type="radio" id="radio4" name="shape" value="4"<?php checked(4,get_option(\'shape\')); ?> />
            <label for="radio4"><img src="<?php echo plugins_url(); ?>/slider/images/4.jpg"></label>

            <input type="radio" id="radio5" name="shape" value="5"<?php checked(5,get_option(\'shape\')); ?> />
            <label for="radio5"><img src="<?php echo plugins_url(); ?>/slider/images/5.jpg"></label>
            <input type="text" name="sh_color" value="<?php echo get_option(\'sh_color\'); ?>" class="ir" />
            </div>
            <input type="submit" name="submit" /> 
            </form>  
            <?php 
        } if($active_tab == \'s_options\') { ?>
           <form method="post" action="options.php">
               <?php
            settings_fields( \'social\' );
            for($i=1;$i<=8;$i++){
           ?>
            <lable>Social Network<?php echo $i; ?> </lable><input type="text" name="sfsocial_net<?php echo $i; ?>" value="<?php echo get_option(\'sfsocial_net\'.$i); ?>"/>
            <lable>Show </lable><input type="checkbox" name="sfsocial_net_show<?php echo $i; ?>" value="1"<?php checked(1,get_option(\'sfsocial_net_show\'.$i)); ?> />
            <lable>Lable</lable><input type="text" name="sfsocial_lable<?php echo $i; ?>" value="<?php echo get_option(\'sfsocial_lable\'.$i); ?>"/>
            <br>

            <?php  }
               ?>
             <input type="submit" name="submit" /> 
          </form> 

        <?php } if ($active_tab == \'Stat\') { ?>
            <form method="post" action="options.php">
                <?php
            echo "graph";
            settings_fields(\'stat\');?>
            <lable>facebook</lable><input type="text" name="facebookun" value="<?php echo get_option(\'facebookun\'); ?>"/>
             <input type="submit" name="submit" /> 
            </form>
        <?php
        }?>    



    </div>
Tried After posting Question from @MrJustin advice

在我知道我应该使用add_settings_sectionadd_settings_field 除了register_setting

下面是我在另一个教程中尝试的代码。

function registering_settings(){
  register_setting( \'my-settings-group\', \'my-setting\' );
    add_settings_section( \'section-one\', \'Section One\', \'section_one_callback\', \'my-plugin\' );
    add_settings_field( \'field-one\', \'Field One\', \'field_one_callback\', \'my-plugin\', \'section-one\' );
}
add_action(\'admin_init\',\'registering_settings\');

function callback_testing(){
    ?>
<div class="wrap">  

        <div id="icon-themes" class="icon32"></div>  
        <h2>Sandbox Theme Options</h2>  
        <?php settings_errors(); ?>  
        <?php $active_tab = isset( $_GET[ \'tab\' ] ) ? $_GET[ \'tab\' ] : \'d_options\';  ?>
        <h2 class="nav-tab-wrapper">  
    <a href="?page=slug_testing&tab=d_options" class="nav-tab <?php echo $active_tab == \'d_options\' ? \'nav-tab-active\' : \'\'; ?>">Display Options</a>  
    <a href="?page=slug_testing&tab=s_options" class="nav-tab <?php echo $active_tab == \'s_options\' ? \'nav-tab-active\' : \'\'; ?>">Social Options</a> 
    <a href="?page=slug_testing&tab=S" class="nav-tab <?php echo $active_tab == \'S\' ? \'nav-tab-active\' : \'\'; ?>">Statistics</a> 
    <a href="?page=slug_testing&tab=new" class="nav-tab <?php echo $active_tab == \'new\' ? \'nav-tab-active\' : \'\'; ?>">New</a> 
</h2>

        <?php  if ($active_tab == \'new\') { ?>
            <form action="options.php" method="POST">
            <?php settings_fields( \'my-settings-group\' ); ?>
            <?php do_settings_sections( \'my-plugin\' ); ?>
            <?php submit_button(); ?>
        </form>

        <?php } ?>
         <?php  if ($active_tab == \'d_options\') { ?>

        <?php } ?>
         <?php  if ($active_tab == \'s_options\') { ?>

        <?php } ?>
    </div><!-- /.wrap -->

    <?php
}

  function section_one_callback() {
    echo \'Some help text goes here.\';
}
  function field_one_callback() {
    $setting = esc_attr( get_option( \'my-setting\' ) );
    echo "<input type=\'text\' name=\'my-setting\' value=\'$setting\' />";
}
即使尝试了这个,我还是保存了两次设置。但只有一种形式section 有一个settings_fields 总共只有一种形式。为什么当我点击保存更改时,它会显示两次保存的设置。

Edit

  register_setting( \'my-plugin\', \'my-setting\' );
    add_settings_section( \'section-one\', \'Section One\', \'section_one_callback\', \'my-plugin\' );
    add_settings_field( \'field-one\', \'Field One\', \'field_one_callback\', \'my-plugin\', \'section-one\' );


        <form method="post" action="options.php">  
<?php  if($active_tab == \'new\') {
    settings_fields( \'my-plugin\' );
    do_settings_sections( \'my-plugin\' );
} else if($active_tab == \'d_options\') { 
    // Do D_Options
} else if($active_tab == \'s_options\') {
    // Do S_Options
} 
submit_button();
?>  
</form>

2 个回复
SO网友:Rory Callaghan Cullen

罪魁祸首是:

<?php settings_errors(); ?>
不需要它,它将生成第二个“保存的设置”如果没有错误,则通知。

Edited for formatting.

SO网友:MrJustin

您正在以非传统方式设置选项页面。看法This WP/StackExchange 回答正确,这是设置页面的方式。这项工作完美无瑕*注意:我的答案是正确的。

--编辑--

尝试这样做:您的实际显示仍然有点差,不应该保存两次,我将您的表单包装在您的实际显示内容周围,并将submit\\u按钮放在内容上。

<form method="post" action="options.php">  
<?php  if($active_tab == \'new\') {
    settings_fields( \'my-settings-group\' );
    do_settings_sections( \'my-plugin\' );
} else if($active_tab == \'d_options\') { 
    // Do D_Options
} else if($active_tab == \'s_options\') {
    // Do S_Options
} 
submit_button();
?>  
</form>
--另一次编辑--

我确实注意到了这一点:

    // Your Code(s)
register_setting( \'my-settings-group\', \'my-setting\' );

settings_fields( \'my-settings-group\' );
do_settings_sections( \'my-plugin\' );

    // Should Be 

register_setting(\'my-plugin\', \'my-plugin\');

settings_fields( \'my-plugin\' );
do_settings_sections( \'my-plugin\' );
add\\u settings\\u部分()的最后一部分是选项组本身。所以“我的插件”就是这个组。实际选项将是add\\u settings\\u field()的第一部分

意思:我的插件[\'field-one\']是选项。

继续做这些调整,看看你得到了什么。

之后,发回更新。

结束

相关推荐

change backend header options

Wordpress在“设计”选项卡下提供了标题和背景的后端页面,可以在函数内部激活。php。是否可以自定义该选项?例如,我想有可能选择一个标志。或者,最好不要更改这些页面,而是将自定义标题/背景选项集成到我的主题的选项选项卡中?