WP-Rocket — uyumluluk notları

WP-Rocket — uyumluluk notları

> Son güncelleme: 2026-05-06 (Hafta 17) > Durum: Sadece konfigürasyon — kod değişikliği gerekmez. WP-Rocket varsayılan ayarlarla 3DS callback ve REST endpoint'lerini cache'lemeye çalıştığında ödeme akışı kırılabilir; aşağıdaki üç ayar bu sorunu önler.

WP-Rocket, premium WordPress cache eklentisi (~1M+ aktif kullanıcı). Türkiye'deki çoğu yüksek-trafikli WC mağazası kullanıyor. POS Entegratör'ün üç tür endpoint'i WP-Rocket'ın varsayılan cache mantığıyla çakışabilir:

  1. PSP/banka callback REST endpoint'leri — POST request, dinamik cevap; cache'lenirse callback aynı response'u döndürür ve sipariş statüsü güncellenmez.
  2. 3DS köprü sayfası — query-string driven HTML, geçici token ile; cache her token'a göre ayrı sayfa üretmemeli.
  3. Blocks Checkout JSassets/js/blocks/invum-payment-method.js minify edildiğinde wp.element.useState hooks bozulabilir.

1. URL'leri cache'den hariç tut

WP-Rocket Ayarları → Cache → Hiçbir Zaman Cache'leme (URLs) ekranına aşağıdaki path'leri ekle:

/wp-json/invum-pos/v1/(.*)
/(.*)?(.*)invum_pos_3ds=(.*)
/wp-admin/admin-post.php?action=invum_pos_(.*)

Açıklamalar:

| Path | Neden | |——|——-| | /wp-json/invum-pos/v1/ | iyzico/PayTR/Param/NestPay callback REST endpoint'leri. Hepsi POST, cache'lenmemeli. | | ?invum_pos_3ds=<token> | Pos3DSBridge::issue() ile üretilen 3DS challenge sayfası. Token tek kullanımlık + transient bağımlı; cache her token'da yeni response üretmeli. | | /wp-admin/admin-post.php?action=invum_pos_ | License activate/deactivate, vault add/delete, smart-rule form submit, POS hesabı kaydet/sil — hepsi admin-post.php üzerinden. |

WP-Rocket'in regex desteği için path'leri Hiçbir Zaman Cache'leme (URLs) alanında regex modunda girdiğinden emin ol (alanın yanında Regex'i etkinleştir toggle'ı vardır).

2. Cookie'leri cache'den hariç tut (opsiyonel)

WC oturum cookie'si (wp_woocommerce_session_*) zaten WP-Rocket'ın varsayılan exclude listesinde. Ek bir şey gerekmez — ama özel bir tema/eklenti invum_pos_3ds_session gibi cookie ekliyorsa onu da exclude et.

3. JS/CSS minify ve birleştirme istisnaları

WP-Rocket Ayarları → Dosya Optimizasyonu → JavaScript sekmesinde:

"JavaScript dosyalarını birleştir" (Combine JS) açıksa:

Hariç tutulan JS dosyaları alanına ekle:

/wp-includes/js/dist/element.min.js
/wp-content/plugins/invum-pos-core/assets/js/blocks/invum-payment-method.js

Sebep: wp.element (wp-element script handle) WC Blocks'un saved-card React subcomponent'i için olmazsa olmaz. Combine JS, wp-element dependency chain'ini bozarsa wp.element.useState is not a function hatası alınır.

"JavaScript ertelemesi" (Defer JS) açıksa:

Hariç tutulan JS dosyaları alanına ekle:

/wp-content/plugins/invum-pos-core/assets/js/blocks/invum-payment-method.js

Defer modunda script'imiz wc-blocks-registry global'i hazır olmadan çalışmaya başlayabilir.

4. Database optimization riski

WP-Rocket'ın Veritabanı → Geçici Veri (Transients) Temizle seçeneği aktif ise, 3DS bridge transient'larını da silebilir — kullanıcı 3DS challenge'ında "expired" hatası görür.

Çözümler:

  • Bu seçeneği kapat. (En güvenli — transient cleanup görece az değer üretir.)
  • Veya wp_options tablosunda _transient_timeout_invum_pos_3ds_% ile başlayan satırları manuel exclude için bir hook yazılabilir (advanced — ileri seviye yapılandırma).

5. Doğrulama smoke testi

Yapılandırma sonrası:

  1. Cache temizle → WP-Rocket toolbar → "Tüm cache'i temizle".
  2. Test sandbox checkout — bir test siparişle iyzico/PayTR/Param/NestPay'i denemek için. Çalıştığını gör.
  3. Browser DevTools → Network sekmesi ile callback POST request'inin HTTP 200 + dinamik cevap döndüğünü doğrula. Response header'da X-Powered-By veya Cache-Control no-cache olmalı.
  4. Saved-card radio picker Blocks Checkout'ta render olmalı; console'da wp.element hatası olmamalı.

6. Bilinen sorunlar

| Sorun | Çözüm | |——-|——-| | Callback'ten "Order not found" hatası geliyor | Callback URL cache'lenmiş. Adım 1'i kontrol et. | | 3DS sayfası boş geliyor ya da "Bridge expired" | Adım 1 (3DS query exclude) yapılmamış veya transient temizlik aktif (Adım 4). | | Blocks checkout'ta wp.element undefined console hatası | Adım 3 (Combine JS exclude) yapılmamış. | | Saved-card seçimi "Place Order" sırasında 0 gönderiyor | Defer JS exclude eksik (Adım 3). |


Not: WP-Rocket-yerine başka bir cache eklentisi (W3 Total Cache, LiteSpeed Cache, WP Super Cache vb.) kullanıyorsan aynı endpoint pattern'lerini onun cache exclude bölümüne ekle. Path'ler aynı:

  • /wp-json/invum-pos/v1/*
  • ?invum_pos_3ds=
  • /wp-admin/admin-post.php?action=invum_pos_*
Alışveriş Sepeti