Di 42 Harga Diskon, Currency, Unit Pricing, Installments, B2B kita nempelin banner Shop Pay Installments ke form. Bab ini soal tombol yang ada di sebelahnya: accelerated checkout, alias tombol “Buy it now” dan wallet (Shop Pay, Apple Pay, Google Pay, PayPal) yang ngelewatin cart dan langsung ke pembayaran.
Accelerated checkout (di admin disebut dynamic checkout buttons) ngasih pembeli jalur lebih cepat: dari halaman produk atau cart langsung ke checkout yang udah terisi data pembayaran dan alamat dari wallet mereka. Konversinya lebih tinggi, jadi hampir semua theme ndukung ini.
Di Mana Bisa Dipasang
Di mana aja: template cart atau produk, section di dalamnya, atau cart drawer. Saran Shopify: taruh dekat tombol checkout biasa di form cart, biar pembeli bisa milih checkout reguler atau accelerated.
Kalau kamu pakai Section Rendering API (misalnya buat nyegarin cart drawer), tombolnya dirender ulang setiap section-nya diminta. Render pertama lebih lambat (library JavaScript-nya di-download dan web component-nya didaftarin), render berikutnya cepat.
Di Halaman Produk
Di halaman produk, Shopify milih satu tombol secara dinamis, yang paling cocok buat pembeli itu (Shop Pay kalau dia punya akun Shop, Apple Pay kalau di Safari iOS, dan seterusnya). Pasangnya lewat filter payment_button dari 20 Filters Money, Metafield, Cart, Customer, dan Localization > 1. payment_button di dalam form produk:
{% form 'product', product %}
<!-- form content -->
<input type="submit" value="Add to cart" />
{{ form | payment_button }}
{% endform %}Urutannya penting: Add to cart dulu, baru tombol accelerated. Add to cart itu aksi utama, accelerated itu alternatif. Dan tombolnya ngikutin varian dari input name="id" di form yang sama, sama kaya banner installments.
Ingat dari 41 Produk Recommendations, Gift Card, dan Bundles > 2. Masukin ke Form Produk: validasi form penerima gift card gak jalan lewat tombol accelerated, jadi di produk gift card sembunyiin tombol ini.
❌ tombol accelerated di luar form, gak tau varian mana
{% form 'product', product %}
<input type="submit" value="Add to cart" />
{% endform %}
{{ form | payment_button }}✅ di dalam form, setelah add to cart
{% form 'product', product %}
<input type="submit" value="Add to cart" />
{{ form | payment_button }}
{% endform %}Di Cart
Di cart, tampilin semua tombol accelerated yang diaktifin toko. Dua object dari 13 Objects Global > 4. additional_checkout_buttons dan content_for_additional_checkout_buttons:
additional_checkout_buttons,truekalau toko punya tombol accelerated yang aktif.content_for_additional_checkout_buttons, markup tombol-tombolnya.
{% if additional_checkout_buttons %}
{{ content_for_additional_checkout_buttons }}
{% endif %}Taruh dekat tombol checkout di form cart.
Kustomisasi Tampilan
Ini bagian yang sering bikin frustrasi: tombol accelerated nyembunyiin HTML-nya di custom element dengan shadow DOM tertutup. Artinya CSS apapun yang nargetin struktur HTML di dalamnya gak jalan, dan event listener di elemen dalamnya juga gak nangkep apa-apa. Yang bisa: CSS custom property buat styling, dan elemen tertentu buat pelacakan.
Kenapa ditutup? Karena tombol wallet punya persyaratan branding dari Apple, Google, PayPal (bentuk, warna, teks) yang gak boleh diubah sembarangan, dan Shopify harus bisa ngupdate implementasinya tanpa ngerusak theme.
1. CSS Custom Property
Yang tersedia:
--shopify-accelerated-checkout-button-block-size, tinggi tombol, minimal25px, maksimal55px. Default44pxdi produk,42pxdi cart layout vertikal.--shopify-accelerated-checkout-button-inline-size(cart aja), tinggi tombol di layout horizontal, 25–55px, default54px.--shopify-accelerated-checkout-button-border-radius, radius sudut, default0pxdi produk,4pxdi cart.--shopify-accelerated-checkout-button-box-shadow, bayangan, defaultnone.--shopify-accelerated-checkout-skeleton-background-color, warna skeleton loading sebelum tombol bisa dirender, default#dedede.--shopify-accelerated-checkout-skeleton-animation-opacity-startdan-end, opasitas awal dan akhir animasi skeleton (fade bolak-balik), default1dan0.5.--shopify-accelerated-checkout-skeleton-animation-duration, durasi animasi (dari awal ke akhir dan balik), default4s.--shopify-accelerated-checkout-skeleton-animation-timing-function, timing function-nya, defaultease.--shopify-accelerated-checkout-inline-alignment(cart aja), posisi tombol di wadah waktu layout horizontal, nilaijustify-contentapapun, defaultstart.--shopify-accelerated-checkout-row-gap(cart aja), jarak vertikal antar tombol di layout vertikal, default8px.
Terapin di dua custom element yang ngerender tombolnya: shopify-accelerated-checkout (produk) dan shopify-accelerated-checkout-cart (cart):
shopify-accelerated-checkout {
--shopify-accelerated-checkout-button-block-size: 44px;
--shopify-accelerated-checkout-button-border-radius: 0px;
--shopify-accelerated-checkout-button-box-shadow: none;
--shopify-accelerated-checkout-skeleton-background-color: #dedede;
--shopify-accelerated-checkout-skeleton-animation-opacity-start: 1;
--shopify-accelerated-checkout-skeleton-animation-opacity-end: 0.5;
--shopify-accelerated-checkout-skeleton-animation-duration: 4s;
--shopify-accelerated-checkout-skeleton-animation-timing-function: ease;
}
shopify-accelerated-checkout-cart {
--shopify-accelerated-checkout-button-block-size: 42px;
--shopify-accelerated-checkout-button-inline-size: 54px;
--shopify-accelerated-checkout-button-border-radius: 4px;
--shopify-accelerated-checkout-button-box-shadow: none;
--shopify-accelerated-checkout-inline-alignment: flex-start;
--shopify-accelerated-checkout-row-gap: 8px;
--shopify-accelerated-checkout-skeleton-background-color: #dedede;
--shopify-accelerated-checkout-skeleton-animation-opacity-start: 1;
--shopify-accelerated-checkout-skeleton-animation-opacity-end: 0.5;
--shopify-accelerated-checkout-skeleton-animation-duration: 4s;
--shopify-accelerated-checkout-skeleton-animation-timing-function: ease;
}Praktik bagusnya: samain block-size dan border-radius sama tombol Add to cart theme kamu, dan samain warna skeleton sama warna latar tombol, biar transisi dari skeleton ke tombol asli gak “loncat”.
❌ nargetin elemen dalam, gak jalan karena shadow DOM tertutup
.shopify-payment-button__button { border-radius: 8px; }✅ lewat custom property
shopify-accelerated-checkout { --shopify-accelerated-checkout-button-border-radius: 8px; }2. Layout di Cart
Bawaannya di cart tombol disusun horizontal rata kiri. Kalau ruangnya gak cukup buat semua berjajar, otomatis jadi vertikal dan tiap tombol selebar wadahnya. Kalau mau vertikal sejak awal, tambahin class additional-checkout-buttons--vertical di wadah content_for_additional_checkout_buttons:
{% if additional_checkout_buttons %}
<div class="additional-checkout-buttons--vertical">
{{ content_for_additional_checkout_buttons }}
</div>
{% endif %}Vertikal biasanya lebih cocok di cart drawer yang sempit.
Ngelacak Klik
Jangan bergantung ke markup di dalam tombol buat ngelacak pemakaian, karena shadow DOM tertutup cuma ngelewatin composed event (event yang composed: true, kaya click). Pasang listener di elemen wallet ini:
- Shop Pay:
<shop-pay-wallet-button> - Amazon Pay:
<shopify-amazon-pay-button> - Apple Pay:
<shopify-apple-pay-button> - Google Pay:
<shopify-google-pay-button> - PayPal:
<shopify-paypal-button>
document.addEventListener('click', (event) => {
const wallet = event.target.closest('shop-pay-wallet-button, shopify-apple-pay-button, shopify-google-pay-button, shopify-paypal-button, shopify-amazon-pay-button');
if (wallet) {
// kirim event analitik dengan wallet.tagName
}
});Pakai event delegation di document karena elemennya dirender belakangan (dan dirender ulang lewat Section Rendering API).
Checkout Banyak Produk
Dari halaman produk, kamu bisa nyertain produk tambahan bareng produk utama waktu pembeli checkout lewat tombol accelerated. Contohnya: garansi yang disarangin di bawah TV, atau aksesori yang dicentang pembeli. Tanpa fitur ini, tombol accelerated cuma bawa satu varian.
1. Batasan
- Cuma didukung di online store, bukan custom storefront.
- Wallet Buy with Prime gak ndukung lebih dari satu varian, item tambahan diabaikan.
2. Tambahin Hidden Input ke Form Produk
Tambahin field tersembunyi ke form produk dengan konvensi nama shopify-additional-items[index][attribute]. Dua syarat:
- Index mulai dari 1 (index 0 buat produk utama).
- Kalau mau nyarangin item tambahan di bawah produk utama, set
parent_idke ID varian produk utama biar di cart mereka terhubung (nested cart lines).
<input type="hidden" name="shopify-additional-items[1][id]" value="20">
<input type="hidden" name="shopify-additional-items[1][parent_id]" value="25">Biasanya ini ditambahin lewat JavaScript waktu pembeli nyentang “Tambahkan garansi”, bukan statis.
3. Properti per Item
shopify-additional-items[i][id](wajib), ID varian item tambahan.shopify-additional-items[i][quantity](opsional), jumlahnya, default 1.shopify-additional-items[i][parent_id](opsional), ID varian induk buat nyarangin.shopify-additional-items[i][properties](opsional), line item properties item tambahan.shopify-additional-items[i][selling_plan](opsional), ID selling plan (langganan, dari 44 Subscriptions) buat item tambahan.
Contoh garansi bersarang dengan properti:
{% form 'product', product %}
<input type="hidden" name="id" value="{{ product.selected_or_first_available_variant.id }}">
<label>
<input type="checkbox" id="add-warranty">
Add 2-year warranty
</label>
<div id="warranty-fields" hidden>
<input type="hidden" name="shopify-additional-items[1][id]" value="{{ warranty_variant_id }}" disabled>
<input type="hidden" name="shopify-additional-items[1][parent_id]" value="{{ product.selected_or_first_available_variant.id }}" disabled>
<input type="hidden" name="shopify-additional-items[1][properties][Covers]" value="{{ product.title | escape }}" disabled>
</div>
<input type="submit" value="Add to cart">
{{ form | payment_button }}
{% endform %}Input-nya diset disabled dulu biar gak ikut terkirim, dan JavaScript ngaktifinnya waktu checkbox dicentang. Ingat parent_id harus ikut diupdate waktu varian utama berubah.
Ringkasan
- Accelerated checkout bisa dipasang di mana aja (produk, cart, cart drawer), sebaiknya dekat tombol checkout biasa. Dirender ulang lewat Section Rendering API, render pertama lebih lambat.
- Produk:
{{ form | payment_button }}di dalamform 'product'setelah Add to cart, Shopify milih satu tombol paling cocok, ngikutin inputname="id". Sembunyiin di produk gift card. - Cart:
{% if additional_checkout_buttons %}{{ content_for_additional_checkout_buttons }}{% endif %}. - Shadow DOM tertutup: styling cuma lewat CSS custom property
--shopify-accelerated-checkout-*(tinggi 25–55px, radius, shadow, skeleton, alignment, gap) dishopify-accelerated-checkoutdanshopify-accelerated-checkout-cart. - Layout cart horizontal → vertikal otomatis kalau sempit, atau paksa vertikal dengan class
additional-checkout-buttons--vertical. - Pelacakan klik lewat elemen wallet (
shop-pay-wallet-button,shopify-apple-pay-button, dan seterusnya) dengan event delegation, bukan markup dalamnya. - Banyak produk: hidden input
shopify-additional-items[i][id|quantity|parent_id|properties|selling_plan]mulai index 1,parent_idbuat nyarangin, cuma online store, Buy with Prime ngabaikannya.
Bab selanjutnya kita bahas langganan: selling plan dan selling plan group, pemilih opsi pembelian (sekali beli vs langganan), harga langganan, cara ngirim selling_plan di form, tampilan di cart, dan pedoman UX-nya.