Lompat ke konten
Gambar & media

Kenapa Folder Uploads WordPress Anda Jadi Besar Sekali

Folder uploads WordPress Anda besar karena WordPress tidak pernah menyimpan satu file per gambar. Setiap upload memicu sejumlah salinan hasil resize di samping

Dipublikasikan

Folder uploads WordPress Anda besar karena WordPress tidak pernah menyimpan satu file per gambar. Setiap upload memicu sejumlah salinan hasil resize di samping file aslinya — tujuh salinan untuk foto berukuran kamera pada umumnya, sebelum tema atau plugin apa pun menambah lebih banyak lagi. Tidak ada yang rusak; Anda hanya melihat penggandaan yang terjadi di setiap upload. Solusinya adalah berhenti membuat ukuran yang tidak pernah Anda pakai, lalu regenerate supaya salinan lama terhapus dari disk.

Hitung-hitungannya

Upload satu JPEG 4000×3000 lalu lihat isi /wp-content/uploads/2026/07/. Anda tidak akan menemukan satu file. Anda akan menemukan ini:

  • photo.jpg — file asli, tidak diutak-atik
  • photo-scaled.jpg — salinan 2560px yang disajikan WordPress sebagai pengganti file asli
  • photo-150x150.jpgthumbnail
  • photo-300x225.jpgmedium
  • photo-768x576.jpgmedium_large
  • photo-1024x768.jpglarge
  • photo-1536x1152.jpg — versi 2× dari medium_large
  • photo-2048x1536.jpg — versi 2× dari large

Itu file asli plus tujuh turunan, hanya dari core saja. Upload 3 MB bisa berakhir jadi 5–6 MB di disk sebelum satu plugin pun jalan. Sekarang tambahkan tema yang mendaftarkan empat ukurannya sendiri dan WooCommerce (tiga lagi), maka satu upload menjadi empat belas atau lima belas file. Kalikan dengan library berisi beberapa ribu gambar dan ukuran folder itu berhenti jadi misteri.

Kalau Anda ingin angka pastinya untuk dimensi dan ukuran terdaftar Anda sendiri, image storage calculator akan menghitungnya untuk Anda.

Kenapa ini terjadi

Saat Anda upload, wp_generate_attachment_metadata() memanggil wp_create_image_subsizes(), yang melakukan loop pada setiap ukuran yang dikembalikan get_intermediate_image_sizes() dan menulis satu file untuk setiap ukuran yang bisa dihasilkan dari file asli. Core mendaftarkan thumbnail, medium, medium_large, large, plus ukuran retina 1536x1536 dan 2048x2048 yang ditambahkan di WP 5.3. Tema atau plugin apa pun yang memanggil add_image_size() ikut menambah ke loop yang sama — secara permanen, untuk setiap upload berikutnya.

File -scaled berasal dari mekanisme terpisah: filter big_image_size_threshold, defaultnya 2560px. Apa pun yang lebih lebar akan dapat salinan hasil scale yang menjadi gambar “full” yang disajikan, sementara file asli tetap ada di disk. Jadi upload berukuran besar menyimpan kedua-duanya — file asli yang raksasa dan versi 2560px-nya.

Anda bisa melihat persis apa yang dihasilkan setup Anda untuk sebuah gambar dengan image sizes inspector.

Cara memperbaikinya, secara berurutan

1. Ukur dulu sebelum mengutak-atik apa pun. Menebak-nebak hanya buang waktu. Dari root situs:

du -sh wp-content/uploads
find wp-content/uploads -type f \( -name '*.jpg' -o -name '*.webp' -o -name '*.png' \) | wc -l
du -ah wp-content/uploads | sort -rh | head -20

2. Batalkan pendaftaran ukuran yang tidak Anda pakai. Kebanyakan tema tidak pernah menampilkan ukuran 1536 dan 2048, dan banyak yang tidak pernah memakai medium_large. Buang saja:

// functions.php — stop generating sizes this site never outputs
add_action( 'init', function () {
    remove_image_size( '1536x1536' );
    remove_image_size( '2048x2048' );
} );

// Drop medium_large too, if your theme doesn't use the 768px size
add_filter( 'intermediate_image_sizes_advanced', function ( $sizes ) {
    unset( $sizes['medium_large'] );
    return $sizes;
} );

3. Regenerate untuk menghapus salinan lama. Membatalkan pendaftaran hanya menghentikan pembuatan di masa depan — file yang sudah ada di disk tetap tinggal sampai Anda regenerate:

wp media regenerate --yes

Versi WP-CLI terbaru menghapus file untuk ukuran yang sudah tidak terdaftar lagi sambil jalan. Kalau Anda pakai plugin Regenerate Thumbnails, centang opsi “delete unregistered sizes” — tanpa kotak itu dicentang, file lama akan tetap ada.

4. Buru file yang jadi yatim (orphaned). Ganti tema tidak pernah membersihkan ukuran yang didaftarkan tema lama. Menghapus post pun tidak selalu menghapus turunannya. Setelah langkah 3, kalau du -sh masih jauh di atas yang diprediksi calculator, berarti Anda punya file orphan — file di disk yang tidak direferensikan attachment mana pun.

Yang jangan dilakukan

Jangan matikan scaled images demi “menghemat ruang”. File -scaled itu lebih kecil dari file asli Anda. Mematikan big_image_size_threshold tidak menghapus apa pun — malah membuat WordPress menyajikan file asli yang berukuran beberapa megabyte ke setiap pengunjung. Itu keputusan soal bandwidth dan kualitas, bukan pembersihan storage, dan biasanya justru bikin bobot halaman lebih berat. Tool disable-scaled-images menjelaskan kapan hal itu benar-benar tepat dilakukan; mengecilkan folder uploads bukan salah satunya.

Jangan hapus file langsung dari uploads lewat SFTP. Daftar subsize tiap attachment tersimpan di _wp_attachment_metadata-nya. Menghapus file secara manual meninggalkan referensi yang rusak, dan proses regenerate tidak bisa membangun ulang sebuah ukuran kalau Anda sudah menghapus file asli yang jadi sumbernya. Hapus file asli, maka gambar itu hilang selamanya.

Jangan set thumbnail/medium/large ke 0 di Settings → Media dengan harapan folder mengecil. Menge-nol-kan sebuah ukuran hanya menghentikan pembuatan di masa depan tapi tidak menyentuh apa pun yang sudah ada di disk, dan UI-nya tidak bisa menjangkau medium_large, 1536, 2048, atau ukuran tema/plugin apa pun — pilihan itu tidak ada di sana.

Jangan salahkan database. Folder uploads yang berat itu adalah file gambar, hampir tidak pernah database. Mengoptimalkan tabel tidak akan menggeser angkanya.

Masih mentok?

Kalau folder masih lebih besar dari yang diperkirakan setelah regenerate, masukkan dimensi gambar asli dan ukuran terdaftar Anda ke storage calculator lalu bandingkan angkanya dengan du -sh wp-content/uploads. Selisih yang besar berarti ada file orphan dari tema lama atau post yang dihapus — bukan dari core, dan bukan sesuatu yang bisa diperbaiki dengan regenerate lagi. Selisih kecil berarti hitungannya memang begitu adanya: tujuh file lebih per upload, bekerja persis seperti yang dirancang.