- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Trong bài trước mình có chủ đề về tối ưu dung lượng Database cho WordPress, giúp bạn xóa những dữ liệu thừa không sử dụng và giảm kích thước CSDL giúp tối ưu website để chạy nhanh hơn. Tuy nhiên để khi các tệp sử dụng để chạy website của bạn được tạo ra nhiều sẽ làm tăng dung lượng lưu trũ hosting. Bài hôm nay mình sẽ hướng dẫn các bạn tìm và xóa những tệp hình ảnh, file đính kèm không sử dụng trên website WordPress của bạn.
Như bạn có thể nhận thấy, mọi Hosting đều giới hạn số lượng tệp cho phép lưu trữ , số lượng files tăng lên sẽ làm tăng inode, khi số lượng vượt quá cho phép website của bạn sẽ gặp vấn đề, một số lỗi WordPress bạn thường gặp như không cho đăng bài viết, tải hình ảnh bị lỗi..
Xóa Attachments không sử dụng
Có 2 hình thức bạn có thể đăng tải lên WordPress, sử dụng trình tải file trực tiếp từ menu “Thư viện” hoặc gián tiếp thông qua bài viết. Chúng ta cần xóa file không sử dụng trong thư mục /wp-content/uploads, Mỗi hình ảnh bạn đăng lên bài viết Post thuộc về Post, cách đơn giản để giảm các attachments là xóa đi những tệp không gán cho Post Type nào.
Tạo tệp có tên cleanup.php tại thư mục gốc public_html và chèn vào đoạn code sau.
<?php define('WP_USE_THEMES', false); require( dirname( __FILE__ ) . '/wp-blog-header.php' ); global $wpdb; function rmFileExt($filename) { if(strpos($filename,'.')!==false) return substr($filename, 0 , (strrpos($filename, "."))); return $filename; } $i=0; //get all media $r = $wpdb->get_results("SELECT DISTINCT meta_value FROM `".$wpdb->prefix."postmeta` mt left join `".$wpdb->prefix."posts` p on mt.post_id=p.ID WHERE meta_key='_wp_attached_file' and p.post_parent!=0 LIMIT 1000"); $list=[]; foreach($r as $row) { $list[rmFileExt($row->meta_value)] = 1; } //glob files: wp-content/uploads/* $files = (array)glob( 'wp-content/uploads/*/*/*.{jpg,png,gif,bmp,jpeg}', GLOB_BRACE); foreach($files as $f) { $f1 = trim(str_replace('wp-content/uploads/','', $f),'/'); $t=preg_split('#-(\d+)x(\d+)#', $f1); $t= rmFileExt($t[0]); if($t && !isset($list[$t])) { unlink($f);$i++; } } printf("Found %s in DB\n", count($list)); printf ("Deleted $i/%s files.\n", count($files));
Lưu ý, trường hợp bạn sử dụng file riêng biệt có tải lên từ trình tải Media của WordPress và sử dụng liên kết của nó, rất tiếc đoạn code ở trên sẽ nhận dạng và xóa những files đó. Do đó, trước khi bạn chạy đoạn mã trên, cần xác định những tệp bạn tải lên mà có sử dụng liên kết cho Widget, hay trong giao diện WordPress của bạn.
Một cách tiếp cận khác, bạn muốn loại bỏ những tệp hình ảnh, file đính kèm khác từ Post đã xóa vào Trash. Ở trường hợp này chúng ta sẽ chỉ xóa những tệp trong thư mục /uploads
, có sử dụng dụng cho Post đã bị xóa. Để thực hiện bạn tạo tệp với tên cleanup_trash.php với nội dung dưới đây:
<?php define('WP_USE_THEMES', false); require( dirname( __FILE__ ) . '/wp-blog-header.php' ); global $wpdb; function rmFileExt($filename) { if(strpos($filename,'.')!==false) return substr($filename, 0 , (strrpos($filename, "."))); return $filename; } $i=0; //get all media $r = $wpdb->get_results("SELECT distinct meta_value FROM `".$wpdb->prefix."postmeta` mt left join `".$wpdb->prefix."posts` p on mt.post_id=p.ID WHERE meta_key='_wp_attached_file' and p.post_parent in (select ID from ".$wpdb->prefix."posts where post_status='trash')"); $list=[]; foreach($r as $row) { $list[rmFileExt($row->meta_value)] = 1; } //glob files: wp-content/uploads/* $files = (array)glob( 'wp-content/uploads/*/*/*.{jpg,png,gif,bmp,jpeg}', GLOB_BRACE); foreach($files as $f) { $f1 = trim(str_replace('wp-content/uploads/','', $f),'/'); $t=preg_split('#-(\d+)x(\d+)#', $f1); $t= rmFileExt($t[0]); if($t && isset($list[$t])) { unlink($f);$i++; } } printf("Found %s in DB need to be deleted\n", count($list)); printf ("Deleted $i/%s files.\n", count($files));
Với 2 cách trên, chúng ta sẽ xóa đi những tệp hình ảnh, attachments không sử dụng cho bài viết, sản phẩm và những Posts đã xóa trước khi xóa vĩnh viễn từ Database. Chúc bạn thành công!
Để nhận được bài viết mới vui lòng đăng ký kênh kiến thức WordPress từ A-Z ở Form bên dưới. Bạn cũng có thể nhận được sự trợ giúp trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype