乌徒帮技术范WordPressWordPress内核 › post_meta_box开发使用及其位置详解

post_meta_box开发使用及其位置详解

分类:WordPress内核

post_meta_box是wordpress中非常美妙的一个功能,可以帮助你在wordpress后台的文章编辑或添加页面提供一个新的区域,在这个区域,你可以控制自己的内容。接下来,我们来看看它是怎么工作的。我们将以下图作为整个文章的说明。

注册一个post meta box

由于post meta box是异步的,因此,你不能直接使用add_meta_box,而需要把它钩入到特定的进程(add_meta_boxes)中。

add_action('add_meta_boxes','add_post_metas_init');
function add_post_metas_init(){
?? ?add_meta_box(
?? ??? ?'post-metas-english-title',
??????? '英文标题',
??????? 'add_post_metas_box_english_title',
??????? 'post',
??????? 'side',
??????? 'high'
?? ?);
}

注意,上面的add_post_metas_init函数中,你可以放入多个add_meta_box,从而增加多个meta box区域。

add_meta_box的参数有7个,我们一般只用到前面4个。第1个为这个meta box确定一个唯一的ID,这个ID既被记录到数据库,也被显示用来作为这个区域div的id值。第2个参数用来显示这个区域的名称,如上图中的“英文标题”四个字。第3个参数用来调用这个区域要显示或执行的函数。第4个参数是指这个meta box将会显示在什么post_type的编辑或添加页面,例如你填写page的话,在发布文章时,你就不能看到,只有在发布页面的时候你才能看到。具体还有哪些值,你需要看一下官方文档。

为区域设计界面内容

上面说到在区域内显示内容的函数,接下来我们来构造一个函数,让这个函数使得我们添加进去的这个meta box里面显示我们想要的内容。

function add_post_metas_box_english_title($post){
?? ?$meta_key = '英文标题';
?? ?$meta_value = get_post_meta($post->ID,$meta_key,true);
?? ??><?php echo $meta_key; ?>:<input type="text" style="width:260px;" name="post_metas[<?php echo $meta_key; ?>]" value="<?php echo $meta_value; ?>" /><br />
?? ?<p>它将作为这个成分在前台显示的英文名称</p>
<script>
jQuery(function($){
?? ?$('#slugdiv h3.hndle span,#slugdiv lable.screen-reader-text').text('URL中的%postname%');
?? ?$('#post_name').width(250);
});?? ?
</script>
<?php
}

这个函数可以传入$post对象作为参数,这样我们就可以获得当前正在编辑的文章的一些内容。

你可以发现,上面的代码其实就是正常的PHP混杂HTML的显示代码,你甚至可以加入更多的js和css代码来控制这个区域(或者整个页面)的显示。

控制该Meta Box的位置

我们可以发现,在wordpress中,基本上所有区块都是可以拖动的,但我们希望这个区域默认(第一次拖动之前)显示在比较显眼的位置,例如发布按钮很近的地方。这个时候,我们需要用到add_meta_box的第5、6个参数,第5个参数确定这个区块会显示在左边还是右边,第6个参数确定这个区块显示在顶部或下面的位置。(注意,这些位置的确定只是在第一次拖动之前有效,一旦用户进入后台拖动该区域到其他位置,那么今后它会显示在拖放的目标位置。)

第5个参数可以有normal、side、advanced三个值,而第六个参数有high、core、default、low四个值。他们的位置关系如下:

通过第5、6个参数的组合,你就基本可以控制你的meta box的位置。需要注意的是,在add_post_metas_init函数中你可以有多个add_meta_box,如果你规定的5、6个参数都相同,系统将按照add_meta_box的出现(执行)顺序来确定他们的显示顺序。

好了,通过本文,你一定可以掌握wordpress中Meta Box的开发技巧了。

填写个人信息,赶快回复吧!