Ana içeriğe geç

MHM Rentiva v4.27.4–v4.27.6: Migration Şerit Mimarisi, Lisans Slug İletimi, WordPress.org Cilası

· 4 dakikalık okuma
MaxHandMade
Maintainer

2026-04-23'te art arda yayımlanan üç patch sürümünü kapsayan retrospektif bir yazı: kritik migration mimarisi düzeltmesi (v4.27.4), ürün bazlı lisans bağlama uyumu (v4.27.5) ve WordPress.org gönderim hazırlığı (v4.27.6). v4.30.x güvenlik sprint'inden sonra geriye dönük olarak yayınlanıyor.

6.0.0 öncesinde yazıldı

Bu yazı, 6.0.0'dan önce çıkmış bir sürümün kaydıdır; 6.0.0 eklentinin içerik tiplerini, taksonomilerini, ayarlarını, meta anahtarlarını ve hook'larını yeniden adlandırdı. Aşağıdaki tanımlayıcılar o sürümlerin gerçekten kullandığı adlardır ve bilerek öyle bırakılmıştır. Güncel adlar ve dönüşüm tablosu için 6.0.7 sürüm yazısına bakın.

v4.27.4 — Migration Şerit Mimarisi Düzeltmesi (KRİTİK)

v4.27.1 (i18n locale leak) ve v4.27.2 (Settings Testing kirlenme) içinde gelen veri-temizlik migrasyonları güncellenmiş sitelerde aslında hiç çalışmıyordu — v4.27.0 hazırlığı sırasında temizlenmiş bir gerileme migration tetikleyicisini sessizce bozmuştu.

Kök neden

plugins_loaded migration callback'i tek bir kısa devre kullanıyordu:

if ( $stored_version === MHM_RENTIVA_VERSION ) {
return; // TÜM migrasyonları atla
}

Ancak mhm_rentiva_single_site_activation() (her ZIP-replace güncelleme yolunda plugins_loaded'dan ÖNCE çalışır) yeni sürümü zaten option'a damgalamış oluyordu. plugins_loaded çalıştığında $stored === $current zaten true → tüm flag-kapılı temizlikler sonsuza dek atlanıyordu.

mhmrentiva.com canlıda kanıt: Brand Name 1 olarak görünüyordu, döviz istatistikleri 0,00 ₺ yerine 0,00 1 render oluyordu (çünkü v4.27.2 kirlenme migrasyonu hiçbir zaman çalışmadı).

Fix — iki-şerit mimarisi

plugins_loaded callback'i iki bağımsız şeride bölündü:

  • Şerit A (şema drift, sürüm-kapılı): sadece $stored !== $current olduğunda çalışır. Aynı sürümün birden fazla yüklemesi arası idempotent.
  • Şerit B (bayrak-kapılı veri temizlikleri): her istekte çalışır, ancak her migrasyonun kendi mhm_rentiva_<flag> opsiyonu vardır ve başarılı çalışma sonrası flip eder. Gerçekten idempotent.

Her iki şerit de kendi hata yalıtımına sahiptir; B'deki bir hata A'yı engellemez ya da tersine.

Test kapsamı

tests/Migration/MigrationLaneIndependenceTest.php — bölünmeyi koruyan 3 yeni test, 8 assertion.

Ampirik doğrulama

Deploy sonrası mhmrentiva.com'un Chrome DevTools MCP ile tarayıcı turu: 0 yinelenen uyarı, istatistikler 0,00 ₺ (U+20BA), Brand Name "MHM Rentiva". 11 admin sekmesinde manuel tek seferlik Reset to Defaults ile migrasyonların çalışmadığı dönemden kalan artık state temizlendi.

v4.27.5 — Lisans İstemcisi Ürün-Slug İletimi

mhm-license-server v1.8.0+ ile uyumlu — bu sürüm ürün-bazlı lisans bağlama getirdi. v4.27.5 öncesinde bir müşteri ucuz MHM Currency Switcher Aylık anahtarı satın alıp Rentiva Pro'yu aktive etmek için kullanabiliyordu — sunucunun lisansın belirli bir ürün için verildiğini doğrulayacak yolu yoktu.

Değişiklik

LicenseManager::activate() ve validate() istek gövdeleri artık product_slug => 'mhm-rentiva' içeriyor. Sunucu bunu lisans satırının saklı slug'ı ile karşılaştırır ve uyuşmazlıkları product_mismatch hatasıyla reddeder.

Bonus düzeltme

Ek Hizmetler admin sayfası iki Dokümantasyon düğmesi gösteriyordu — küresel all_admin_notices docs hook'u + sayfanın kendi başlığı, ikisi de yangınlandı. Hook artık vehicle_addon ekranını atlıyor; sayfa başlığının düğmesi tek kaynak.

v4.27.6 — WordPress.org Gönderim Cilası

WordPress.org eklenti dizini gönderimi için Plugin Check (PCP) uyumu: 1 ERROR + 115 WARNING → 0 ERROR + 61 WARNING. Kalan uyarılar Plugin Check'in projenin phpcs.xml önek yapılandırmasını okumamasından kaynaklanan yanlış pozitiflerin tümü.

Somut düzeltmeler

  • Demo görsel içe aktarıcısında unlink()wp_delete_file() (tek gerçek ERROR).
  • Projenin kuralları zaten dışlayan uyarılar için gerekçeli phpcs:ignore yorumları (denetim amaçlı error_log() çağrıları, Plugin Check'in tanımayı reddettiği mhm_rentiva_ öneki taşıyan hook'lar, kabul edilen meta_query / post__not_in performans takasları, çekirdek-kontrollü tablo adları $wpdb->prepare() üzerinden bağlanmış ledger sorguları).
  • Plugin Check'in önek konvansiyonuna uyacak şekilde $pending_messages template-scope değişkeni $mhm_rentiva_pending_messages'a yeniden adlandırıldı.
  • readme.txt Changelog bölümü WP.org'un 5000 karakter sınırına uyacak şekilde kısaltıldı; eski sürümler GitHub'a bağlandı.
  • changelog-tr.json v4.27.5 backfill + yeni v4.27.6 girişi.

Fonksiyonel değişiklik yok

740/740 PHPUnit hâlâ geçiyor. PHPCS temiz. Eklenti aynı şekilde davranıyor — sadece Plugin Check gürültüsü azaltıldı.

✅ Üçü için doğrulama

Kontrolv4.27.4v4.27.5v4.27.6
PHPUnit740/740, 2642 assertion, 6 skippeddeğişmedideğişmedi
PHPCS0 / 00 / 00 / 0
Plugin Check ERRORdeğişmedideğişmedi1 → 0

🎓 Yakalanan dersler (hafıza)

  • feedback_migration_lane_architecture.md — activation hook'ları sürümü plugins_loaded'dan önce damgaladığında, sürüm kapısı tüm bayrak-kapılı migrasyonları kırar. Sürüm-drift ve veri-temizleme şeritlerini her zaman ayır.
  • feedback_empirical_dom_verification.md — Chrome DevTools MCP ile DOM düzeyinde doğrulama, %100 PHPUnit + 0 PHPCS'in mutlu mutlu yayınlayacağı runtime DB-state bug'larını yakalamanın tek yolu.

🔜 Sıradaki

v4.27.x şemsiyesi burada kapandı. Sıradaki büyük v4.28.0 idi (Popüler Rotalar) — ancak çapraz ürün saldırı yüzeyi güvenlik denetimi yol haritasını Lisans Güvenlik Sertleştirme sprint'ine (v4.30.x) yeniden öncelikledi, 2026-04-24/25'te yayımlandı.


GitHub Sürümleri: v4.27.4 · v4.27.5 · v4.27.6