## 添加元数据 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名称前缀。