添加元数据

使用 add_post_meta() 可以轻松添加元数据。该函数接受一个 post_id、一个 meta_key、一个 meta_value,以及一个 unique 标志。

meta_key 是您的插件在代码的其他位置引用元数据值的方式。类似 mycrazymetakeyname 这样的名称可以使用,但使用与您的插件或主题相关的后缀加上对键的描述会更实用。wporg_featured_menu 可能是一个不错的选择。需要注意的是,相同的 meta_key 可以多次用于存储元数据的变体(见下面的 unique 标志)。

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

unique 标志允许您声明该键是否应为唯一。一个非 唯一的键是帖子可以拥有多个变体的东西,例如价格。
如果您只想为帖子设置一个 价格,您应该将其标记为 unique,并且 meta_key 将只有一个值。

更新元数据

如果键已存在且您想更新它,请使用 update_post_meta() 。如果您使用此函数且键不存在,则它将创建该键,就像使用了 add_post_meta() 一样。

类似于 add_post_meta() ,该函数接受一个 post_id、一个 meta_key,以及 meta_value。它还接受一个可选的 prev_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,在 stripslashes() 之后,最终变得无法解析:
{"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,在 stripslashes() 之后,最终达到预期效果:
{"key":"value with \"escaped quotes\""}
*/

隐藏自定义字段

如果您是插件或主题开发者,并计划使用自定义字段来存储参数,重要的是要注意 WordPress 不会在帖子编辑屏幕上的自定义字段列表中显示以“_”(下划线)开头的 meta_key 的自定义字段,也不会在使用 the_meta() 模板函数时显示。

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

下面的示例将添加一个唯一的自定义字段,其 meta_key 名称为 '_color',meta_value 为 'red',但该自定义字段不会在帖子编辑屏幕上显示:

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

隐藏数组

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