update_post_meta() WordPress Function

The update_post_meta() function is used to update the value of a post meta field for a given post ID.

update_post_meta( int $post_id, string $meta_key, mixed $meta_value, mixed $prev_value = '' ) #

Updates a post meta field based on the given post ID.


Description

Use the $prev_value parameter to differentiate between meta fields with the same key and post ID.

If the meta field for the post does not exist, it will be added and its ID returned.

Can be used in place of add_post_meta().


Top ↑

Parameters

$post_id

(int)(Required)Post ID.

$meta_key

(string)(Required)Metadata key.

$meta_value

(mixed)(Required)Metadata value. Must be serializable if non-scalar.

$prev_value

(mixed)(Optional) Previous value to check before updating. If specified, only update existing metadata entries with this value. Otherwise, update all entries.

Default value: ''


Top ↑

Return

(int|bool) Meta ID if the key didn't exist, true on successful update, false on failure or if the value passed to the function is the same as the one that is already in the database.


Top ↑

More Information

Top ↑

Character Escaping

Post meta values are passed through the stripslashes() function upon being stored, so you will need to be careful when passing in values (such as JSON) that might include \ escaped characters.

Top ↑

Do not store escaped values

Consider the JSON value {"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, after passing through stripslashes() ends up unparsable:
{"key":"value with "escaped quotes""}
*/
?>

Top ↑

Workaround

By adding one more level of \ escaping using function wp_slash (introduced in WP 3.6), you can compensate for the call to 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, after stripslashes(), ends up being stored as desired:
{"key":"value with \"escaped quotes\""}
*/
?>

Top ↑

Source

File: wp-includes/post.php

function update_post_meta( $post_id, $meta_key, $meta_value, $prev_value = '' ) {
	// Make sure meta is updated for the post, not for a revision.
	$the_post = wp_is_post_revision( $post_id );
	if ( $the_post ) {
		$post_id = $the_post;
	}

	return update_metadata( 'post', $post_id, $meta_key, $meta_value, $prev_value );
}


Top ↑

Changelog

Changelog
VersionDescription
1.5.0Introduced.

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by theĀ Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.

Show More
Show More