delete_metadata() – Deletes metadata for the specified object.

You appear to be a bot. Output may be restricted

Description

Deletes metadata for the specified object.

Usage

$bool = delete_metadata( $meta_type, $object_id, $meta_key, $meta_value, $delete_all );

Parameters

$meta_type
( string ) required – Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user', or any other object type with an associated meta table.
$object_id
( int ) required – ID of the object metadata is for.
$meta_key
( string ) required – Metadata key.
$meta_value
( mixed ) optional – Optional. Metadata value. Must be serializable if non-scalar. If specified, only delete metadata entries with this value. Otherwise, delete all entries with the specified meta_key. Pass `null`, `false`, or an empty string to skip this check. (For backward compatibility, it is not possible to pass an empty string to delete those entries with an empty string for a value.)
$delete_all
( bool ) optional – Optional. If true, delete matching metadata entries for all objects, ignoring the specified object_id. Otherwise, only delete matching metadata entries for the specified object_id. Default false.

Returns

bool True on successful delete, false on failure.

Source

File name: wordpress/wp-includes/meta.php


Lines:

1 to 100 of 170
function delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $delete_all = false ) {
  global $wpdb;

  if ( ! $meta_type || ! $meta_key || ! is_numeric( $object_id ) && ! $delete_all ) {
    return false;
  }

  $object_id = absint( $object_id );
  if ( ! $object_id && ! $delete_all ) {
    return false;
  }

  $table = _get_meta_table( $meta_type );
  if ( ! $table ) {
    return false;
  }

  $type_column = sanitize_key( $meta_type . '_id' );
  $id_column   = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';

  // expected_slashed ($meta_key)
  $meta_key   = wp_unslash( $meta_key );
  $meta_value = wp_unslash( $meta_value );

  
/**
 * Short-circuits deleting metadata of a specific type.
 *
 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
 * (post, comment, term, user, or any other type with an associated meta table).
 * Returning a non-null value will effectively short-circuit the function.
 *
 * Possible hook names include:
 *
 *  - `delete_post_metadata`
 *  - `delete_comment_metadata`
 *  - `delete_term_metadata`
 *  - `delete_user_metadata`
 *
 * @since 3.1.0
 *
 * @param null|bool $delete     Whether to allow metadata deletion of the given type.
 * @param int       $object_id  ID of the object metadata is for.
 * @param string    $meta_key   Metadata key.
 * @param mixed     $meta_value Metadata value. Must be serializable if non-scalar.
 * @param bool      $delete_all Whether to delete the matching metadata entries
 *                              for all objects, ignoring the specified $object_id.
 *                              Default false.
 */
  $check = apply_filters( "delete_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $delete_all );
  if ( null !== $check ) {
    return (bool) $check;
  }

  $_meta_value = $meta_value;
  $meta_value  = maybe_serialize( $meta_value );

  $query = $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s", $meta_key );

  if ( ! $delete_all ) {
    $query .= $wpdb->prepare( " AND $type_column = %d", $object_id );
  }

  if ( '' !== $meta_value && null !== $meta_value && false !== $meta_value ) {
    $query .= $wpdb->prepare( ' AND meta_value = %s', $meta_value );
  }

  $meta_ids = $wpdb->get_col( $query );
  if ( ! count( $meta_ids ) ) {
    return false;
  }

  if ( $delete_all ) {
    if ( '' !== $meta_value && null !== $meta_value && false !== $meta_value ) {
      $object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_value ) );
    } else {
      $object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s", $meta_key ) );
    }
  }

  
/**
 * Fires immediately before deleting metadata of a specific type.
 *
 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
 * (post, comment, term, user, or any other type with an associated meta table).
 *
 * Possible hook names include:
 *
 *  - `delete_post_meta`
 *  - `delete_comment_meta`
 *  - `delete_term_meta`
 *  - `delete_user_meta`
 *
 * @since 3.1.0
 *
 * @param string[] $meta_ids    An array of metadata entry IDs to delete.
 * @param int      $object_id   ID of the object metadata is for.
 * @param string   $meta_key    Metadata key.
 * @param mixed    $_meta_value Metadata value.
 */

 View on GitHub View on Trac