Checkout UI extensions mı, Shopify Functions mı?
Kısa yanıt
Checkout UI extensions ödeme sayfasına arayüz ekler: alanlar, bannerlar, mesajlar. Bunlar Shopify’ın bileşenleriyle kurulur; mağaza sahibi onları ödeme sayfası düzenleyicisinde blok hedeflerine yerleştirir. Shopify Functions ise ödeme sayfasının mantığını Shopify’ın sunucularında değiştirir: indirimler, teslimat ve ödeme seçenekleri, doğrulama. API sürümü 2026-07’den beri bir UI extension’dan ödemeyi engellemek kullanımdan kaldırıldı; kurallar bir Cart and Checkout Validation Function ile uygulanmalı. Bilgi, kargo ve ödeme adımlarındaki UI extension’lar Shopify Plus gerektirir.
- Checkout UI extensions yalıtılmış bir sandbox’ta çalışır ve yalnızca Shopify’ın sunduğu UI bileşenlerini ve API’leri kullanabilir.
- Shopify Functions, Shopify’ın sunucularında çalışır ve yalnızca girdi sorgularının istediği veriyi görür.
- Bilgi, kargo ve ödeme adımlarındaki Checkout UI extensions yalnızca Shopify Plus’ta kullanılabilir.
- Mağaza sahipleri ödeme sayfası ve hesaplar düzenleyicisinde aynı blok hedefine en fazla üç extension ekleyebilir.
- 2026-07 sürümünden beri useBuyerJourneyIntercept ve block_progress yetkisi, doğrulama Function’ları lehine kullanımdan kaldırıldı.
İkisi de ödeme sayfası (checkout) genişletilebilirliğinin parçası ve ikisi de genellikle bir uygulamanın içinde gelir; bu yüzden sık karıştırılır. Fark basit: Checkout UI extension müşterinin gördüğünü değiştirir; Shopify Function ise ödeme sayfasının ne yaptığını değiştirir. Teslimat tarihi seçici bir arayüzdür. Belirli bir tutarın üzerindeki siparişlerde kapıda ödemeyi gizlemek ise mantıktır. Gerçek gereksinimlerin çoğu ikisinden de birer tane ister.
Yan yana
| Checkout UI extension | Shopify Function | |
|---|---|---|
| Neyi değiştirir | Müşterinin gördüğünü ve girdiğini | Fiyatları, seçenekleri ve ödemenin devam edip edemeyeceğini |
| Nerede çalışır | Ödeme sayfasından ve diğer extension’lardan ayrı, yalıtılmış bir sandbox’ta | Shopify’ın sunucularında, ödeme hesaplamasının bir parçası olarak |
| Neyle kurulur | Extension hedef API’leri ve Shopify’ın Polaris web bileşenleri; serbest HTML ya da CSS yok | Derlenmiş bir modül (Shopify Rust’ı önerir) ve bir GraphQL girdi sorgusu |
| Örnekler | Özel bir alan, ek satış bloğu, güven bannerı, Teşekkürler sayfasında bir mesaj | Kademeli indirim, bir teslimat ya da ödeme seçeneğini gizlemek, bir sınırı aşan siparişi engellemek |
| Yerleşim | Mağaza sahibi blok hedeflerini ödeme sayfası ve hesaplar düzenleyicisinde yerleştirir; konum başına en fazla üç | Mağaza bazında etkinleştirilir; görsel bir yerleşimi yoktur |
| Plan | Bilgi, kargo ve ödeme adımları: yalnızca Plus. Teşekkürler ve Sipariş durumu: Basic ve üzeri | App Store uygulamaları: her plan. Özel uygulamalar: yalnızca Plus |
| Temel sınırlar | Yalnızca sunulan bileşenler ve API’ler; hassas ödeme bilgilerine erişim yok | 200 satıra kadar sepetlerde 256 kB binary, 11 milyon komut ve 128 kB girdi; çoğu API için tür başına en fazla 25 aktif |
Bir kuralı uygulamak: arayüzü değil, Function’ı kullanın
Yakın zamana kadar bir Checkout UI extension, block_progress yetkisini tanımlayıp useBuyerJourneyIntercept çağırarak müşterinin bir sonraki adıma geçmesini durdurabiliyordu. Shopify ikisini de API sürümü 2026-07’den itibaren kullanımdan kaldırdı (değişiklik günlüğü, 2 Temmuz 2026) ve gelecekteki bir sürümde tamamen çıkarılacaklarını söylüyor.
Shopify’ın gösterdiği geçiş yolu net. Bir iş kuralını uygulamak için Cart and Checkout Validation Function kullanın; bu Function sunucu tarafında çalışır ve kuralı hızlı ödeme cüzdanları ile agentic checkout dahil tüm ödeme yüzeylerinde tutarlı biçimde uygular. Bir indirim kodunu özel bir mesajla reddetmek için Discount Function API’yi kullanın. Eski intercept ayrıca mağaza sahibinin extension’a bu yetkiyi vermesine bağlıydı ve arayüzde çalışıyordu; bir doğrulama Function’ı ise etkin olduğu sürece Shopify’ın sunucularında uygulanır. Bkz. ödeme sayfası doğrulamasının neleri engelleyebildiği.
Mevcut bir uygulama ödemeyi bir extension’dan engelliyorsa, doğrulama Function’ına geçişini API kaldırıldığında değil, şimdiden planlayın.
Bir intercept’i doğrulama Function’ına taşımak genellikle kolaydır; çünkü kural aynı kalır, yalnızca yeri değişir:
- Intercept’in kontrol ettiği her koşulu ve gösterdiği mesajı yazın.
- Her koşulun arkasındaki verinin doğrulama Function’ının girdi sorgusunda bulunduğunu doğrulayın: sepet satırları, varyant, müşteri ya da mağaza metafield’ları (meta alanları) veya doğrulamanın kendi ayarları.
- Function’ı aynı mesajları döndürecek şekilde kurun; mümkünse ilgili alanı, değilse tüm sepeti hedefleyin.
- Extension’ı, kuralı müşteri ona takılmadan önce açıklamak gibi görsel işler için tutun ve
block_progressyetkisini ondan kaldırın.
Plan sınırları farklı yerlerde
İki araç farklı yerlerden sınırlanır; bu da Plus altındaki bir mağazanın neler yapabileceğini değiştirir:
- UI extension’lar, nerede göründüklerine göre sınırlanır. Bilgi, kargo ve ödeme adımlarındaki extension’lar Plus gerektirir. Teşekkürler ve Sipariş durumu sayfalarında ve müşteri hesabı sayfalarında, UI extension içeren uygulamalar Basic ve üzerinde çalışır.
- Function’lar, nasıl dağıtıldıklarına göre sınırlanır. Her plandaki mağaza Function içeren App Store uygulamalarını kullanabilir; Function içeren özel uygulamaları ise yalnızca Plus mağazaları kullanabilir. Ödeme koşulları gibi birkaç özellik her durumda Plus gerektirir.
Pratikte Plus olmayan bir mağaza, sepeti doğrulayan ya da bir ödeme yöntemini gizleyen bir App Store uygulaması kullanabilir; ama hiçbir uygulamayla kargo adımına özel bir alan ekleyemez.
İkisine birden ihtiyaç duyduğunuzda
Pek çok gereksinim ikisini birleştirir. Extension bilgiyi toplar ya da açıklar; Function karar verir. Tipik ikililer:
- Bir extension müşterinin vermesi gereken bilgiyi toplar; zorunlu değer eksik ya da geçersizse bir doğrulama Function’ı ödemeyi engeller.
- Bir Function belirli sepetlerde bir ödeme yöntemini gizler; bir extension da müşteri tahmin etmek zorunda kalmasın diye nedenini açıklar.
- Bir indirim Function’ı kademeli fiyat uygular; bir extension sepetin bir sonraki kademeye ne kadar uzak olduğunu gösterir.
Pratik kural: bir şeyi uygulatmak için asla arayüze güvenmeyin. Bir siparişin geçmemesi gerekiyorsa onu durduran Function’dır; extension ise nedenini anlaşılır kılmak için oradadır.
Sık gereksinimler ve karşılıkları
| Gereksinim | Ne kurulmalı |
|---|---|
| Hediye mesajı ya da teslimat talimatı istemek | UI extension |
| Kargo adımında teslimat süreleriyle ilgili bir banner göstermek | UI extension (bir ödeme adımının içinde olduğu için Plus) |
| Satın alma sonrasına bir anket eklemek | Teşekkürler sayfasında UI extension (Basic ve üzeri) |
| Sepette bir koleksiyondan üç ürün olduğunda %10 indirim vermek | Discount Function |
| Büyük boy ürünlerde hızlı teslimatı gizlemek | Delivery Customization Function |
| Belirli sepetlerde bir ödeme yöntemini gizlemek | Payment Customization Function |
| Ürün başına adet sınırını aşan siparişleri reddetmek | Cart and Checkout Validation Function |
| Bir ödeme yönteminin neden görünmediğini göstermek | İkisi birden: Function gizler, extension açıklar |
| Ayrı parçalar hâlinde gönderilen bir paket satmak | Cart Transform Function |
Seçim yapmadan önce bilmeye değer iki operasyonel sınır var. Discount, Delivery Customization, Payment Customization ve Cart and Checkout Validation dahil çoğu Function API’sinde bir mağaza, tüm uygulamaları genelinde her türden en fazla 25 function etkinleştirebilir. Arayüz tarafında ise ödeme sayfası düzenleyicisindeki tek bir blok konumu en fazla üç extension alır. Çok sayıda ödeme sayfası uygulaması olan mağazalar bu sınırlardan birine ulaşabilir.
Function’lar ayrıca sabit kaynak sınırlarıyla çalışır: 256 kB derlenmiş binary, 10.000 kB doğrusal bellek ve 200 satıra kadar sepetlerde 11 milyon komut, 128 kB girdi ve 20 kB çıktı. Büyük arama tabloları gerektiren bir kuralın bu sınırlara sığması gerekir; verisini kod yerine metafield’larda tutmanın bir nedeni de budur.
Adım adım seçim
- Değişikliği tek bir cümleyle anlatın. Cümle “göster”, “sor” ya da “bildir” diye başlıyorsa arayüzdür. “Ücretlendir”, “gizle”, “yeniden sırala” ya da “engelle” diye başlıyorsa mantıktır.
- Arayüz için: hangi ödeme adımına ait olduğunu kontrol edin. Bilgi, kargo ya da ödeme adımı Plus demektir.
- Mantık için: ilgili Function API’sini (Discount, Delivery Customization, Payment Customization, Cart and Checkout Validation, Cart Transform) bulun ve bir App Store uygulamasının bunu zaten sunup sunmadığına bakın.
- Mantığın mutlaka uygulanması gerekiyorsa, işin içinde bir extension olsa bile onu bir Function’a koyun.
- Canlı mağazaya kurmadan önce ikisini de gerçekçi sepetlerle bir geliştirme mağazasında kurup test edin.
Lintel’in rolü
Lintel iki yarıyı da kurar: mantık için Shopify Functions, arayüz için bir özel uygulama içinde Checkout UI extensions; hepsi planınızın izin verdiği kapsamda. Extension’larınızdan biri ödemeyi hâlâ kullanımdan kaldırılmış intercept ile engelliyorsa, o kuralı bir doğrulama Function’ına taşımak sınırları net bir iştir.
Sık sorulan sorular
- Bir Checkout UI extension ödemeyi engelleyebilir mi?
- useBuyerJourneyIntercept ve block_progress yetkisiyle engelleyebiliyordu, ancak ikisi de API sürümü 2026-07’den itibaren kullanımdan kaldırıldı. Shopify, sunucu tarafında çalışan bir Cart and Checkout Validation Function önerir.
- Checkout UI extensions Shopify Plus gerektirir mi?
- Bilgi, kargo ve ödeme adımlarında evet. Teşekkürler ve Sipariş durumu sayfalarında UI extension içeren uygulamalar Basic plan ve üzerinde çalışır.
- Bir Shopify Function ödeme sayfasına alan ekleyebilir mi?
- Hayır. Function’ların arayüzü yoktur; indirim, gizlenmiş seçenek ya da doğrulama hatası gibi işlemler döndürürler. Müşteriden bilgi almak bir UI extension’ın işidir.
Kaynaklar
- Checkout UI extensions
- Deprecating the useBuyerJourneyIntercept API on checkout UI extensions
- Buyer Journey API
- Function APIs (limitations)
- Cart and Checkout Validation Function API
- Discount Function API
- Delivery Customization Function API
- Payment Customization Function API
- About Shopify Functions (availability)
- Adding apps to your checkout
