描述
使用$prev_value
参数区分具有相同键和post ID的meta字段。
如果文章的meta字段不存在,则将添加它并返回其ID。
可以用来代替add_post_meta()。
参数
- $post_id
-
(int)(必填) 文章ID
- $meta_key
-
(string)(必填) 元数据(metadata)的 key
- $meta_value
-
(mixed)(必填) 元数据值。如果不是标量,则必须是可序列化的。
- $prev_value
-
(mixed)(可选) 更新前要检查的上一个值。如果指定,则仅使用此值更新现有元数据项。否则,更新所有条目。
默认值: ''
返回
(int|bool) 如果键不存在则为meta ID,更新成功时为true,失败时或者传递给函数的值与数据库中已有的值相同时为false。
更多信息
字符转义
文章meta值在存储时通过stripslashes()函数传递,因此在传递可能包含 \ 转义字符的值(如JSON)时需要注意。
不要存储转义值
考虑JSON值{"key":"value with \"escaped quotes\""}
<?php $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()的调用
<?php $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\""} */ ?>
源码
更新日志
版本 | 描述 |
---|---|
1.5.0 | 开始引入 |
使用示例
请注意,当
$meta_value
等于您试图在数据库中更新的值时,此函数也将返回false
。更新页面使用的模板,
update_post_meta( $page_id, '_wp_page_template', 'new_template.php' );
注意:如果一个键有多个值,如果未设置$prev_value,则所有值都将更新。
其他示例
假设一篇文章的ID为76,并包含以下4个自定义字段:[key_1] => 'Happy'
[key_1] => 'Sad'
[key_2] => 'Gregory'
[my_key] => 'Steve'
要将key_2的值更改为Hans:
<?php update_post_meta( 76, 'key_2', 'Hans' ); ?>
要将key_1的值从Sad更改为Happy:
<?php update_post_meta( 76, 'key_1', 'Happy', 'Sad' ); ?>
这些字段现在看起来如下所示:
[key_1] => 'Happy'
[key_1] => 'Happy'
[key_2] => 'Hans'
[my_key] => 'Steve'
注意:此函数将仅更新与条件匹配的第一个字段。
要将第一个key_1是值从Happy更改为Excited:
<?php update_post_meta( 76, 'key_1', 'Excited', 'Happy' ); //Or update_post_meta( 76, 'key_1', 'Excited' ); //To change all fields with the key "key_1": $key1_values = get_post_custom_values( 'key_1', 76 ); foreach ( $key1_values as $value ) update_post_meta( 76, 'key_1', 'Excited', $value ); ?>
编辑页面模板
有关更详细的示例,请转至post_meta函数示例页面。
“重要信息:如果使用序列化数据,则使用额外的嵌套数组更新数组。
为了保持相同的结构,请在第一个嵌套位置更新对象。”。$ticket_meta = get_post_meta($azgTorneoID,"mep_event_ticket_type",) $ticket_meta[0][0]["option_rsv_t"] = "9"; update_post_meta($azgTorneoID,"mep_event_ticket_type",$ticket_meta[0]);
请注意,如果您的数据库排序规则不区分大小写(如后缀_ci)),则
update_post_meta()
和delete_post_meta()以及get_posts()将更/删/查具有大写或小写键的meta记录。但是get_post_meta()由于WordPress缓存,将区分大小写。请参阅https://core.trac.wordpress.org/ticket/18210了解更多信息。默认用法
<?php update_post_meta( $post_id = 76, $key = 'my_key', $value = 'Steve' ); ?>