Stop Non-Administrators Deleting Items of a Post Type
Lets editors and authors edit entries of chosen post types but only administrators can trash or delete them, protecting records like locations or products.
Opens WPIDE on
Code
// Post types protected from deletion.
$wpide_protected_types = array( 'page', 'location' );
add_filter( 'map_meta_cap', function ( $caps, $cap, $user_id, $args ) use ( $wpide_protected_types ) {
if ( 'delete_post' !== $cap || empty( $args[0] ) ) {
return $caps;
}
$post = get_post( $args[0] );
if ( $post && in_array( $post->post_type, $wpide_protected_types, true ) && ! user_can( $user_id, 'manage_options' ) ) {
$caps[] = 'do_not_allow';
}
return $caps;
}, 10, 4 );
Notes
Change manage_options to another capability to allow more users.
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.