WP-Zibi主题增加删除文章和论坛帖子时删除引用的附件

长期运营一个网站的话还是很需要关注空间的使用情况的,特别是WP系统网站,因为一些原因没有办法删除文章时自动清理附件,如果用户量大的话,会导致一些不必要的空间占用

以下为优化代码

删除文章时删除文章所引用的附件,此代码放在主题文件的functions.php里,但是最好创建一个func.php的文件,然后放在func.php里,这样以后更新主题不会被自动覆盖

/* 删除文章时删除图片附件
/* ———————— */
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');

以下为删除帖子时自动删除附件的修改代码

[content_hide]

将代码放在wp-content/themes/zibll/inc/functions/bbs/inc/edit.php文件里

打开edit.php搜索删除帖子大概在1961行

进行替换

代码为

//删除帖子
public static function posts_delete($post) {
    global $zib_bbs;

    // 获取版块名称、帖子名称和评论名称
    $name = $zib_bbs->plate_name;
    $posts_name = $zib_bbs->posts_name;
    $comment_name = $zib_bbs->comment_name;

    // 获取帖子对象
    $post = get_post($post);
    if (!$post || is_wp_error($post)) {
        return "Error: Invalid post.";
    }
    $post_id = $post->ID;

    // 转义帖子标题
    $title = esc_attr($post->post_title);

    // 获取评论总数
    $all_comment_count = get_comments_number($post_id);

    // 构建确认删除的提示信息
    $desc = '<div class="c-red mb20">当前' . $posts_name . '下,共有' . $all_comment_count . '次' . $comment_name . ',确认要删除吗? </div>';
    
    // 获取并删除帖子关联的图片
    $attachments = get_posts(array(
        'post_type' => 'attachment',
        'posts_per_page' => -1,
        'post_status' => 'any',
        'post_parent' => $post_id,
    ));

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

    // 调用删除函数并返回结果
    $html = self::delete($post_id, $posts_name, 'posts_delete', $title, $desc);
    return $html;
}

[/content_hide]

THE END
喜欢就支持一下吧