WordPress教程

创建WordPress后台选项界面(四)—— 选项添加到现有管理界面

我们要保存的数据是一个email地址,除了单独为其创建一个管理界面的方式外,还可以选择将这字段加入到现有的管理界面中,例如设置->常规(Settings->General)中。

如果你没有cc_comment.php,请返回创建WordPress后台选项界面(三)下载

方法概述:

  1. 删除cccomm_option_page()和添加菜单的代码
  2. 创建一个函数,用来输出需要注册的字段的HTML结构
  3. 使用add_settings_field()函数将这个字段加入到设置->常规下

Step 1. 删除cccomm_option_page()和添加菜单的代码

删除下面两段代码

function cccomm_option_page() {
	?>
	<div class="wrap">
		<?php screen_icon(); ?>
		<h2>CC Comments Options </h2>
		<p>Welcome to CC Comments plugin, here you can edit the email(s) to CC your comments to. </p>
		<form action="options.php" method="post" id="cc-comments-email-options-form">
			<?php settings_fields('cccomm_options'); ?>
			<h3><label for="cc_email"></label>Email to send CC to:
			<input type="text" name="cccomm_cc_email" id="cccomm_cc_email" 
			value="<?php echo esc_attr(get_option('cccomm_cc_email')) ?>" size="40" /></h3>
			<p><input type="submit" name="submit" value="Save Email" /></p>		
		</form>
	</div>
	<?php
}
function cccomm_plugin_menu() {
	add_options_page('CC Comments Settings', 'CC Comments', 'manage_options', 'cc-comments-plugin','cccomm_option_page' );
}

Step 2. 创建一个函数,用来输出需要注册的字段的HTML结构

function cccomm_setting_field() {
	?>
	<input type="text" name="cccomm_cc_email" id="cccomm_cc_email"
	value="<?php echo get_option('cccomm_cc_email'); ?>" />
	<?php
}

保证input字段的id和name与get_option中的option_name相同即可

Step 3.使用add_settings_field()函数将这个字段加入到设置->常规下

function cccomm_init() {
    add_settings_field('cccomm_cc_email', 'CC Comments', 'cccomm_setting_field', 'general');
    register_setting('general', 'cccomm_cc_email');
}

使用add_settings_field添加字段:

  • 第一个参数是字段的id,这里是cccomm_cc_email,与input中的option_name保持一致
  • 第二个是label名称
  • 第三个就是用来产生input结构的函数,就是之前创建的cccomm_setting_field
  • 第四个参数决定要将这个字段加入哪个section,这里是加入到general section

 

使用register_setting()来注册字段

  • 第一个参数是group name或者说section name,在这里就是general
  • 第二个参数是字段的option_name,也就是cccomm_cc_email

 

这时候,访问后台->设置->常规,就可以在页面最底部看到新添加的CC Comments字段,输入地址,点击保存就可以将数据写入数据库。

CC Comments字段,位于general section中

section和setting field

这里有两个概念要弄清,就是section和setting field。

一个section就是一组settings(a group of settings),并带有公共的头部,在文档中是这样描述的

Settings Sections are the groups of settings you see on WordPress settings pages with a shared heading.

为了进一步描述section,我们修改一下cc_comment.php,将CC Comments field添加到一个新的section中

在cccomm_init()函数中添加

add_settings_section('cccomm', 'CC Comments', 'cccomm_setting_section', 'general');

添加一个id为cccomm的section,标题是CC Comments,使用函数cccomm_setting_section产生HTML结构,这个section将位于general下(设置->常规)

定义产生cccomm section的函数

function cccomm_setting_section() {
	?>
	<p>Here you can specify the cc email</p>
	<?php
}

接下来,add_settings_field也要修改

add_settings_field('cccomm_cc_email', 'CC Comments', 'cccomm_setting_field', 'general', 'cccomm');

对比一下,会发现只是结尾多了一个参数叫cccomm,意思是说:

将这个field添加到general页面下名为cccomm的section中。

 

刷新后台页面,效果如下

section and setting field

结语

将管理选项添加到现有的管理界面,取决于归类方式,如果这些选项涉及到整站设置,那放到general下可能很合理,如果涉及到隐私,放到privacy下也会合理。

示例代码下载

[download id=41]

3条评论

  1. 是不是这个add_settings_field是添加内容到WP默认的”设置”菜单下边的?
    如果我有个新的自己建的侧边栏menu是不是用这个add_settings_field加不了?

  2. 如果我没说错的话,这段代码中的value是不会有value的
    function cccomm_setting_field() {
    ?>
    <input type="text" name="cccomm_cc_email" id="cccomm_cc_email"
    value="" />
    <?php
    }

    需要修改为 echo get_option(‘cccomm_cc_email’);

评论已关闭。