wordpress知识库
网站首页 > 知识库 > wordpress知识 >

WordPress删除文章同时删除缩略图及图片附件的方法

2012/09/18

最近,一些小伙伴们询问我在WordPress中删除文章时,文章中上传到媒体库的附件(如图片)不会自动删除,导致网站空间被占用(尤其是对于使用虚拟主机的用户而言,空间有限)。

为了解决这个问题,下面我将介绍几行简单的代码,帮助实现在删除文章时同时自动删除缩略图和附件,省去了手动在媒体库中寻找和删除的操作,提高效率和准确性。

您只需将以下代码复制到您的主题的functions.php文件中即可开始使用,这个不必wordpress插件来解决。

然而,请注意,在删除文章之前执行代码,使用before_delete_post动作而不是delete_post动作,这是因为使用delete_post动作可能导致在删除文章后,由于媒体附件与文章的关联已经取消,无法正确删除附件的情况。

重新编辑完成后,

/**
 * WordPress删除文章同时同时删除缩略图及图片附件的方法
 */

function delete_post_and_attachments($post_ID) {
    global $wpdb;


//删除特色图片
    $thumbnails = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID");
    foreach ($thumbnails as $thumbnail) {
        wp_delete_attachment($thumbnail->meta_value, true);
    }


//删除图片附件
    $attachments = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = $post_ID AND post_type = 'attachment'");
    foreach ($attachments as $attachment) {
        wp_delete_attachment($attachment->ID, true);
    }
    $wpdb->query("DELETE FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID");
}
add_action('before_delete_post', 'delete_post_and_attachments');

 

将上述代码添加到主题的functions.php文件中即可。这段代码将确保在删除文章时同时删除相关的特色图片和附件,帮助您更有效地管理网站空间。

注意:在对主题的functions文件进行修改前,请务必备份现有文件,以防止意外错误。