长期运营一个网站的话还是很需要关注空间的使用情况的,特别是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
