1

The function wp_delete_post() will permanently delete when used on Custom Post Types. The force flag only works on PAGE and POST cpt.

See this post as an explanation of how the force flag is being used: wp_delete_post() deletes post instead of moving it to trash

Question: A plugin I have is using this function, and I want to try hook in to wp_delete_post and move the item to trash instead of permanently deleting.

Is it possible to use before_delete_post to try move things to the trash before it reaches the stage of permanently deleting?

Alternative: Don't have the item deleted at all. In my case I would be happy to update the post status or some meta key and then I'll run a permanent delete on those products with that meta key at a later date.

My attempt so far - this test is simply to try see if I can prevent the full wp_post_delete from running. This did not work, the post was permanently deleted still.

function delete_handler($postid){
  return false;
}
add_action('before_delete_post', __NAMESPACE__.'\\delete_handler');
1

Inside wp_delete_post() there is the following code,

/**
 * Filters whether a post deletion should take place.
 *
 * @since 4.4.0
 *
 * @param bool|null $delete       Whether to go forward with deletion.
 * @param WP_Post   $post         Post object.
 * @param bool      $force_delete Whether to bypass the trash.
 */
$check = apply_filters( 'pre_delete_post', null, $post, $force_delete );
if ( null !== $check ) {
    return $check;
}

So I think with the following filtering you might be able to prevent the deletion.

function prevent_cpt_delete( $delete, $post, $force_delete ) {
  // Is it my post type someone is trying to delete?
  if ( 'my_post_type' === $post->post_type && ! $force_delete ) {
    // Try to trash the cpt instead
    return wp_trash_post( $post->ID ); // returns (WP_Post|false|null) Post data on success, false or null on failure.
  }
  return $delete;  
}
add_filter('pre_delete_post', 'prevent_cpt_delete', 10, 3);
| improve this answer | |
  • Just tested and seems to work perfectly! Thanks very much. – wharfdale Feb 8 at 12:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.