IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    WordPress 添加Meta Box中几个关键点

    李惟发表于 2014-12-28 16:19:10
    love 0

    什么是wordpress的Meta Box

    Meta Box就是wordpress中的自定义数据信息组合,当我们发表一篇文章的时候会作为一个额外的表单区域添加进来作为信息编辑。在数据库中的字段分别为:

    • meta_id:Meta Box的ID
    • post_id:文章ID
    • meta_key:Meta Box的关键字段
    • meta_value:关键字段值

    这个就不多提了,有兴趣大家可以自己搜索资料

    如何添加Meta Box

    网上文章很多,这也不是今天要说的,有兴趣大家可以看看一位朋友写的技术文章:WordPress 添加Meta Box,比较通俗易懂。而今天我主要提的是添加Meta Box的几个关键事项,我会拿这篇文章作为示范举例;其中包括几个没有被提到的点,下面的内容需要对wordpress有一定了解

    添加Meta Box

    在示例中有段代码:

    add_meta_box(
        'rating_meta_box_id', '推荐指数', 'render_rating_meta_box', $type, 'side', 'default'
    );
    • 第三个参数为回调函数,作为展示用
    • 第四个参数为文章类型,支持自定义文章类型
    • 第五个参数为展示位置,分别有:normal、advanced、side,默认是advanced
    • 第六个参数为展示优先级,分别有:high、core、default、low,默认是default

    接着来说说展示内容需要注意的几个地方

    判断文章类型

    尤其是给自定义文章类型添加Meta Box尤其重要,你可能不是为所有文章都添加自定义字段。在添加Meta Box的时候会指定一个回调函数,回调函数的第一个参就是当前文章对象,可以根据当前对象来判断文章类型,类似下面这段代码:

    function save_book_info($post_id, $post)
    {
        if ($post->post_type != 'read_online')
        {
            return ;
        }
    }

    区分自定义数据

    添加wordpress文章时可以手动添加自定义字段,也可以提供上面的方式通过Meta Box添加自定义字段。那问题来了,要如何区分这两者数据呢?可以在为meta_key设置一个前缀为“_”的名称,例如:_wp_read,_end_time 等等

    删除数据

    这是这篇文章要说的最重要的一点了,在网上任意搜索wordpress的Meta信息都基本没有找到,包括wordpress官方帮助文档也没有提到:http://codex.wordpress.org/Function_Reference/add_meta_box

    我也是在一次无意间操作发现的,在wordpress中为Meta Box自定义字段数据入库需要用到save_post这个钩子,这个钩子的回调函数主要用于用途在于数据入库,类似下面这样:

    update_post_meta($post_id, $rating_key, $rating_value);

    当你在列表页中删除指定文章时(移入回收站),会原封不动依次触发和入库时一样的回调函数。那么问题来了,这可能造成重复入库。那该怎么办?

    方法1:检查nonce

    if (!isset($_POST['rating_nonce_name'])) {
        return $post_id;
    }

    具体就不详细说明了,大家可以在上面说的示范文章中找到示例,这里要说一点,回收站操作是绝对没有post数据的,所以无论检测post中哪个值都是OK的

    方法2:判断当前动作,当操作删除的时候会根据当前操作,记录在get的action参数中,当值为:

    • trash:表示将文章移入回收站
    • untrash:表示将文章从回收站移入wordpress

    那需要彻底删除数据怎么做?

    wordpress将文章从回收站彻底删除后会一并将与文章对应的post_mate删除,所以不用担心。如果有需要额外操作的话,课题通过 delete_post 这个钩子,进行后续操作

    删除Meta Box

    这个用的不多,但还是补充上吧,与 add_meta_box 对应的钩子是  remove_meta_box

    您可能也喜欢:
    内核控制Meta标签:让360浏览器默认使用极速模式打开网页
    使用 CSS3 Box Shadow 实现的 10 个创新技术
    不得不说的9款WordPress SEO插件
    WordPress 简码插件 Shortcodes ultimate(终极简码)
    为您的WordPress 添加语音搜索功能
    无觅


沪ICP备19023445号-2号
友情链接