The delete_attachment WordPress PHP action fires before an attachment is deleted, at the start of wp_delete_attachment()
.
Usage
add_action('delete_attachment', 'your_function_name'); function your_function_name($post_id) { // your custom code here }
Parameters
$post_id
(int) – Attachment ID.
More information
See WordPress Developer Resources: delete_attachment
Examples
Log Attachment Deletion
Log attachment deletion in a custom log file.
add_action('delete_attachment', 'log_attachment_deletion'); function log_attachment_deletion($post_id) { $log_message = "Attachment with ID {$post_id} has been deleted."; error_log($log_message, 3, '/path/to/your/custom_log.log'); }
Notify Admin on Attachment Deletion
Send an email notification to the admin when an attachment is deleted.
add_action('delete_attachment', 'notify_admin_on_attachment_deletion'); function notify_admin_on_attachment_deletion($post_id) { $admin_email = get_option('admin_email'); $subject = "Attachment Deleted"; $message = "An attachment with ID {$post_id} has been deleted."; wp_mail($admin_email, $subject, $message); }
Remove Attachment Metadata
Remove attachment metadata when an attachment is deleted.
add_action('delete_attachment', 'remove_attachment_metadata'); function remove_attachment_metadata($post_id) { delete_post_meta($post_id, '_wp_attachment_metadata'); }
Update Post Count on Attachment Deletion
Update the post count when an attachment is deleted.
add_action('delete_attachment', 'update_post_count_on_attachment_deletion'); function update_post_count_on_attachment_deletion($post_id) { $post = get_post($post_id); $parent_id = $post->post_parent; if ($parent_id) { $attachments_count = get_post_meta($parent_id, 'attachments_count', true); $attachments_count = ($attachments_count > 0) ? $attachments_count - 1 : 0; update_post_meta($parent_id, 'attachments_count', $attachments_count); } }
Delete Associated Image Sizes
Delete all associated image sizes when an attachment is deleted.
add_action('delete_attachment', 'delete_associated_image_sizes'); function delete_associated_image_sizes($post_id) { $metadata = wp_get_attachment_metadata($post_id); if ($metadata && isset($metadata['sizes'])) { $upload_dir = wp_upload_dir(); foreach ($metadata['sizes'] as $size => $file_info) { $file_path = $upload_dir['basedir'] . '/' . dirname($metadata['file']) . '/' . $file_info['file']; if (file_exists($file_path)) { unlink($file_path); } } } }