The delete_{$taxonomy} WordPress PHP action fires after a term in a specific taxonomy is deleted. The dynamic portion of the hook name, $taxonomy, refers to the specific taxonomy the term belonged to. Possible hook names include delete_category and delete_post_tag.
Usage
add_action('delete_{$taxonomy}', 'your_custom_function', 10, 4);
function your_custom_function($term, $tt_id, $deleted_term, $object_ids) {
// your custom code here
}
Parameters
$term(int) – Term ID.$tt_id(int) – Term taxonomy ID.$deleted_term(WP_Term) – Copy of the already-deleted term.$object_ids(array) – List of term object IDs.
More information
See WordPress Developer Resources: delete_{$taxonomy}
Examples
Log term deletion
Log the deleted term ID and taxonomy in a custom log file.
add_action('delete_category', 'log_term_deletion', 10, 4);
function log_term_deletion($term, $tt_id, $deleted_term, $object_ids) {
error_log("Term ID: {$term}, Taxonomy: {$deleted_term->taxonomy} has been deleted.");
}
Update related post meta
Remove the term ID from related post meta on term deletion.
add_action('delete_post_tag', 'update_related_post_meta', 10, 4);
function update_related_post_meta($term, $tt_id, $deleted_term, $object_ids) {
foreach ($object_ids as $post_id) {
$related_terms = get_post_meta($post_id, 'related_terms', true);
if (($key = array_search($term, $related_terms)) !== false) {
unset($related_terms[$key]);
update_post_meta($post_id, 'related_terms', $related_terms);
}
}
}
Notify admin on term deletion
Send an email notification to the admin when a term is deleted.
add_action('delete_category', 'notify_admin_on_term_deletion', 10, 4);
function notify_admin_on_term_deletion($term, $tt_id, $deleted_term, $object_ids) {
$admin_email = get_option('admin_email');
$subject = "Term Deleted: {$deleted_term->name}";
$message = "The term '{$deleted_term->name}' (ID: {$term}) in the '{$deleted_term->taxonomy}' taxonomy has been deleted.";
wp_mail($admin_email, $subject, $message);
}
Delete term thumbnail
Delete the term thumbnail from the media library when a term is deleted.
add_action('delete_post_tag', 'delete_term_thumbnail', 10, 4);
function delete_term_thumbnail($term, $tt_id, $deleted_term, $object_ids) {
$thumbnail_id = get_term_meta($term, 'thumbnail_id', true);
if ($thumbnail_id) {
wp_delete_attachment($thumbnail_id, true);
}
}
Track term deletions
Add a custom post type entry to track term deletions.
add_action('delete_category', 'track_term_deletions', 10, 4);
function track_term_deletions($term, $tt_id, $deleted_term, $object_ids) {
$log_data = array(
'post_title' => "Term Deleted: {$deleted_term->name}",
'post_type' => 'term_deletion_log',
'post_status' => 'publish',
);
$log_id = wp_insert_post($log_data);
update_post_meta($log_id, 'term_id', $term);
update_post_meta($log_id, 'taxonomy', $deleted_term->taxonomy);
}