Tự động tối ưu hóa ảnh khi tải lên WordPress không cần plugin

Khi bạn tải ảnh lên thư viện WordPress, hệ thống sẽ tự động tạo ra nhiều kích thước ảnh khác nhau như thumbnail, medium hay large. Tuy nhiên, các ảnh này vẫn có thể chưa được tối ưu tốt về dung lượng.

Tự động tối ưu hóa ảnh khi tải lên WordPress không cần plugin

Bằng cách tự động nén ảnh ngay khi upload, bạn có thể:

  • Giảm đáng kể dung lượng ảnh và tiết kiệm không gian lưu trữ.
  • Cải thiện tốc độ tải trang và trải nghiệm người dùng.
  • Đạt điểm cao hơn trong các công cụ đo hiệu suất như PageSpeed Insights hoặc Lighthouse.

Trong bài viết này, mình sẽ hướng dẫn bạn cách cấu hình WordPress để tự động tối ưu hóa ảnh khi tải lên – không cần cài thêm plugin, chỉ cần một vài dòng PHP kết hợp với công cụ hệ thống như jpegoptim, optipng hoặc cwebp.

Cài đặt công cụ nén ảnh trên máy chủ

Bạn cần đảm bảo máy chủ đã cài đặt sẵn các công cụ sau:

# Ubuntu / Debian
sudo apt install jpegoptim optipng webp

# CentOS / AlmaLinux
sudo yum install jpegoptim optipng libwebp-tools

Thêm đoạn mã vào functions.php

Thêm đoạn mã sau vào functions.php của theme hoặc sử dụng trong plugin riêng:

function auto_optimize_uploaded_image($metadata) {
    $upload_dir = wp_upload_dir();
    $base_path = trailingslashit($upload_dir['basedir']);

    foreach ($metadata as $key => $value) {
        if ($key === 'file') {
            $paths[] = $base_path . $value;
        } elseif (is_array($value) && isset($value['file'])) {
            $paths[] = $base_path . dirname($metadata['file']) . '/' . $value['file'];
        }
    }

    foreach ($paths as $path) {
        $ext = pathinfo($path, PATHINFO_EXTENSION);

        if ($ext === 'jpg' || $ext === 'jpeg') {
            exec("jpegoptim --strip-all --max=85 " . escapeshellarg($path));
        } elseif ($ext === 'png') {
            exec("optipng -o7 " . escapeshellarg($path));
        }
    }

    return $metadata;
}
add_filter('wp_generate_attachment_metadata', 'auto_optimize_uploaded_image');

Giải thích

  • jpegoptim: nén file JPEG, loại bỏ metadata, giới hạn chất lượng tối đa là 85%.
  • optipng: tối ưu ảnh PNG với mức nén cao nhất (-o7).
  • Ảnh gốc và các size sinh ra như thumbnail, medium đều sẽ được xử lý tự động.

Tuỳ chọn: Tự động chuyển ảnh sang WebP

Nếu bạn muốn tạo thêm bản WebP, có thể thêm đoạn sau vào cuối vòng lặp:

if (in_array($ext, ['jpg', 'jpeg', 'png'])) {
    $webp_path = preg_replace('/\.(jpg|jpeg|png)$/i', '.webp', $path);
    exec("cwebp -q 80 " . escapeshellarg($path) . " -o " . escapeshellarg($webp_path));
}

Lưu ý quan trọng

  • Hãy đảm bảo PHP có quyền thực thi các lệnh hệ thống (exec).
  • Nên backup site trước khi thử nghiệm.
  • Không nên dùng trên shared host nếu không rõ quyền truy cập.

Gợi ý: Nếu bạn muốn nén lại toàn bộ ảnh đã tải lên từ trước, hãy dùng WP-CLI kết hợp script tự động hoặc tìm theo đường dẫn wp-content/uploads.

find wp-content/uploads -name "*.jpg" -exec jpegoptim --max=85 {} \;

Kết luận

Chỉ với một vài dòng code, bạn đã có thể tự động tối ưu ảnh khi upload mà không cần cài thêm plugin. Đây là giải pháp cực kỳ nhẹ và linh hoạt cho những ai muốn giữ site WordPress gọn nhẹ, hiệu quả và tối ưu SEO.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...