我们要保存的数据是一个email地址,除了单独为其创建一个管理界面的方式外,还可以选择将这字段加入到现有的管理界面中,例如设置->常规(Settings->General)中。
如果你没有cc_comment.php,请返回创建WordPress后台选项界面(三)下载
方法概述:
- 删除cccomm_option_page()和添加菜单的代码
- 创建一个函数,用来输出需要注册的字段的HTML结构
- 使用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字段,输入地址,点击保存就可以将数据写入数据库。
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中。
刷新后台页面,效果如下
结语
将管理选项添加到现有的管理界面,取决于归类方式,如果这些选项涉及到整站设置,那放到general下可能很合理,如果涉及到隐私,放到privacy下也会合理。
示例代码下载
[download id=41]
是不是这个add_settings_field是添加内容到WP默认的”设置”菜单下边的?
如果我有个新的自己建的侧边栏menu是不是用这个add_settings_field加不了?
如果我没说错的话,这段代码中的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’);
你说的很对,谢谢你提醒我