Để tránh việc tạo ra các kích thước hình ảnh crop trong WordPress ngay từ đầu, bạn có thể ngăn chặn quá trình tạo kích thước trung gian trước khi hình ảnh được upload. Bằng cách này, không chỉ tiết kiệm tài nguyên mà còn giúp giảm thiểu công việc xóa các file không cần thiết sau khi đã được tạo.

Dưới đây là cách thực hiện:

1. Ngăn chặn việc tạo kích thước ảnh trung gian

Sử dụng hook intermediate_image_sizes_advanced để ngăn WordPress tạo ra bất kỳ kích thước ảnh trung gian nào. Đoạn mã sau sẽ giúp bạn làm điều này:

function disable_intermediate_image_sizes($sizes) {
    // Trả về một mảng rỗng để không tạo kích thước trung gian nào
    return array();
}
add_filter('intermediate_image_sizes_advanced', 'disable_intermediate_image_sizes');

2. Ngăn chặn việc crop hình ảnh

Hàm trên sẽ ngăn chặn việc tạo kích thước trung gian ngay khi upload. Dưới đây là một đoạn mã hoàn chỉnh bạn có thể thêm vào file functions.php:

// Kiểm tra và ngăn chặn upload hình ảnh không hợp lệ
function custom_upload_single_image($file) {
    // Kiểm tra xem file có phải là hình ảnh không
    $file_type = wp_check_filetype($file['name']);
    
    // Chỉ cho phép upload file hình ảnh
    if (strpos($file_type['type'], 'image') === false) {
        return new WP_Error('invalid_file_type', 'Chỉ cho phép upload file hình ảnh.');
    }

    return $file;
}
add_filter('wp_handle_upload_prefilter', 'custom_upload_single_image');

// Ngăn chặn việc tạo kích thước ảnh trung gian
function disable_intermediate_image_sizes($sizes) {
    return array(); // Không tạo kích thước trung gian nào
}
add_filter('intermediate_image_sizes_advanced', 'disable_intermediate_image_sizes');

// Ngăn chặn việc lưu trữ thông tin về các kích thước đã tạo trong metadata
function prevent_image_size_metadata($metadata, $attachment_id) {
    if (isset($metadata['sizes'])) {
        $metadata['sizes'] = array(); // Xóa tất cả kích thước đã tạo
    }
    return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'prevent_image_size_metadata', 10, 2);

Giải thích mã:

  1. custom_upload_single_image:
    • Hàm này kiểm tra file upload có phải là hình ảnh hay không và trả về lỗi nếu không phải.
  2. disable_intermediate_image_sizes:
    • Hàm này ngăn WordPress tạo ra các kích thước trung gian khi upload hình ảnh.
  3. prevent_image_size_metadata:
    • Hàm này xóa metadata cho các kích thước đã tạo ra, đảm bảo rằng không có thông tin nào được lưu trữ trong cơ sở dữ liệu.

Kết quả:

  • Khi bạn upload một hình ảnh, WordPress sẽ chỉ lưu trữ ảnh gốc mà không tạo ra bất kỳ kích thước trung gian nào. Điều này giúp tiết kiệm không gian lưu trữ và giảm tải cho server ngay từ ban đầu, không cần phải thực hiện bước xóa file sau đó.

Lưu ý:

  • Hãy chắc chắn sao lưu file functions.php trước khi thực hiện bất kỳ thay đổi nào, để tránh gây ra lỗi hoặc mất dữ liệu không mong muốn.