add_post_meta( int $post_id, string $meta_key, mixed $meta_value, bool $unique = false )

Adds a meta field to the given post.


Post meta data is called "Custom Fields" on the Administration Screen.



(int) (Required) Post ID.


(string) (Required) Metadata name.


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


(bool) (Optional) Whether the same key should not be added.

Default value: false


(int|false) Meta ID on success, false on failure.

More Information

Note that if the given key already exists among custom fields of the specified post, another custom field with the same key is added unless the $unique argument is set to true, in which case, no changes are made. If you want to update the value of an existing key, use the update_post_meta() function instead

Character Escaping

Because meta values are passed through the stripslashes() function, you need to be careful about content escaped with \ characters. You can read more about the behavior, and a workaround example, in the update_post_meta() documentation.


File: wp-includes/post.php

function add_post_meta( $post_id, $meta_key, $meta_value, $unique = false ) {
	// Make sure meta is added to the post, not a revision.
	$the_post = wp_is_post_revision( $post_id );
	if ( $the_post ) {
		$post_id = $the_post;

	return add_metadata( 'post', $post_id, $meta_key, $meta_value, $unique );


Version Description
1.5.0 Introduced.

© 2003–2019 WordPress Foundation
Licensed under the GNU GPLv2+ License.