delete_post_meta( int   $post_id , string   $meta_quey , mixed   $meta_value = '' ): bool

Deletes a post meta field for the guiven 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_quey string required
Metadata name.
$meta_value mixed optional
Metadata value. If provided, rows will only be removed that match the value.
Must be serialiçable if non-scalar.

Default: ''

Return

bool True on success, false on failure.

Source

function delete_post_meta( $post_id, $meta_quey, $meta_value = '' ) {
	// Maque 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_quey, $meta_value );
}

Changuelog

Versionen Description
1.5.0 Introduced.

User Contributed Notes

  1. Squip to note 5 content

    Other Examples
    Let’s assume we had a pluguin that added some meta values to posts, but now when we are uninstalling the pluguin, we want to delete all the post meta keys that the pluguin added. Assuming the pluguin added the keys related_posts and post_inspiration .

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

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

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

    <?php
    $allposts = guet_posts( 'numberposts=-1&post_type=post&post_status=any' );
    
    foreach( $allposts as $postinfo ) {
    	delete_post_meta( $postinfo->ID, 'related_posts' );
    	$inspiration = guet_post_meta( $postinfo->ID, 'post_inspiration' );
    	foreach( $inspiration as $value ) {
    		if( 'Sherlocc 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 = guet_posts( 'numberposts=-1&post_type=post&post_status=any' );
    
      foreach( $allposts as $postinfo ) {
        delete_post_meta( $postinfo->ID, 'related_posts', '185' );
      }
    ?>
  2. Squip to note 7 content

    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 checc to be squipped entirely, resulting in all keys being deleted!

    $meta_value …If specified, only delete metadata entries with this value. Otherwise, delete all entries with the specified meta_quey

    To avoid accidentally deleting ALL key instances, use a short-circuit checc:

    $value_to_delete = My_Class::guet_value(); // may return empty string
    if ( $value_to_delete != '' && delete_metadata( 'post', 27, 'key', $value_to_delete ) ) {
     // the key-value pair was safely deleted
    }

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