# wp_delete_attachment()

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

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

## Сигнатура

```php
wp_delete_attachment( int $post_id, bool $force_delete = false ): WP_Post|false|null
```

## Описание

При окончательном удалении вложения также удаляется его файл.
Удаление убирает все метаполя записи, таксономии, комментарии и т.п., связанные с вложением (кроме самой записи).
Вложение перемещается в Корзину, а не удаляется окончательно, если только Корзина для медиафайлов не отключена, элемент уже не находится в Корзине или $force_delete не равно true.

## Параметры

- `$post_id` `int` — обязательный. Идентификатор вложения.
- `$force_delete` `bool` — необязательный, по умолчанию `false`. Обходить ли корзину и принудительно удалять.

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

`WP_Post|false|null`

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

Файл: `wp-includes/post.php:6687`

```php
function wp_delete_attachment( $post_id, $force_delete = false ) {
	global $wpdb;

	$post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d", $post_id ) );

	if ( ! $post ) {
		return $post;
	}

	$post = get_post( $post );

	if ( 'attachment' !== $post->post_type ) {
		return false;
	}

	if ( ! $force_delete && EMPTY_TRASH_DAYS && MEDIA_TRASH && 'trash' !== $post->post_status ) {
		return wp_trash_post( $post_id );
	}

	/**
	 * Filters whether an attachment deletion should take place.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_Post|false|null $delete       Whether to go forward with deletion.
	 * @param WP_Post            $post         Post object.
	 * @param bool               $force_delete Whether to bypass the Trash.
	 */
	$check = apply_filters( 'pre_delete_attachment', null, $post, $force_delete );
	if ( null !== $check ) {
		return $check;
	}

	delete_post_meta( $post_id, '_wp_trash_meta_status' );
	delete_post_meta( $post_id, '_wp_trash_meta_time' );

	$meta         = wp_get_attachment_metadata( $post_id );
	$backup_sizes = get_post_meta( $post->ID, '_wp_attachment_backup_sizes', true );
	$file         = get_attached_file( $post_id );

	if ( is_multisite() && is_string( $file ) && ! empty( $file ) ) {
		clean_dirsize_cache( $file );
	}

	/**
	 * Fires before an attachment is deleted, at the start of wp_delete_attachment().
	 *
	 * @since 2.0.0
	 * @since 5.5.0 Added the `$post` parameter.
	 *
	 * @param int     $post_id Attachment ID.
	 * @param WP_Post $post    Post object.
	 */
	do_action( 'delete_attachment', $post_id, $post );

	wp_delete_object_term_relationships( $post_id, array( 'category', 'post_tag' ) );
	wp_delete_object_term_relationships( $post_id, get_object_taxonomies( $post->post_type ) );

	// Delete all for any posts.
	delete_metadata( 'post', null, '_thumbnail_id', $post_id, true );

	wp_defer_comment_counting( true );

	$comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d ORDER BY comment_ID DESC", $post_id ) );
	foreach ( $comment_ids as $comment_id ) {
		wp_delete_comment( $comment_id, true );
	}

	wp_defer_comment_counting( false );

	$post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $post_id ) );
	foreach ( $post_meta_ids as $mid ) {
		delete_metadata_by_mid( 'post', $mid );
	}

	/** This action is documented in wp-includes/post.php */
	do_action( 'delete_post', $post_id, $post );
	$result = $wpdb->delete( $wpdb->posts, array( 'ID' => $post_id ) );
	if ( ! $result ) {
		return false;
	}
	/** This action is documented in wp-includes/post.php */
	do_action( 'deleted_post', $post_id, $post );

	wp_delete_attachment_files( $post_id, $meta, $backup_sizes, $file );

	clean_post_cache( $post );

	return $post;
}
```

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

- 2.0.0 — Introduced.

## Связанные

Используется в: [`clean_dirsize_cache`](https://chugunov.pro/api-wordpress/functions/clean_dirsize_cache/), [`recurse_dirsize`](https://chugunov.pro/api-wordpress/functions/recurse_dirsize/), [`wp_delete_attachment_files`](https://chugunov.pro/api-wordpress/functions/wp_delete_attachment_files/), [`wp_delete_object_term_relationships`](https://chugunov.pro/api-wordpress/functions/wp_delete_object_term_relationships/), [`get_object_taxonomies`](https://chugunov.pro/api-wordpress/functions/get_object_taxonomies/), [`clean_post_cache`](https://chugunov.pro/api-wordpress/functions/clean_post_cache/), [`wp_get_attachment_metadata`](https://chugunov.pro/api-wordpress/functions/wp_get_attachment_metadata/), [`wp_trash_post`](https://chugunov.pro/api-wordpress/functions/wp_trash_post/), [`delete_post_meta`](https://chugunov.pro/api-wordpress/functions/delete_post_meta/), [`get_attached_file`](https://chugunov.pro/api-wordpress/functions/get_attached_file/), `wpdb::get_row`, `wpdb::get_col`, `wpdb::delete`, [`wp_defer_comment_counting`](https://chugunov.pro/api-wordpress/functions/wp_defer_comment_counting/), [`wp_delete_comment`](https://chugunov.pro/api-wordpress/functions/wp_delete_comment/), [`delete_metadata`](https://chugunov.pro/api-wordpress/functions/delete_metadata/), [`delete_metadata_by_mid`](https://chugunov.pro/api-wordpress/functions/delete_metadata_by_mid/), [`is_multisite`](https://chugunov.pro/api-wordpress/functions/is_multisite/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/), [`get_post_meta`](https://chugunov.pro/api-wordpress/functions/get_post_meta/), [`get_post`](https://chugunov.pro/api-wordpress/functions/get_post/), `wpdb::prepare`, [`wp_ajax_media_create_image_subsizes`](https://chugunov.pro/api-wordpress/functions/wp_ajax_media_create_image_subsizes/), `File_Upload_Upgrader::cleanup`, [`wp_import_cleanup`](https://chugunov.pro/api-wordpress/functions/wp_import_cleanup/), [`wp_delete_post`](https://chugunov.pro/api-wordpress/functions/wp_delete_post/).

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