WordPress 的自定义字段就是文章的 meta 信息 (元信息),利用这个功能,可以扩展文章的功能,是学习 WordPress 插件开发和主题深度开发的必备知识,方便给文章储存一些额外的自定义内容。

自定义字段不光给插件开发者使用,WordPress 的特色图像、自定义页面模板等功能的信息都储存在自定义字段的表单里边。

在文章编辑器界面的 「自定义栏目」 板块可以管理除了名字开头是 「_」 的字段 (没有 「自定义栏目」 板块请在右上角的 「显示选项」 开启),具体原因可以参考 《WordPress 不可见的自定义字段 》,所以很多 WordPress 自己使用的自定义字段无法在此管理。

存储原理

自定义字段非常灵活,首先来说一下它的储存原理和为什么这么灵活。数据库中,储存文章的 wp_posts 表单,只有默认的 20 个项目,用于储存必须的文章信息。

而存储自定义字段的 wp_postmeta 表,却只有四个项目,分别是 meta_id(自定义字段的 ID) 、 post_id(自定义字段属于的文章的 ID) 、 meta_key(自定义字段的名字) 和 meta_value(自定义字段的值),一般我们只需要注意 meta_key 和 meta_value 两个项目即可。

正是因为这样,每篇文章都可以有相同名字但不同值的自定义字段,而且可以有无限个自定义字段,任何的插件和主题都可以利用自定义字段对文章信息进行扩展。

一篇文章的自定义字段的名字是可以重复的。

添加字段

自定义字段可以在文章编辑页面操作,但本文主要写关于开发的事情。

添加自定义字段,可以使用 add_post_meta() 函数:

1

add_post_meta($post_id,$meta_key,$meta_value,$unique);

参数:

$post_id

(整数)(必须) 添加自定义字段的文章的 ID.

默认值:None

$meta_key

(字符串)(必须) 自定义字段的名称。

默认值:None

$meta_value

(混合)(必须) 自定义字段的值。

默认值:None

$unique

(布尔)(可选) 如果已经有相同名字的字段,是否重复添加。 True 允许;False 不允许。

默认值:False

更新字段

要更新一个字段的值,可以使用 update_post_meta() 函数:

1

update_post_meta($post_id,$meta_key,$meta_value,$prev_value);

参数:

$post_id

(整数)(必须) 更新自定义字段的文章的 ID.

默认值:None

$meta_key

(字符串)(必须) 更新的自定义字段的名称。

默认值:None

$meta_value

(混合)(必须) 更新的自定义字段的值。

默认值:None

$prev_value

(混合)(可选) 此参数只有在一篇文章有多个相同名称的自定义字段时才有用。如果留空,则更新所有同名的字段,否则则更新和此参数值相同的值的字段。

默认值:空字符串

获取字段

获取字段可以使用 get_post_meta() 函数:

1

get_post_meta($post_id,$key,$single);

参数:

$post_id

(整数)(必须) 要获取字段的文章 ID,如果在循环中,可以使用 get_the_ID() 来设置。

默认值:None

$key

(字符串)(可选) 要获取的字段的名称。

默认值:None

$single

(布尔)(可选) 如果为 True 则返回一个字符串;如果为 False 则返回数组,且相同键值的自定义字段的值会按照添加顺序组合成一个序列数组。

默认值:False

例子

下边是一个浏览统计的简单例子:

functionBing_statistics_visitors($cache=false){

    if(!is_singular())return;

    global$post;

    $id=$post->ID;

    if(get_post($id)->post_status!='publish')return;

    $post_views=(int)get_post_meta($id,'views',true);

    update_post_meta($id,'views',($post_views+1))||add_post_meta($id,'views',1,true);

}

add_action('wp_head','Bing_statistics_visitors');

获取计数:

functionBing_get_views(){

    global$post;

    $views=number_format((int)get_post_meta($post->ID,'views',true));

    return$views;

}

更多的函数和用法请访问官方文档:http://codex.WordPress.org/Custom_Fields