管理帖子元数据

添加元数据

使用add_post_meta()可以很容易地添加元数据。该函数接受 a post_id、 a meta_key、 ameta_valueunique标志。

meta_key就是您的插件将如何在您的代码中的其他地方引用元值。类似的东西mycrazymetakeyname会起作用,但是与您的插件或主题相关的前缀后跟密钥描述会更有用。wporg_featured_menu可能是一个好人。应该注意的是,meta_key可以多次使用相同的元数据来存储元数据的变体(请参阅下面的唯一标志)。

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

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

更新元数据

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

与add_post_meta()类似,该函数接受 a post_id、 ameta_keymeta_value。它还接受一个可选的prev_value——如果指定,它将导致函数只用这个值更新现有的元数据条目。如果未提供,该函数默认更新所有条目。

删除元数据

delete_post_meta() 采用 a post_id、 ameta_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 中引入)添加更多级别的转义,您可以补偿对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\""}
*/

隐藏的自定义字段

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

这对于使用add_meta_box() 函数以不寻常的方式显示这些自定义字段很有用。

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

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

隐藏数组

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