delete_post_meta( int $post_id, string $meta_key, mixed $meta_value = '' ): bool
Deletes a post meta field for the given post ID.
Description
You can match based on the key, or key and value. Removing based on key and value, will keep from removing duplicate metadata with the same key. It also allows removing all metadata matching the key, if needed.
Parameters
-
$post_id
int Required -
Post ID.
-
$meta_key
string Required -
Metadata name.
-
$meta_value
mixed Optional -
Metadata value. If provided, rows will only be removed that match the value.
Must be serializable if non-scalar.Default:
''
Return
bool True on success, false on failure.
Source
File: wp-includes/post.php
.
View all references
function delete_post_meta( $post_id, $meta_key, $meta_value = '' ) {
// Make sure meta is deleted from the post, not from a revision.
$the_post = wp_is_post_revision( $post_id );
if ( $the_post ) {
$post_id = $the_post;
}
return delete_metadata( 'post', $post_id, $meta_key, $meta_value );
}
Changelog
Version | Description |
---|---|
1.5.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.
Other Examples
Let’s assume we had a plugin that added some meta values to posts, but now when we are uninstalling the plugin, we want to delete all the post meta keys that the plugin added. Assuming the plugin added the keys
related_posts
andpost_inspiration
.To delete all the keys use
delete_post_meta_by_key( $post_meta_key )
. This would be added to the “uninstall” function:Or, if you wanted to delete all the keys except where
post_inspiration
was “Sherlock Holmes”:Or maybe post number 185 was just deleted, and you want to remove all
related_posts
keys that reference it:Default Usage
Be VERY careful when using this function to delete a specific key-value pair. As stated in
delete_metadata()
‘s documentation, providing an empty string for$meta_value
will cause the check to be skipped entirely, resulting in all keys being deleted!To avoid accidentally deleting ALL key instances, use a short-circuit check:
If you want to delete all entries with a specified
meta_key
, regardless of the field value, you need to setmeta_value
asnull
, otherwise the function will returnfalse
and the field does not get deleted