首页 / 插件开发手册 / 元数据 Metadata / 管理文章元数据

管理文章元数据

添加元数据

使用add_post_meta()可以很容易地添加元数据。该函数接受一个post_id、一个meta_key、一个meta_value和一个unique标志。

meta_key是在你的插件的其他地方如何引用该元值的名称。虽然类似于mycrazymetakeyname是可以工作,但是使用与插件或主题相关的前缀加键名的命名方式会更有用。wporg_featured_menu可能是个不错的选择。应该注意的是,可以多次使用相同的meta_key来存储差异的元数据(请参见下面的唯一标志)。

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

unique标志允许您声明该键是否应该是唯一的。一个唯一键是指一篇文章可以有多种差异的数据,比如价格。
如果您只想要一篇文章只有一个价格,您应该将其标记为uniquemeta_key将只有一个值。

 

更新元数据

如果一个键已经存在并且您想更新它,请使用update_post_meta()。如果您使用这个函数,并且键不存在,那么它将创建它,就像您使用add_post_meta()

add_post_meta()类似,该函数接受post_idmeta_keymeta_valueunique标志。

 

删除元数据

delete_post_meta()接收一个post_id,一个meta_key,以及可选的meta_value。顾名思义其功能就是删除指定的元数据。

 

字符转义

文章meta值在存储时通过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中引入)再添加一层\转义,可以抵消对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()模板函数时显示以“_”(下划线)开头的meta_key自定义字段。

为了通过使用add_meta_box()函数以不寻常的方式显示这些自定义字段,这可能很有用。

下面的示例将添加一个唯一的自定义字段,其meta_key名称‘_color’和meta_value为“red”,但此自定义字段不会显示在文章编辑界面中:

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

 

隐藏数组

此外,如果meta_value是一个数组,它将不会显示在页面编辑界面上,即使您没有在meta_key名称前加下划线。