delete_post_meta( int $post_id, string $meta_key, mixed $meta_value = '' )

Deletes a post meta field for the given post ID.


Description 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 Parameters

$post_id

(int) (Required) Post ID.

$meta_key

(string) (Required) Metadata name.

$meta_value

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

Default value: ''


Top ↑

Return Return

(bool) True on success, false on failure.


Top ↑

Source Source

File: wp-includes/post.php

function delete_post_meta( $post_id, $meta_key, $meta_value = '' ) {
	// 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 delete_metadata( 'post', $post_id, $meta_key, $meta_value );
}

Top ↑

Changelog Changelog

Changelog
Version Description
1.5.0 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 2 content
    Contributed by Codex

    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 and post_inspiration.

    To delete all the keys use delete_post_meta_by_key( $post_meta_key ). This would be added to the “uninstall” function:

    <?php delete_post_meta_by_key( 'related_posts' ); ?>
    

    Or, if you wanted to delete all the keys except where post_inspiration was “Sherlock Holmes”:

    <?php
    $allposts = get_posts( 'numberposts=-1&post_type=post&post_status=any' );
    
    foreach( $allposts as $postinfo ) {
    	delete_post_meta( $postinfo->ID, 'related_posts' );
    	$inspiration = get_post_meta( $postinfo->ID, 'post_inspiration' );
    	foreach( $inspiration as $value ) {
    		if( 'Sherlock Holmes' !== $value )
    			delete_post_meta( $postinfo->ID, 'post_inspiration', $value );
    	}
    }
    ?>
    

    Or maybe post number 185 was just deleted, and you want to remove all related_posts keys that reference it:

    <?php
      $allposts = get_posts( 'numberposts=-1&post_type=post&post_status=any' );
    
      foreach( $allposts as $postinfo ) {
        delete_post_meta( $postinfo->ID, 'related_posts', '185' );
      }
    ?>
    
    

You must log in before being able to contribute a note or feedback.