WordPress允许自定义添加文章自定义栏目,如下图,可以在文章编辑的时候,添加一个栏目随着文章发布和更新一起提交。
1.注册函数
首先添加动作,第一个参数为指定WordPress动作类型,第二个参数为指定函数
add_action(‘add_meta_boxes’, ‘fun_plug_add_meta_box’);
指定函数
function fun_plug_add_meta_box()
{
add_meta_box('down_link', '下载地址', 'meta_box_down_link_form', 'post', 'advanced', 'high');
}
add_meta_box函数功能如下
$id HTML 代码中设置区域中id属性的值,也是WordPress文章自定义栏目的一个唯一标识符
$title 区域中的标题名称,支持HTML代码
$callback 添加的设置区域的显示函数,界面在这个函数里面实现
$post_type 在 post 还是 page 的编辑页面中显示
$context 设置区域的显示位置,主编辑区(advanced)、边栏(side)
$priority 设置区域显示的优先级,high(高),low(低),default(默认)
$callback_args 回调函数接受的附加参数,一般省略
回调函数如下:
function meta_box_down_link_form($post)
{
// 创建临时隐藏表单,为了安全
wp_nonce_field('meta_box_down_link_form', 'meta_box_down_link_form_nonce');
// 获取之前存储的值
$value = get_post_meta($post->ID, 'down_link', true);
?>
<input type="text" value="<?php echo $value?>">
<?php
}
至此,后台文章已经正常显示内容了。
相关解释
【1】wp_nonce_field函数,本函数为WordPress防止攻击的一个函数,原理是生成一个随意的字符,在保存函数中,验证这个字符是否和提交的字符一致,如果不一致,就说明可能这个内容来自第三方伪造内容提交,而不是在文章页面直接提交。
当然,如果不写这个函数,也是可以的,在保存的函数中,也不用验证就是了。
函数第一个参数为唯一标识符,第二个为表单名称,在后面保存文章字段的时候,可以通过$_POST[‘名称’]来获取这个值。
【2】get_post_meta函数,WordPress中,通过get_post_meta获取保存的文章额外字段,通过update_post_meta保存额外字段。
2.保存文章数据
上面注册函数后,也能提交内容了,但是还没有保存内容,所以无法显示东西。需要接管WordPress文章保存函数。
注册保存文章动作,第二个参数为自定义函数,WordPress会传入一个文章ID参数
add_action(‘save_post’, ‘fun_save_post_down_link’);
自定义函数,本函数处理文章额外字段的保存
function fun_save_post_down_link($post_id)
{
// 安全检查
// 检查是否发送了一次性隐藏表单内容
if (!isset($_POST['meta_box_down_link_form_nonce'])) {
return;
}
// 判断隐藏表单的值与之前是否相同
if (!wp_verify_nonce($_POST['meta_box_down_link_form_nonce'], 'meta_box_down_link_form')) {
return;
}
// 判断该用户是否有权限
if (!current_user_can('edit_post', $post_id)) {
return;
}
// 判断 Meta Box 是否为空
if (!isset($_POST['down_link1'])) {
return;
}
update_post_meta($post_id, 'down_link', $_POST['down_link1']);
}
其中,安全检查中,需要上面的wp_nonce_field支持,如果没有创建这个随机值,就不需要判断。
首先判断是否有这个值,如果没有,说明提交可能是伪造的。接着判断值是否一致,通过函数wp_verify_nonce来判断,第一个为要对比的值,通过$_POST获取提交过来的值,第二参数为唯一标识符,和wp_nonce_field函数的第一个参数一致。
接着判断用户是否有权限保存文章,current_user_can函数来判断。
最后判断是否有提交自定义的值,不为空的话,就使用函数update_post_meta来保存这个数据。
免责声明: 本网站所发布的一切资源均来自于会员发布以及互联网收集,不代表本站立场,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则一切后果请用户自负;依据WordPress GPL开源许可协议分享,如有侵犯到您的权益,请联系我们。