删除附加了所有文件的帖子

时间:2011-06-26 作者:Kovas

在我的网站上,我有多个作者,他们可以添加/编辑/删除自定义帖子,并将图像上传(附加)到这些帖子。问题是,当他们删除帖子时,附件会留在服务器上。所以,我想在帖子被删除后,把所有附在帖子上的文件都处理掉。任何人都可以分享和举例说明它是如何做到的吗?

4 个回复
最合适的回答,由SO网友:Rarst 整理而成

WP默认情况下不会这样做,因为不能保证附件不会被其他帖子使用。

基本逻辑是delete_post, 查询子附件并运行wp_delete_attachment() 在每个上。

我在插件库中进行了快速搜索,找到了一个可以做到这一点的小插件(似乎没有维护,所以在使用前进行测试)-Post Data Delete Advanced.

SO网友:That Brazilian Guy

我编写了以下函数,它使用了@rarst在其答案中建议的逻辑。

add_action( \'before_delete_post\', function( $id ) {
  $attachments = get_attached_media( \'\', $id );
  foreach ($attachments as $attachment) {
    wp_delete_attachment( $attachment->ID, \'true\' );
  }
} );
<小时>IMPORTANT: 牢记it will only be called when the posts are permanently deleted from the trash! 如果要更改此行为,请在wp-config.php 文件:

define(\'EMPTY_TRASH_DAYS\', 0);
如果此常量设置为0,则垃圾箱功能将被禁用,并且将显示“永久删除”按钮,而不是“垃圾箱”按钮。如果单击“永久删除”按钮,将立即删除该项目,而不显示任何警告消息。

(来自Codex)

SO网友:adambware

在此扩展其他答案,仅用于特定的帖子类型。

add_action( \'before_delete_post\', \'delete_all_attached_media\' );

function delete_all_attached_media( $post_id ) {

  if( get_post_type($post_id) == "post" ) {
    $attachments = get_attached_media( \'\', $post_id );

    foreach ($attachments as $attachment) {
      wp_delete_attachment( $attachment->ID, \'true\' );
    }
  }

}
这将在永久删除帖子时删除所有连接的媒体。

SO网友:Edris

任何仍在寻找简单解决方案的人,请尝试以下插件,该插件可用于普通帖子/页面和自定义帖子类型-Delete Post with Attachments

结束

相关推荐

使用自定义帖子类型限制QUERY_POSTS函数中的帖子数量

我使用下面的代码来显示定义为自定义帖子类型并按自定义分类法“england”过滤的帖子。我曾尝试在query\\u posts函数中使用“posts\\u per\\u page=5”,但这会产生一组与我的“news”类型的一个帖子类别完全不同的帖子。当我从查询中删除每页的帖子时,它会返回我想要的列表,但默认为Wordpress设置中设置的默认值10。如何在下面的代码中重写它? <?php query_posts( array( \'country\' => \'event-en