Rentiva v4.34.0 — Popüler Transfer Rotaları Vitrini
Ana sayfanın artık VIP transfer rotaları için düzgün bir satış yüzeyi var. v4.34.0; A → B rota kartlarını (kalkış → varış, ortalama süre, mesafe, başlangıç fiyatı) gösteren [rentiva_popular_routes] shortcode + Gutenberg blok + Elementor widget üçlüsünü yayına alıyor — üç yüzey, tek kanonik renderer. Hangi rotaların görüneceğini kontrol etmek için admin tarafına yeni bir "🌟 Vitrine Koy" işaret kutusu eklendi.
Bu sürüm neden var
Rentiva'nın transfer modülü aylardır sessizce yetenekli: bayiler rota başına fiyat tanımlıyor, arama motoru uçları araç uygunluğuyla birleştiriyor, sepet hem sabit hem km bazlı fiyatlandırma yöntemlerini destekliyor. Ama ana sayfa bunlardan hiçbirini öne çıkarmıyordu. Kiralama pazaryerine gelen ziyaretçi, VIP transfer hizmetinin var olduğunu anlamak için arama formuna inmek zorundaydı — fiyatları görmek bir yana.
v4.34.0 bu boşluğu kapatıyor. Yeni bölüm landing page'de duruyor, en güçlü rotaları önce sabitliyor ve transfer müşterisinin "Rezervasyon yap"a tıklamadan önce sorduğu tek soruya cevap veriyor: ne kadar, ne süre, ne mesafe?
Sürümde neler var
[rentiva_popular_routes] — üç yüzey, tek renderer
Shortcode kanonik implementasyon. Gutenberg bloğu (mhm-rentiva/popular-routes) ve Elementor widget'ı (mhm_rentiva_popular_routes) ikisi de do_shortcode() ile shortcode'a delege ediyor — bu Rentiva'nın render parite kuralı: shortcode ile render ettiğin her şey üç yüzeyden de aynı şekilde render edilir. Drift yok, çift kod yolu yok.
Shortcode 16 attribute destekliyor:
| Attribute | Varsayılan | Amaç |
|---|---|---|
limit | 6 | Maksimum kart sayısı (Lite planlarda Mode::maxTransferRoutes() ile sınırlanır) |
columns | 3 | Masaüstü grid sütun sayısı (2/3/4) |
order | featured | featured / price_asc / price_desc / alphabetical / newest |
heading | "Popüler Rotalar" | Bölüm başlığı (i18n) |
subheading | "En çok tercih edilen VIP transfer güzergahları" | Alt başlık |
show_view_all | true | Header'da "Tümünü gör" linkini göster |
view_all_url | boş | Link hedefini override et (boşsa mhm_rentiva_popular_routes_view_all_url filtre kullanılır) |
show_duration / show_distance / show_traffic_note / show_price | true | Eleman görünürlük anahtarları |
currency_symbol | ₺ | Fiyat ön eki |
filter_origin_city | boş | ör. İstanbul |
filter_origin_type | boş | airport / train / hotel / marina / city_center |
featured_only | false | true ise yalnızca sabitlenmiş rotalar render edilir |
theme | light | light / dark |
Admin "🌟 Vitrine Koy" işaret kutusu
Transfer Rotaları admin formuna yeni bir checkbox: 🌟 Vitrine Koy (popüler rotalar bloğuna sabitle). Vitrindeki rotalar order="featured" (varsayılan) iken önce, featured_only="true" iken yalnızca render edilir. Liste tablosunda sabitlenmiş satırların yanında "🌟 Vitrin" rozeti görünür — admin gözle hangi rotaların ana sayfaya çıkacağını anında doğrulayabilir.
Kaydetme ve silme aksiyonları TransferRouteProvider transient cache'ini otomatik temizliyor; değişiklikler bir sonraki sayfa isteğinde canlıya geçiyor, manuel cache temizleme dansı gerek yok.
TransferRouteProvider repository
Popüler-rota sorguları için tek doğruluk kaynağı, mevcut LocationProvider pattern'i baz alınarak: 1 saatlik transient cache, JOIN tabanlı eligibility filtresi (kalkış ve varış ikisi de is_active=1 VE allow_transfer=1 olmalı), kompoze edilebilir filtre seti (şehir / tip / yalnızca-vitrin). Cache anahtarları tüm filtre setini hashliyor, böylece farklı shortcode çağrıları cache'i paylaşmıyor.
TransferRouteProvider::get_popular_routes([
'limit' => 6,
'order' => 'featured',
'featured_only' => false,
'filter_origin_city' => 'İstanbul',
'filter_origin_type' => 'airport',
]);
Satırlar JOIN'lenmiş kalkış/varış verisiyle nesne olarak dönüyor: origin_name, origin_city, origin_type, destination_name, destination_city, destination_type ve tüm rota kolonları (distance_km, duration_min, min_price, is_featured, vs.).
Veritabanı migration
{prefix}rentiva_transfer_routes tablosuna is_featured tinyint(1) NOT NULL DEFAULT 0 kolonu + index ekleniyor. Migration dbDelta kullanıyor ve idempotent — mevcut kurulumlar yerinde yükseltiliyor, downtime yok; mevcut şemada migration'ı tekrar çalıştırmak no-op.
Lite ve Pro
Lite planlar en fazla 3 kart render ediyor. Bu mevcut Mode::maxTransferRoutes() kotasıyla enforce ediliyor — Lite adminin kaç rota tanımlayabileceğini sınırlayan aynı kota. Pro planlar yapılandırılmış limit kadar (varsayılan 6) render ediyor. Shortcode'un resolve_limit() metodu min($requested, $tier_max); yani Lite sitede limit="20" attribute'u sessizce 3'e iniyor, hata fırlatmıyor.
Boş durum
Sessiz no-op. Filtrelere uyan rota olmadığında (veya tablo boş, veya tüm uygun uçlar pasif), bölüm hiç render edilmiyor — "Yakında..." placeholder yok, boş grid yok, console gürültüsü yok. Yeni kurulumlar temiz görünüyor; doldurulmuş siteler ne varsa onu öne çıkarıyor.
İki filter hook
// Tema/entegrasyonlar, view_all_url açıkça set edilmediğinde
// transfer arama URL'ini sağlar.
add_filter('mhm_rentiva_popular_routes_view_all_url', function ($url) {
return home_url('/transfer/');
});
// Verilen lokasyon tipi için gösterilen ikonu override eder.
add_filter('mhm_rentiva_popular_routes_type_icon', function ($icon, $type) {
return $type === 'airport' ? '🛫' : $icon;
}, 10, 2);
Testler ve kalite gate'leri
- PHPUnit: 824 → 837 (+13). Yeni testler boş durum, tek/çoklu kart render, kalkış şehir + tip filtresi, vitrin sıralaması (önce sabitlenenler), fiyat-artan sıralama, aktif olmayan uçlar için gizli rotalar, süre/mesafe/fiyat görünürlük flag'leri ve geçersiz
columnsfallback'ini kapsıyor. - PHPCS: 0 hata. Değişen tüm dosyalarda
composer phpcstemiz. - SchemaParityTest: 20 block.json dosyasına çıkarıldı, uçtan uca doğrulandı (block attribute isimleri
AllowlistRegistryüzerinden kanonik shortcode attribute'larına round-trip yapıyor). - i18n: 35+ yeni TR çeviri — frontend kart etiketleri (Popüler Rotalar, Yaklaşık X dk, Trafiğe göre değişebilir, Başlangıç fiyatı), admin form (🌟 Vitrine Koy), tüm block + widget editör kontrolleri (Sıralama & Filtreler, Kart Görünümü panelleri).
.potyeniden üretildi,tr_TR.pomsgmerge edildi,.move.l10n.phpyeniden derlendi. - Runtime smoke test: Chrome DevTools MCP üzerinden gerçek admin → frontend tur. Düzenleme formunda checkbox işaretle, kaydet, shortcode render eden bir sayfaya git, 6 kartın hepsini doğrula (4 vitrin önce sabitlenmiş), TR çevirileri doğru, CSS yüklü, sıfır console error.
Sırada ne var
Roadmap transfer dalgasıyla devam ediyor: v4.36.0 bağlam-farkındalı eklentiler ekliyor (mevcut vehicle_addon CPT'sini addon_context taxonomy ile genişleterek), v4.37.0 transfer lokasyonları için harita görünümü (başka bir projeden pinleme kodu portuyla). Sonra bayi dalgası başlıyor — bayi dizini sayfası (v4.38.0) ve uzun süredir ertelenen Phase 5 bayi profil sayfası (v4.39.0).
