Nếu bạn sử dụng WordPress, thì bạn sẽ biết rằng WordPress cho phép bạn tải lên những hình ảnh có dung lượng rất lớn tối đa là 2GB và kích thước có khi đến 4K. Tuy nhiên không phải ai cũng có nhu cầu để sử dụng những hình ảnh có dung lượng và kích thước lớn đến như vậy, và hơn nữa sẽ rất lãng phí tài nguyên hệ thống. Để ngăn chặn chính bạn và người dùng tải lên những hình ảnh có kích thước và dung lượng lớn, thì dưới đây là một giải pháp khá là hiệu quả mà mình đã áp dụng, vậy nên mình chia sẻ cho mọi người cùng biết.
Cách sử dụng bộ lọc media ngăn tải lên hình ảnh có dung lượng và kích thước lớn
Bạn chỉ cần sao chép đoạn code bên dưới và dán vào file function.php trong thư mục theme mà bạn đang sử dụng là xong.
// chi cho phep tai len file duoi 1MB va rong toi da 2500px
function my_max_image_size( $file ) {
$fileinfo = @getimagesize($file["tmp_name"]);
$width = $fileinfo[0];
$size = $file['size'];
$size = $size / 1024;
$type = $file['type'];
$is_image = strpos( $type, 'image' ) !== false;
$limit = 1500;
$limit_output = '1.5MB hoặc kích thước chiều rộng quá 2500PX ';
if ( $is_image && $size > $limit || $width > "2500") {
$file['error'] = 'Không được phép tải lên ảnh dụng lượng vượt quá ' . $limit_output;
}
return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'my_max_image_size' );
$limit = 1500; Bạn có thể thay đổi dung lượng tối đa có thể tải lên qua dòng lệnh này.
$width > “2500” Thay đổi kích thước tối đa của hình ảnh có thể tải lên qua lệnh này.
Giải pháp bộ lọc khác với chức năng tương tự
Ngoài bộ lọc ở trên, thì bạn cũng có thể sử dụng bộ lọc bên dưới này, và nó cũng có chức năng là ngăn chặn bạn hoặc người dùng tải lên những hình ảnh có dung lượng vượt quá quy định.
// han che tai len file lơn hơn 1MB
add_filter( 'upload_size_limit', 'wpse_228300_change_upload_size' );
function wpse_228300_change_upload_size()
{
return 1000 * 1500;
}
return 1000 * 1500; Bạn có thể thay đổi dung lượng tối đa có thể tải lên qua dòng lệnh này.
Tuy nhiên với bộ lọc này thì nó lại không có chức năng ngăn chặn bạn hoặc người dùng tải lên những hình ảnh có kích thước lớn.
Ngăn chặn người dùng tải lên những file không phải là hình ảnh và giới hạn số lượng hình ảnh trong mỗi bài viết được phép tải lên
Bộ lọc này cho phép bạn ngăn chặn người dùng tải lên những file không phải là hình ảnh, và giới hạn số lượng hình ảnh mà người dùng được phép tải lên ở mỗi bài viết. Bạn sao chép đoạn code bên dưới và dán vào file function.php trong thư mục theme mà bạn đang sử dụng là xong.
// chi cho phep tai len các file hinh anh
add_filter('wp_handle_upload_prefilter', 'yoursite_wp_handle_upload_prefilter');
function yoursite_wp_handle_upload_prefilter($file) {
if ($file['type']=='application/octet-stream' && isset($file['tmp_name'])) {
$file_size = getimagesize($file['tmp_name']);
if (isset($file_size['error']) && $file_size['error']!=0) {
$file['error'] = "Unexpected Error: {$file_size['error']}";
return $file;
} else {
$file['type'] = $file_size['mime'];
}
}
list($category,$type) = explode('/',$file['type']);
if ('image'!=$category || !in_array($type,array('jpg','jpeg','gif','png'))) {
$file['error'] = "Xin lỗi bạn chỉ có thể tải lên file ảnh định dạng .GIF, .JPG, hay .PNG";
} else if ($post_id = (isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : false)) {
if (count(get_posts("post_type=attachment&post_parent={$post_id}"))>20)
$file['error'] = "Xin lỗi, bạn không thể tải lên nhiều hơn 20 hình ảnh.";
}
return $file;
}
{$post_id}”))>20 Đặt số lượng hình ảnh được phép tải lên ở mỗi bài viết qua lệnh này.