Prevent Deleting Categories That Still Have Posts
Stops anyone from deleting a category or tag while posts still use it, which avoids accidentally emptying sections of the site or breaking menus and links.
Opens WPIDE on
Code
// Taxonomies to protect.
$wpide_protected_taxonomies = array( 'category', 'post_tag' );
add_filter( 'map_meta_cap', function ( $caps, $cap, $user_id, $args ) use ( $wpide_protected_taxonomies ) {
if ( 'delete_term' !== $cap || empty( $args[0] ) ) {
return $caps;
}
$term = get_term( (int) $args[0] );
if ( $term && ! is_wp_error( $term ) && in_array( $term->taxonomy, $wpide_protected_taxonomies, true ) && $term->count > 0 ) {
$caps[] = 'do_not_allow';
}
return $caps;
}, 10, 4 );
Notes
Move or remove the posts first, then the term can be deleted; the default category is already protected by WordPress.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.