Using WordPress ‘deleted_post’ PHP action

The deleted_post WordPress action fires immediately after a post is deleted from the database.

Usage

add_action('deleted_post', 'your_function_name', 10, 2);

function your_function_name($postid, $post) {
  // your custom code here
}

Parameters

  • $postid (int) – The ID of the post being deleted.
  • $post (WP_Post) – The Post object representing the deleted post.

More information

See WordPress Developer Resources: deleted_post

Examples

Log deleted posts

Log information about deleted posts to a custom log file.

add_action('deleted_post', 'log_deleted_posts', 10, 2);

function log_deleted_posts($postid, $post) {
  // Get the post type and date
  $post_type = $post->post_type;
  $post_date = $post->post_date;

  // Format the log entry
  $log_entry = "Deleted post: {$postid}, Type: {$post_type}, Date: {$post_date}" . PHP_EOL;

  // Append the log entry to the log file
  file_put_contents('deleted_posts.log', $log_entry, FILE_APPEND);
}

Update post count

Update a custom meta value that keeps track of the total number of published posts for a user.

add_action('deleted_post', 'update_user_post_count', 10, 2);

function update_user_post_count($postid, $post) {
  // Check if the post was published
  if ($post->post_status === 'publish') {
    $author_id = $post->post_author;
    $post_count = get_user_meta($author_id, 'published_post_count', true);
    update_user_meta($author_id, 'published_post_count', --$post_count);
  }
}

Notify admin of deleted posts

Send an email to the admin when a post is deleted.

add_action('deleted_post', 'notify_admin_of_deleted_post', 10, 2);

function notify_admin_of_deleted_post($postid, $post) {
  $post_title = $post->post_title;
  $admin_email = get_option('admin_email');
  wp_mail($admin_email, 'Post Deleted', "The post '{$post_title}' (ID: {$postid}) has been deleted.");
}

Remove post from custom cache

Remove the post from a custom caching system when it’s deleted.

add_action('deleted_post', 'remove_post_from_cache', 10, 2);

function remove_post_from_cache($postid, $post) {
  // Assume $cache is your custom caching object
  $cache_key = "post_{$postid}";
  $cache->delete($cache_key);
}

Delete post-related custom data

Delete custom data related to the post from another table in the database.

add_action('deleted_post', 'delete_post_related_data', 10, 2);

function delete_post_related_data($postid, $post) {
  global $wpdb;
  $table_name = $wpdb->prefix . 'custom_data';
  $wpdb->delete($table_name, array('post_id' => $postid));
}