教程:为主题或插件添加一个管理员选项设置页面
发布于
警告!这篇文章很旧!
文章上次更新时间是 2021 年,距离现在已经 3 年没有未更新/维护了,请根据实际情况谨慎使用。
参考文档:《创建WordPress后台选项界面》
/**
* 1. 注册选项
* 1.1. 在数据表 wp-options 中注册相应的属性名,用于保存数据。
*
* 2. 注册选项设置页面
* 2.1. 注册选项设置页面(这就是你需要的页面,你可以在后台找到它)
* 2.2. 启用帮助选项卡(后台管理页面右上角的帮助按钮,点击可启用一个下拉菜单)
* 2.3. 构建选项设置页面(在这里你可以看到如何设置能让你的表单将数据保存到数据库)
*/
// 1.1. 在数据表 wp-options 中注册相应的属性名,用于保存数据。
// 这里是创建一个属性,该属性用于为定时任务 abc 提供更新时间。
add_option('wzm_cron_abc_time','21:30:00');
// 2.1. 注册选项设置页面(这就是你需要的页面,你可以在后台找到它)
add_action( 'admin_menu', 'wzm_cron_abc_menu' );
function wzm_cron_abc_menu() {
// 2.1.1 函数 add_options_page() 的意思在菜单“设置”栏目之下新建页面,
// 与之类似的函数还有:
// add_menu_page() 添加到后台主菜单,和菜单“设置”栏目并列。
// add_submenu_page() 添加到后台主菜单中的某个栏目之下,也包括菜单“设置”栏目。
$wzm_cron_abc_options_page = add_options_page(
'自定义定时器设置', // 新建页面的标题
'自定义定时器设置', // 新建页面在菜单中的标题
'manage_options', // 哪些用户有权限可以查看新建页面
'wzm-cron', // 新建页面的slug名,同时也是新建页面的url
'wzm_cron_abc_options_html' // 此函数用于输出新建页面的内容
);
// 2.1.2. 加载设置页面的同时加载帮助选项卡
add_action( 'load-'.$wzm_cron_abc_options_page, 'wzm_cron_abc_help_html' );
}
// 2.2. 创建帮助选项卡(后台管理页面右上角的帮助按钮,点击可启用一个下拉菜单)
function wzm_cron_abc_help_html(){
$wzm_help_content = '<p>你好,这里是帮助选项卡。</p>';
get_current_screen()->add_help_tab( array(
'id' => 'overview', // 帮助选项卡的ID
'title' => __( 'Overview' ), // 帮助选项卡的标题
'content' => $wzm_help_content // 帮助选项卡的内容
));
}
// 2.3. 构建选项设置页面(在这里你可以看到如何设置能让你的表单将数据保存到数据库)
// 关于具体样式,可以参考系统自带文件:wp-admin/options-general.php
// 如果想了解更多,可以搜索关键词“设置API(Settings API)”。
function wzm_cron_abc_options_html(){
?>
<div class="wrap">
<h1>自定义定时器设置</h1>
<form method="post" action="options.php">
<?php
// settings_fields($options_group) 配合 register_setting($options_group,$options_name)
// 可以完成数据的自动保存。注意:这里两者的组名 $options_group 虽然可以自定义,但两者要保持相同。
settings_fields('wzm_cron_abc_group');
?>
<table class="form-table" role="presentation">
<tbody>
<tr>
<th><label for="wzm_cron_abc_time">每日更新时间</label></th>
<?php
/**
* input 中的 step 属性:用于指定<input>元素中合法编号之间的间隔。
*
* 示例:在“type=number”中如果“step=1”,则点击input输入框右侧的步进箭头(即上下箭头,又叫数字微调器),
* 每次增加或减少的值为1,如果手动填写则数字为整数。
* 如果“step=3”,则点击步进箭头时,每次增加或减少的值为3;如果手动填写则数字为整数的同时还要是3的倍数,如果不是则报错。
* 如果“step=0.1”,则点击步进箭头时,每次增加或减少的值为0.1;如果手动填写则数字为浮点数(xx.x)如果不是则报错。
*
* 在这里,“type=time”中,“step=1”则表示点击步进箭头时,每次增加或减少1秒钟;如果设置为60,则是1分钟。
*
* 以上,如果输入的值不符合 step 的要求,则会在用户点击提交按钮时弹出对话框提醒用户:
* 请输入符合要求的值,并给出距离用户输入的值差距最小的两个值以辅助用户输入。
*
* https://www.w3schools.com/tags/att_input_step.asp
* https://www.cnblogs.com/bluealine/p/7992305.html
*/
?>
<td><input name="wzm_cron_abc_time" type="time" step="1" min="00:00:00" max="23:59:59" id="wzm_cron_abc_time" value="<?php form_option( 'wzm_cron_abc_time' ); ?>" class="text"></td>
</tr>
</tbody>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}
function wzm_cron_abc_register() {
register_setting('wzm_cron_abc_group','wzm_cron_abc_time');
}
add_action('admin_init','wzm_cron_abc_register');
// 1. 删除设置页面
// 直接移除上面的代码即可。
// 2. 删除选项
delete_option('wzm_posts_per_page');