Thay đổi thông tin hình ảnh trước khi upload

Cập nhật lần cuối vào

Nếu bạn muốn thay đổi tên hình ảnh hoặc thay đổi kích thước của hình ảnh trước khi upload lên hosting thì bài viết này sẽ giúp cho bạn giải quyết vấn đề. Trong WordPress, có rất nhiều filter và action cho bạn làm việc, trong bài này thì mình sẽ hướng dẫn cho các bạn cách dùng filter wp_handle_upload_prefilter để chỉnh sửa thông tin hình ảnh trước khi tập tin này được upload lên hosting.

Thay đổi thông tin hình ảnh trước khi upload

Nhu cầu của bạn là cần thay đổi lại tên của hình ảnh phù hợp với chuẩn SEO, hoặc chỉ đơn giản là người dùng thích dùng Tiếng Việt có dấu để đặt tên tập tin, bây giờ bạn muốn chỉnh sửa sao cho các tập tin trước khi upload lên hosting phải có tên đẹp giống như slug.

Xem thêm: Website chuẩn SEO là gì?

Ngoài ra, nếu các hình ảnh lưu trên máy tính có kích thước quá lớn, bạn muốn chỉnh sửa lại các thông số của chúng trước khi upload lên hosting để sử dụng cho bài viết, bạn hoàn toàn có thể sử dụng filter wp_handle_upload_prefilter để làm công việc này.

Bạn mở tập tin functions.php của giao diện lên, đây là thao tác hầu như ai cũng biết nếu như bạn muốn bổ sung một hàm nào đó cho WordPress, nếu các bạn đã quá rành về điểm này thì có thể chia ra thành các lớp riêng hoặc plugin riêng để sử dụng. Sau đó, bạn thêm vào đoạn code sau:

function sb_theme_pre_upload_file($file) {
	return $file;
}
add_filter('wp_handle_upload_prefilter', 'sb_theme_pre_upload_file');

Đoạn code bên trên là cú pháp cơ bản nhất của wp_handle_upload_prefilter. Trong biến $file này sẽ chứa các thông tin của tập tin, và đây là một mảng dữ liệu. Bạn có thể tham khảo một biến $file hình ảnh mà mình ví dụ bên dưới:

Array
(
    [name] => 14175.jpg
    [type] => image/jpeg
    [tmp_name] => E:\xampp\tmp\phpA8B1.tmp
    [error] => 0
    [size] => 34676
)

Bên trong biến $file này sẽ có các key như name, type, tmp_name,… như bạn thấy được trong đoạn code mình gửi bên trên. Để phân biệt được tập tin bạn muốn upload là hình ảnh hay các loại tập tin khác thì bạn cần kiểm tra $file[‘type’]. Đối với các file là hình ảnh thì type sẽ có chữ image nằm bên trong. Bạn chỉ việc dùng hàm để kiểm tra chữ image có tồn tại trong type thì đó là hình ảnh.

function sb_theme_pre_upload_file($file) {
	// Lấy kiểu của tập tin
	$file_type = isset($file['type']) ? $file['type'] : '';
	// Kiểm tra nếu tập tin là hình ảnh
	if(false !== strpos($file_type, 'image')) {
		
	}
	return $file;
}
add_filter('wp_handle_upload_prefilter', 'sb_theme_pre_upload_file');

Để thay đổi tên của hình ảnh thì bạn chỉ việc xử lý thông tin trong mảng $file[‘name’]. Bạn có thể sử dụng hàm xóa dấu Tiếng Việt bằng PHP để loại bỏ đi các ký tự đặc biệt, thay khoảng trắng bằng dấu gạch ngang,… bạn cũng có thể sử dụng hàm sanitize_file_name để kiểm tra tên của tập tin.

Bây giờ, nếu bạn muốn kiểm tra xem kích thước của hình ảnh có đạt độ lớn tối đa và tối thiểu hay không thì bạn có thể làm như sau:

function sb_theme_pre_upload_file($file) {
	// Lấy kiểu của tập tin
	$file_type = isset($file['type']) ? $file['type'] : '';
	// Kiểm tra nếu tập tin là hình ảnh
	if(false !== strpos($file_type, 'image')) {
		// Hàm lấy thông tin kích thước hình ảnh
		$image_size = getimagesize($file['tmp_name']);
	}
	return $file;
}
add_filter('wp_handle_upload_prefilter', 'sb_theme_pre_upload_file');

Một khi đã lấy được kích thước của hình ảnh dự định upload rồi thì bạn có thể kiểm tra được kích thước của hình đó có đạt tiêu chuẩn hay chưa, nếu hình ảnh đó không phù hợp thì bạn return về một đối tượng WP_Error là quá trình upload sẽ kết thúc bằng cách gửi thông báo lỗi cho người dùng, hình ảnh sẽ không được upload lên hosting.

Theo dõi
Thông báo của
guest

1 Comment
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Nguyễn Văn Hài
8 năm trước

Cảm ơn bạn nhé!