WC Korkmaz Contract 2.4.11 — checkout konumu ve çeviri düzeltmeleri

25 Ekim 2026 tarihinde düzeltmeler doğrudan SVN çalışma kopyasının `trunk` dizinine uygulandı. Geçmiş sürümlerin bulunduğu `tags` dizini değiştirilmedi.

Konum hatasının nedenleri ve çözümü

- `build/js/block/block.json` içindeki `lock.remove: true`, WooCommerce'in `registerCheckoutBlock()` mekanizmasında bloğu zorunlu yapıyor. WooCommerce, kayıtlı HTML içinde bulamadığı zorunlu blokları ilgili alanın sonuna ekliyor. Bu davranış sipariş butonunun altında görünen onay kutusunu açıklıyor.
- `get_default_contract_checkout_block()` yalnızca `<!-- wp:irem/ozel-sozlesmeler /-->` ekliyordu; PHP kaydında render callback bulunmuyordu. Dolayısıyla bu blok ön yüzde kendisini tanıtacak bir HTML elemanı üretmiyordu. Eski editör çıktısında da açık `data-block-name` bulunmuyordu; WooCommerce'in otomatik işaretleme davranışına bağımlıydı.
- `register_contract_block_type()` artık `render_contract_checkout_block()` callback'ini kaydediyor. Hem eski boş bloklar hem önceden kaydedilmiş statik bloklar, kaydedildikleri konumda `data-block-name="irem/ozel-sozlesmeler"` taşıyan bir kapsayıcı üretiyor. Ön yüz bileşeni yine resmi `registerCheckoutBlock()` API'si tarafından render ediliyor.
- Editörün `save` çıktısı da aynı işareti taşıyor. Eski `<div><p></p></div>` kayıtları için `deprecated` tanımı eklendi.
- `normalize_checkout_fields_inner_blocks()` mevcut sözleşme bloklarının sırasını artık değiştirmiyor. Yalnızca eksik bloğu Actions önüne ekliyor. Yeni bloklarda `lock.move: false` ile editörde taşıma mümkün, `lock.remove: true` ile mevcut kaldırma koruması devam ediyor.
- Önceki otomatik ekleme yalnızca `innerBlocks` dizisini değiştiriyordu. WordPress ise çocukları `innerContent` içindeki `null` yuvaları üzerinden serileştiriyor. Eski kod üzerinde yapılan karşılaştırmada Actions bloğunun kayıttan düşebildiği doğrulandı. Ekleme artık bu yuvaları da güncelliyor; boş alan kapsayıcıları, mevcut Terms ve Actions blokları korunuyor.
- Onay kutusunu taşımak için DOM işlemi veya CSS `order` eklenmedi. Modal ve mevcut sözleşme alanlarını okumak için kullanılan DOM işlemleri konumlandırma amacı taşımıyor.

Çeviri hatasının nedenleri ve çözümü

- Eklenti başlığı, PHP çeviri çağrıları, `block.json` ve `wp_set_script_translations()` çağrılarındaki text domain `wc-korkmaz-contract` ile tutarlıydı. Frontend handle'ı da doğruydu: `irem-block-frontend`.
- Asıl JavaScript yükleme hatası `plugins_url('../build/...', __FILE__)` çağrısıydı. Kaydedilen URL `includes/../build/irem-block-frontend.js` içeriyordu. WordPress çeviri dosyasının hash'ini bu yoldan hesaplıyor; mevcut JSON ise `build/irem-block-frontend.js` yolunun hash'ini taşıyordu. Tarayıcının URL'yi normalleştirmesi WordPress'in PHP tarafındaki bu eşleşmesini düzeltmiyordu.
- Script ve stil URL'leri eklentinin ana dosyası esas alınarak `build/...` biçiminde kaydediliyor. Mevcut frontend JSON dosyasının adı ve handle'lar korunuyor.
- Editördeki sabit İngilizce varsayılanlar `@wordpress/i18n` çağrılarına dönüştürüldü. Editör için `wc-korkmaz-contract-tr_TR-ef570dbd0e75f672ac902ca16ab6aa8c.json` üretildi. PO/POT referansları güncellendi, MO yeniden derlendi.
- `load_plugin_korkmaz_contract()` önceden yüklenmiş çevirileri kaldırıp paket içindeki MO dosyasını zorla yüklüyordu. Bu davranış kaldırıldı; standart `load_plugin_textdomain()` kaydıyla WordPress dil paketleri ve Loco tarafından sağlanan çeviriler korunuyor.
- Kullanıcının kayıtlı özel etiketleri, sözleşme metinleri ve diğer ayarları değiştirilmedi. Türkçe çalışma zamanında sabitlenmedi; farklı diller ve İngilizce varsayılanlar desteklenmeye devam ediyor.

Doğrulama ve derleme

- Gerçek bloklara ait kaynak dosyalar ve çalışan bir derleme yapılandırması depoda yoktu. `assets/js/custom-checkout-block.js` ayrı, kullanılmayan örnek bir alandı; asıl scriptler `build` altındaydı. Düzeltilen blokların bakımı için kaynak dosyalar ve kilitli bağımlılıklarla tekrar üretilebilir bir derleme eklendi.
- Kabul durumu `extensions.irem.sozlesme_onay` üzerinden aynı adlarla iletiliyor. Zorunluluk açıkken onaysız durum WooCommerce validation store üzerinden hata oluşturuyor; kabul geri alınınca hata yeniden etkinleşiyor.
- Eski effect'in hata nesnesine bağımlılığı kaldırıldı. Bu bağımlılık, WooCommerce gönderimde hatayı görünür yaptığında yeniden gizli hata oluşturabiliyordu. Unmount sırasında doğrulama temizleniyor.
- Store API'deki `update_order_meta_from_request()` sunucu doğrulaması korundu; dizi gibi geçersiz kabul değerleri açıkça reddediliyor. Klasik ödeme nonce ve kabul kontrolleri korundu. Mevcut zorunluluk ayarı her iki tarafta aynı şekilde dikkate alınıyor.
- `wc-blocks-data-store` script bağımlılığı asset dosyasına eklendi. Önceki bundle bu globali kullanmasına rağmen bağımlılık listesinde belirtmiyordu. JavaScript asset sürümleri çıktı içeriklerinden yeniden üretildi.

Çalıştırılan kontroller

- `npm run build`: başarılı.
- `npm test`: 6 test başarılı. Derlenmiş frontend/editör dosyaları React 18 ile çalıştırıldı. Kabul/kabulü geri alma, hata görünürlüğü, özel etiketler, Türkçe/İngilizce/örnek farklı dil, eski editör kaydı ve sözleşme yer tutucuları kontrol edildi. WooCommerce store ve bileşenleri test dublörleriyle temsil edildi.
- `php tests/php-regression.php /path/to/wordpress`: 42 kontrol başarılı. Testte yerel WordPress 6.9'un gerçek parser, serializer, hook, MO okuma ve script çeviri yükleme fonksiyonları kullanıldı; veritabanı ve WooCommerce sipariş/request nesneleri test dublörleriydi.
- PHP testleri eski script URL'siyle çeviri hatasını yeniden üretti ve yeni URL ile JSON'un bulunduğunu doğruladı. Loco uyumlu standart dosya filtresi ve önceden yüklenmiş özel PHP kataloğunun korunması da kontrol edildi.
- PHP 8.2.30 ve PHP 8.5.9 ile 26 PHP dosyasında syntax kontrolü: hata yok.
- Derlenmiş JavaScript, build scripti ve test dosyasında `node --check`: başarılı. JSX kaynakları derleyici tarafından işlendi.
- Çıktıların hash'leri asset sürümleriyle, çeviri JSON dosyalarının hash'leri script yollarıyla eşleşiyor.
- `wp i18n make-json ... --no-purge`: iki JSON üretildi. `wp i18n make-mo ...`: MO üretildi. Çeviri metinleri korunarak yalnızca gerekli kaynak referansları eklendi.

Değiştirilen mevcut dosyalar

- `public/class-korkmaz_contract-public.php`: blok render callback'i, mevcut sırayı koruyan otomatik ekleme, serileştirme yuvaları ve kabul değeri tür kontrolü.
- `includes/korkmaz-blocks-integration.php`: normalleştirilmiş script/stil URL'leri.
- `includes/class-korkmaz_contract-i18n.php`: WordPress/Loco çeviri önceliğinin korunması.
- `build/irem-block-frontend.js`, `build/irem-block-frontend.asset.php`, `build/irem-block.js`, `build/irem-block.asset.php`: yeniden üretilen dağıtım dosyaları.
- `build/js/block/block.json`: taşıma kilidi varsayılanı.
- `languages/wc-korkmaz-contract-tr_TR.po`, `languages/wc-korkmaz-contract.pot`, `languages/wc-korkmaz-contract-tr_TR.mo`: editör referansları ve derlenmiş katalog.

Eklenen dosyalar

- `assets/js/blocks/block.json`, `assets/js/blocks/frontend.jsx`, `assets/js/blocks/editor.jsx`, `assets/js/blocks/contracts.js`: blok kaynakları ve mevcut sözleşme yer tutucuları.
- `scripts/build.mjs`, `package.json`, `package-lock.json`, `.gitignore`: derleme ve geliştirme bağımlılıkları.
- `languages/wc-korkmaz-contract-tr_TR-ef570dbd0e75f672ac902ca16ab6aa8c.json`: editör çevirileri.
- `tests/blocks.test.cjs`, `tests/php-regression.php`: regresyon testleri.
- `DUZELTME-RAPORU.md`: bu rapor.

Yeniden derlemek için `trunk` içinde `npm ci`, ardından `npm run build` ve `npm test` çalıştırılabilir. PHP testi ayrıca kurulu bir WordPress çekirdek dizini ister. Çeviriler değişirse WP-CLI `i18n make-json --no-purge` ve `i18n make-mo` komutlarıyla kataloglar yenilenebilir.

Test sınırları

İlk inceleme sırasında yerel `wc-korkmaz-contract.local` sitesi HTTP bağlantısı kabul etmiyordu; kurulu WooCommerce 10.4.3 ve eklenti bağlantısı eski `tags/2.2.1` dizinine yöneliyordu. Bu site, veritabanı ve geçmiş sürüm değiştirilmedi. Sonraki uyumluluk aşamasında ayrı bir geçici WordPress 7.1.3 + WooCommerce 11.2.1 kurulumu oluşturularak gerçek Chromium tarayıcısında blok/klasik ödeme, editörde taşıma/kaydetme, modal, yerel havale siparişi ve PDF indirme testleri gerçekleştirildi. Bu aşamada bulunan script bağımlılığı ve eski boş blok doğrulama sorunları da düzeltildi. Güncel sonuçlar ve sınırlar `UYUMLULUK-RAPORU.md` dosyasındadır. Canlı Loco kurulumu, gerçek kredi kartı sağlayıcısı, fiziksel kargo ve harici e-posta teslimatı doğrudan test edilmedi.

API incelemesinde kullanılan resmi kaynaklar: [WooCommerce checkout blok entegrasyonu](https://developer.woocommerce.com/2023/08/07/extending-the-woocommerce-checkout-block-to-add-custom-shipping-options/), [registerCheckoutBlock kaynak kodu](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/client/blocks/packages/public-api/blocks-checkout/blocks-registry/register-checkout-block.ts), [WooCommerce ön yüz blok eşleme ve zorunlu blok davranışı](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/client/blocks/assets/js/utils/render-parent-block.tsx), [WordPress plugins_url()](https://developer.wordpress.org/reference/functions/plugins_url/), [WordPress load_script_textdomain()](https://developer.wordpress.org/reference/functions/load_script_textdomain/).
