# 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.

- Type: PHP
- Runs: Run everywhere
- Category: [Custom Post Types & Fields](https://wpide.com/library/category/post-types/)
- Tags: roles, capabilities, protection
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/protect-post-type-from-deletion/

## Code

```php
// 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 use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Stop Non-Administrators Deleting Items of a Post Type" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
