WP_DELETE_POST()删除帖子,而不是将其移至垃圾桶

时间:2018-07-19 作者:Ilona

我已经设置了一个自定义帖子类型,用户可以从前端进行编辑。我正在使用wp_delete_post() 允许用户删除他们创建的帖子。这是可行的,但帖子会被删除,而不是被移到垃圾箱。我已经尝试通过后端将帖子移动到垃圾桶,它的工作方式与您预期的一样,帖子被移动到垃圾桶。所以我不知道为什么wp_delete_post 工作方式不同,但会永久删除帖子。

根据WordPress Codex,第二个参数wp_delete_post() 函数是一个布尔值,如果设置为false,则应将帖子移动到垃圾桶,而不是永久删除它。第二个参数默认设置为false,因此这是我的代码:

wp_delete_post( $race->ID );

我知道我可以使用wp_trash_post() 函数(这实际上是我现在使用的,因为wp_delete_post, 但我想知道为什么wp_delete_post() 功能无法正常工作。

2 个回复
最合适的回答,由SO网友:Hồ Trọng Linh Ân 整理而成

遵循代码行

https://core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/post.php#L2467

if ( ! $force_delete && ( \'post\' === $post->post_type || \'page\' === $post->post_type ) && \'trash\' !== get_post_status( $postid ) && EMPTY_TRASH_DAYS ) {
    return wp_trash_post( $postid );
}
$force\\u delete只适用于“post”和“page”,不适用于自定义post类型

SO网友:Antti Koskinen

这个wp_delete_post()pre_delete_post 在删除之前进行筛选,您可以使用它来防止自定义帖子类型被删除。

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);

结束

相关推荐

批量选择框中缺少‘Move to Trash’选项

我似乎缺少将多个项目移动到垃圾箱的批量选择选项。当所有插件都被停用时,就会发生这种情况。以前有人见过这个吗?http://i.stack.imgur.com/4vRkB.png