The post_types_to_delete_with_user WordPress PHP filter is used to modify the list of post types that will be deleted when a user is deleted.
On this pageJump to a section
Usage
add_filter('post_types_to_delete_with_user', 'my_custom_function', 10, 2);
function my_custom_function($post_types_to_delete, $id) {
// your custom code here
return $post_types_to_delete;
}
Parameters
$post_types_to_delete(string[]): An array of post types to delete.$id(int): The user ID.
More information
See WordPress Developer Resources: post_types_to_delete_with_user
Examples
Prevent deletion of ‘portfolio’ post type
When a user is deleted, do not delete their ‘portfolio’ post types.
add_filter('post_types_to_delete_with_user', 'prevent_portfolio_deletion', 10, 2);
function prevent_portfolio_deletion($post_types_to_delete, $id) {
if (($key = array_search('portfolio', $post_types_to_delete)) !== false) {
unset($post_types_to_delete[$key]);
}
return $post_types_to_delete;
}
Delete custom ‘event’ post type
When a user is deleted, delete their ‘event’ post types.
add_filter('post_types_to_delete_with_user', 'delete_event_post_type', 10, 2);
function delete_event_post_type($post_types_to_delete, $id) {
$post_types_to_delete[] = 'event';
return $post_types_to_delete;
}
Exclude ‘page’ post type
Prevent the deletion of ‘page’ post types when a user is deleted.
add_filter('post_types_to_delete_with_user', 'exclude_page_post_type', 10, 2);
function exclude_page_post_type($post_types_to_delete, $id) {
if (($key = array_search('page', $post_types_to_delete)) !== false) {
unset($post_types_to_delete[$key]);
}
return $post_types_to_delete;
}
Allow deletion of multiple custom post types
Delete custom post types ‘event’ and ‘testimonial’ when a user is deleted.
add_filter('post_types_to_delete_with_user', 'delete_multiple_custom_post_types', 10, 2);
function delete_multiple_custom_post_types($post_types_to_delete, $id) {
array_push($post_types_to_delete, 'event', 'testimonial');
return $post_types_to_delete;
}
Reset to default post types
Reset the post types to be deleted to the default ‘post’ and ‘attachment’.
add_filter('post_types_to_delete_with_user', 'reset_to_default_post_types', 10, 2);
function reset_to_default_post_types($post_types_to_delete, $id) {
return array('post', 'attachment');
}
Prevent deletion of custom post type when user is deleted
Prevent the ‘my_custom_post_type’ from being deleted when a user is deleted.
add_filter('post_types_to_delete_with_user', 'prevent_my_custom_post_type_deletion', 10, 2);
function prevent_my_custom_post_type_deletion($post_types_to_delete, $id) {
$key = array_search('my_custom_post_type', $post_types_to_delete);
if ($key !== false) {
unset($post_types_to_delete[$key]);
}
return $post_types_to_delete;
}
Add a custom post type to be deleted with user
Add ‘another_custom_post_type’ to the list of post types to delete when a user is deleted.
add_filter('post_types_to_delete_with_user', 'add_another_custom_post_type_to_delete', 10, 2);
function add_another_custom_post_type_to_delete($post_types_to_delete, $id) {
$post_types_to_delete[] = 'another_custom_post_type';
return $post_types_to_delete;
}
Delete all post types associated with a specific user role
Delete all post types associated with users that have the ‘editor’ role when they are deleted.
add_filter('post_types_to_delete_with_user', 'delete_post_types_for_editors', 10, 2);
function delete_post_types_for_editors($post_types_to_delete, $id) {
$user = get_userdata($id);
if (in_array('editor', $user->roles)) {
$post_types_to_delete = array_merge($post_types_to_delete, array('custom_post_type1', 'custom_post_type2'));
}
return $post_types_to_delete;
}
Delete only posts and pages when a user is deleted
Only delete ‘post’ and ‘page’ post types when a user is deleted.
add_filter('post_types_to_delete_with_user', 'delete_only_posts_and_pages', 10, 2);
function delete_only_posts_and_pages($post_types_to_delete, $id) {
$post_types_to_delete = array('post', 'page');
return $post_types_to_delete;
}
Prevent deletion of any post type when a user is deleted
Prevent all post types from being deleted when a user is deleted.
add_filter('post_types_to_delete_with_user', 'prevent_any_post_type_deletion', 10, 2);
function prevent_any_post_type_deletion($post_types_to_delete, $id) {
return array();
}