跳转到主要内容

管理帖子meta数据

添加元数据

使用add_post_meta()可以非常轻松地添加元数据。该函数接受 a post_id、 a meta_key、 ameta_value和一个unique标志。

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