D
P
0

Shopify & Liquid

Hapus Section di `templates/index.json` Shopify Tapi Muncul Lagi? `order` dan `sections` Itu Dua Struktur Terkopel

5 Juli 2026·3 menit baca
Hapus Section di `templates/index.json` Shopify Tapi Muncul Lagi? `order` dan `sections` Itu Dua Struktur Terkopel

Saya lagi merapikan homepage sebuah toko Shopify klien: ganti hero lama dengan hero baru. Tugas yang harusnya sepele. Saya buka templates/index.json, temukan id hero lama di array order, hapus, push. CLI bilang sukses. Saya buka halaman live untuk verifikasi, dan yang saya lihat bikin dahi mengerut: hero lama dan hero baru muncul dua-duanya, ditumpuk. Bukan gantian, tapi berdampingan.

Refleks pertama saya jelek: saya kira ada masalah cache, atau push-nya belum benar-benar sampai. Saya push lagi, sukses lagi, hasilnya sama. Jadi saya lakukan hal yang seharusnya saya lakukan dari awal. Saya pull ulang template itu dan buka lagi filenya. Dan di situ pelakunya ketahuan: id hero lama yang tadi saya hapus, sudah balik lagi di array order. Seolah-olah edit saya di-undo diam-diam oleh server.

Kenapa ini terjadi

Template JSON di Shopify itu bukan satu daftar datar. Dia punya dua struktur yang saling terkopel: array order yang menentukan urutan render, dan objek sections yang menyimpan definisi tiap section (tipe dan settings-nya). Keduanya harus konsisten. Dan di sinilah jebakannya: kalau definisi sebuah section masih ada di dalam objek sections, push Shopify akan otomatis mengembalikan id-nya ke array order.

Jadi yang saya lakukan itu setengah pekerjaan. Saya cuma mencabut id hero_jVaWmY dari array order, tapi blok definisinya masih utuh di objek sections. Buat Shopify, itu keadaan yang tidak valid: ada section yang terdefinisi tapi tidak punya posisi. Alih-alih menganggapnya sengaja dibuang, Shopify "memperbaiki" dengan menyisipkan lagi id-nya ke order. Setiap kali saya push, definisi itu me-reseed dirinya sendiri. Menghapus cuma entri order memang tidak akan pernah cukup.

Begitu cara berpikirnya klik, semuanya masuk akal. Bukan cache, bukan push yang gagal. Saya cuma menghapus separuh dari pasangan yang tidak boleh dipisah, lalu heran kenapa separuh yang lain menariknya balik.

Perbaikannya

Solusinya menghapus di dua tempat sekaligus. Di dalam templates/index.json, hapus id hero dari array order DAN hapus seluruh blok definisinya dari objek sections.

{
  "sections": {
    "hero_jVaWmY": {
      "type": "hero-banner",
      "settings": { }
    }
  },
  "order": [
    "hero_jVaWmY"
  ]
}

Yang saya lakukan: buang string "hero_jVaWmY" dari array order, lalu hapus juga seluruh entri "hero_jVaWmY": { ... } dari objek sections. Setelah itu validasi dulu JSON-nya, jangan sampai ada koma menggantung atau kurung yang tidak seimbang, baru push:

shopify theme push --path=<theme-dir>

Langkah yang tidak boleh dilewat: verifikasi. Push sukses bukan bukti. Saya pull ulang template itu lalu hitung berapa kali id-nya masih muncul:

grep -c hero_jVaWmY templates/index.json

Kalau hasilnya 0, section itu benar-benar hilang, di kedua struktur. Kalau masih ada, berarti saya ketinggalan satu tempat. Angka nol itu satu-satunya bukti yang saya percaya, bukan banner "success" dari CLI.

Kenapa pull ulang itu wajib

Yang mengubah saya di kasus ini adalah kebiasaan mem-pull ulang setelah push, bukan cuma melihat halaman live. Halaman live bisa berbohong karena rendering dan cache. File hasil pull menunjukkan keadaan sebenarnya yang server simpan. Kalau id yang saya kira sudah mati ternyata balik lagi di file itu, saya langsung tahu objek sections-nya masih menyimpan definisinya.

Jebakan ini juga menjelaskan hal lain yang dulu bikin saya bingung: section yang saya "matikan" lewat theme editor tetap menumpuk diam-diam. Menonaktifkan atau mencabutnya dari urutan tidak menghapus definisinya. Definisi itu bertahan di objek sections, siap me-reseed dirinya. Jadi sekarang saya rutin membersihkan definisi yang sudah tidak dipakai, bukan cuma merapikan urutannya.

Pelajaran

Di template JSON Shopify, order dan sections itu pasangan yang tidak boleh dipisah. Menghapus section berarti mencabut id-nya dari order DAN menghapus definisinya dari sections, keduanya, dalam satu kali edit. Kalau cuma salah satu, push berikutnya akan menyatukan mereka lagi dengan cara yang tidak kamu inginkan. Dan jangan percaya banner "success": pull ulang, grep -c id-nya, dan pastikan angkanya nol sebelum menyatakan selesai. Sejak itu, saya berhenti push berulang sambil berharap, dan mulai memperlakukan template JSON sebagai struktur terkopel yang memang mereka.