WordPress中文开发手册

WordPress插件开发 — 管理帖子元数据

添加元数据

add_post_meta()可以很容易地添加元数据。 该函数接受一个post_id,一个meta_key,一个meta_value和一个唯一的标志。

meta_key是你的插件如何引用代码中的其他地方的元值。 像mycrazymetakeyname这样的东西可以工作,但是与插件或主题相关的前缀跟随关键字的描述会更有用。 wporg_featured_menu可能是一个好的。 应该注意的是,可以多次使用相同的meta_key来存储元数据的变体(参见下面的唯一标志)。

meta_value可以是字符串,整数或数组。 如果它是一个数组,它将被自动序列化,然后被存储在数据库中。

唯一标志允许您声明该键是否应该是唯一的。 一个非唯一的键是一个帖子可以有多个变体,如价格。
如果你只想要一个帖子的价格,你应该标记它是唯一的,并且meta_key将只有一个值。

更新元数据

如果一个密钥已经存在,并且要更新,请使用update_post_meta()。 如果您使用此功能并且该键不存在,那么它将创建它,就像您使用add_post_meta()一样。

与add_post_meta()类似,该函数接受一个post_id,一个meta_key,一个meta_value和一个唯一的标志。

删除元数据

delete_post_meta()接受一个post_id,一个meta_key和可选的meta_value。 它正好是名字所暗示的。

角色逃避

发送元值被存储时通过stripslashes()函数,所以在传递可能包含\转义字符的值(如JSON)时,您需要小心。

考虑JSON值{“key”:“value with \”escaped quotes \“”}:

$escaped_json = '{"key":"value with \"escaped quotes\""}';
update_post_meta($id, 'escaped_json', $escaped_json);
$broken = get_post_meta($id, 'escaped_json', true);
/*
$broken, after stripslashes(), ends up unparsable:
{"key":"value with "escaped quotes""}
*/

解决办法

通过使用函数wp_slash()(在WP 3.6中引入)添加一个级别的\escape,您可以补偿对stripslashes()的调用:

$escaped_json = '{"key":"value with \"escaped quotes\""}';
update_post_meta($id, 'double_escaped_json', wp_slash($escaped_json));
$fixed = get_post_meta($id, 'double_escaped_json', true);
/*
$fixed, after stripslashes(), ends up as desired:
{"key":"value with \"escaped quotes\""}
*/

隐藏的自定义字段

如果您是插件或主题开发人员,并且您打算使用自定义字段来存储参数,请务必注意,WordPress不会显示自定义字段,该自定义字段在自定义字段列表中以“_”(下划线)开头 后编辑屏幕或使用the_meta()模板功能时。

这可以通过使用add_meta_box()函数以异常的方式显示这些自定义字段是有用的。

下面的示例将添加一个唯一的自定义字段与meta_key名称“_color”和meta_value“红色”,但此自定义字段不会显示在后编辑屏幕中:

add_post_meta(68, '_color', 'red', true);

隐藏数组

另外,如果meta_value是一个数组,它不会显示在页面编辑屏幕上,即使不使用下划线的meta_key名称前缀。

Tags