# delete_metadata()

URL: https://chugunov.pro/api-wordpress/functions/delete_metadata/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.9.0.

## Сигнатура

```php
delete_metadata( string $meta_type, int $object_id, string $meta_key, mixed $meta_value = '', bool $delete_all = false ): bool
```

## Описание

По историческим причинам и ключ метаданных, и значение метаданных на входе должны быть «экранированы обратными слэшами».

## Параметры

- `$meta_type` `string` — обязательный. Тип объекта, к которому относятся метаданные. Принимает 'blog', 'post', 'comment', 'term', 'user' или любой другой тип объекта со связанной таблицей метаданных.
- `$object_id` `int` — обязательный. ID объекта, к которому относятся метаданные.
- `$meta_key` `string` — обязательный. Ключ метаданных.
- `$meta_value` `mixed` — необязательный, по умолчанию `''`. Значение метаданных. Должно быть сериализуемым, если не является скалярным значением.
  
  Если указано, удаляются только записи метаданных с этим значением.
  
  В противном случае удаляются все записи с указанным meta_key.
  
  Передайте null, false или пустую строку, чтобы пропустить эту проверку.
  
  (Для обратной совместимости невозможно передать пустую строку, чтобы удалить записи с пустой строкой в качестве значения.)
- `$delete_all` `bool` — необязательный, по умолчанию `false`. Если true, удаляются подходящие записи метаданных для всех объектов, игнорируя указанный object_id. В противном случае удаляются только подходящие записи метаданных для указанного object_id.

## Возвращаемое значение

`bool`

## Исходный код

Файл: `wp-includes/meta.php:399`

```php
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
	 * (blog, 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_blog_metadata`
	 *  - `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
	 * (blog, post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible hook names include:
	 *
	 *  - `delete_blog_meta`
	 *  - `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.
	 */
	do_action( "delete_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );

	// Old-style action.
	if ( 'post' === $meta_type ) {
		/**
		 * Fires immediately before deleting metadata for a post.
		 *
		 * @since 2.9.0
		 *
		 * @param string[] $meta_ids An array of metadata entry IDs to delete.
		 */
		do_action( 'delete_postmeta', $meta_ids );
	}

	$query = "DELETE FROM $table WHERE $id_column IN( " . implode( ',', $meta_ids ) . ' )';

	$count = $wpdb->query( $query );

	if ( ! $count ) {
		return false;
	}

	if ( $delete_all ) {
		$data = (array) $object_ids;
	} else {
		$data = array( $object_id );
	}
	wp_cache_delete_multiple( $data, $meta_type . '_meta' );

	/**
	 * Fires immediately after deleting metadata of a specific type.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (blog, post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible hook names include:
	 *
	 *  - `deleted_blog_meta`
	 *  - `deleted_post_meta`
	 *  - `deleted_comment_meta`
	 *  - `deleted_term_meta`
	 *  - `deleted_user_meta`
	 *
	 * @since 2.9.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.
	 */
	do_action( "deleted_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );

	// Old-style action.
	if ( 'post' === $meta_type ) {
		/**
		 * Fires immediately after deleting metadata for a post.
		 *
		 * @since 2.9.0
		 *
		 * @param string[] $meta_ids An array of metadata entry IDs to delete.
		 */
		do_action( 'deleted_postmeta', $meta_ids );
	}

	return true;
}
```

## История изменений

- 2.9.0 — Introduced.

## Связанные

Использует: [`wp_cache_delete_multiple`](https://chugunov.pro/api-wordpress/functions/wp_cache_delete_multiple/), [`maybe_serialize`](https://chugunov.pro/api-wordpress/functions/maybe_serialize/), `wpdb::get_col`, `wpdb::query`, [`_get_meta_table`](https://chugunov.pro/api-wordpress/functions/_get_meta_table/), [`wp_unslash`](https://chugunov.pro/api-wordpress/functions/wp_unslash/), [`sanitize_key`](https://chugunov.pro/api-wordpress/functions/sanitize_key/), [`absint`](https://chugunov.pro/api-wordpress/functions/absint/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/), `wpdb::prepare`.
Используется в: [`wp_autosave_post_revisioned_meta_fields`](https://chugunov.pro/api-wordpress/functions/wp_autosave_post_revisioned_meta_fields/), [`delete_site_meta`](https://chugunov.pro/api-wordpress/functions/delete_site_meta/), [`delete_site_meta_by_key`](https://chugunov.pro/api-wordpress/functions/delete_site_meta_by_key/), [`wp_initialize_site`](https://chugunov.pro/api-wordpress/functions/wp_initialize_site/), `WP_REST_Meta_Fields::delete_meta_value`, `WP_REST_Meta_Fields::update_multi_meta_value`, [`delete_term_meta`](https://chugunov.pro/api-wordpress/functions/delete_term_meta/), `WP_User_Meta_Session_Tokens::drop_sessions`, [`delete_user_meta`](https://chugunov.pro/api-wordpress/functions/delete_user_meta/), [`wp_delete_attachment`](https://chugunov.pro/api-wordpress/functions/wp_delete_attachment/), [`delete_post_meta`](https://chugunov.pro/api-wordpress/functions/delete_post_meta/), [`delete_post_meta_by_key`](https://chugunov.pro/api-wordpress/functions/delete_post_meta_by_key/), [`install_blog`](https://chugunov.pro/api-wordpress/functions/install_blog/), [`delete_comment_meta`](https://chugunov.pro/api-wordpress/functions/delete_comment_meta/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/delete_metadata/
