チュートリアルで管理者設定ページにタブ設定を表示しようとしましたが、設定保存通知を2回取得しています。
私はそれが異なる設定フィールドによるものだと思いますが、タブの選択に基づいてPHP条件を使用して1つのフォームのみを表示しています。そのため、1つのsettings_fields()
を含むフォームは1つだけですが、保存時に2回保存された設定をどのように表示するかがわかります。わからない。どんな体もこれを助けることができます。
コード
<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>
@ MrJustinのアドバイスから質問を投稿した後に試してみました
add_settings_section
とは別にadd_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' />";
}
これを試しても、設定が2回保存されます。しかし、section
は1つだけで、settings_fields
は1つだけで、合計で1つのフォームしかありません。変更を保存するときに2回保存された設定が表示される理由。
編集
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>
犯人は次のとおりです。
<?php settings_errors(); ?>
これは必要ではなく、2番目の「設定が保存されました」が生成されます。エラーがない場合の通知。
フォーマット用に編集されました。
従来とは異なる方法でオプションページを設定します。表示 このWP/StackExchange 正解、これが設定ページの設定方法です。これは問題なく機能します。 *注意:私の答えは正しいものです。
-編集-
これを試してください。実際の表示はまだ少しオフです。2回保存するべきではありません。実際の表示コンテンツにフォームをラップし、submit_buttonにコンテンツを配置します。
<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_settings_section()の最後の部分は、オプショングループ自体です。したがって、「my-plugin」がグループになります。実際のオプションはadd_settings_field()の最初の部分です
意味:my-plugin ['field-one']がオプションです。
先に進み、これらの調整を行い、得られるものを確認してください。
その後、更新してポストバックします。