Ana içeriğe geç

Version Docs Updated

Amaç

Bu sayfa Bayi Profil Sayfası modülünü belgeler — müşterinin bir bayiyle rezervasyon yapmadan önce göreceği halka açık güven sayfası. Operasyonel kullanım, attribute referansı, schema/SEO davranışı ve geliştirici uzantı noktaları kapsanmaktadır.

v4.37.0'da tanıtıldı; rozet wiring + yorum meta fallback'i v4.37.1'de; UX cilası (avatar, araç thumbnail'ları, SEO probe, mobil breakpoint) v4.37.2'de; admin slug edit çakışma fix'i v4.38.1'de eklendi.

👤 Bayi Profil Sayfası

İçerik

  • Bu modül nedir
  • URL yapısı (/bayi/{slug}/ TR, /vendor/{slug}/ EN)
  • Admin akışı — slug, avatar, rozet uygunluğu
  • Frontend kullanım (kısa kod / Gutenberg bloğu / Elementor widget'ı)
  • Attribute referansı (12 attribute)
  • Schema.org LocalBusiness JSON-LD + SEO eklenti probe'u
  • Geliştirici uzantı noktaları (6 filter hook)
  • Lite vs Pro davranışı
  • Boş durumlar

Bayi Profil Sayfası modülü, onaylanmış her bayiye temiz ve paylaşılabilir bir URL'de özel güven sayfası verir. Ziyaretçiler rezervasyon yapmadan önce bayinin kimliğini, rozet durumunu, filo özetini, son yorumları ve konumunu inceleyebilir — "Bu aracı sevdim" ile "Bu kişiye bilgilerimi göndermeye hazırım" arasındaki güven boşluğunu kapatır.

Bu modül nedir

Pazaryeri için bir dönüşüm yüzeyi, admin paneli değil. Bayi başvuru formu ([rentiva_vendor_apply]) onboarding'i, bayi paneli ([rentiva_user_dashboard]) operasyonları üstlenir. Bayi Profil Sayfası ise müşterinin bir araç kartında "Bayiyi gör" tıkladığında veya arama/paylaşım yoluyla geldiğinde gördüğü herkese açık salt-okunur görünümdür.

Üç render yüzeyi tek bir kanonik renderer'ı paylaşır (Render Parity sözleşmesi):

YüzeyTanımlayıcı
Kısa kod[rentiva_vendor_profile]
Gutenberg bloğumhm-rentiva/vendor-profile ("MHM Vendor Profile")
Elementor widget'ımhm_rentiva_vendor_profile ("MHM Vendor Profile")

Blok ve widget kısa koda do_shortcode() ile delege eder. Kısa kod ne render ediyorsa, blok ve widget aynı şeyi render eder — çift kod yolu yok.

Manuel yerleştirme yanı sıra modül bir rewrite kuralı kayıt eder; /{base}/{slug}/ adresinde tam-sayfa wrapper'ını otomatik servis eder. Bayinin slug'ı atandığında (manuel veya otomatik), WordPress sayfası oluşturmana gerek kalmadan adres erişilebilir hale gelir.

URL yapısı

Base segment çevrilebilirdir:

LocaleURL
EN (varsayılan)/vendor/{slug}/
TR/bayi/{slug}/ (_x('vendor', 'URL slug', ...) .po çevirisi)
Özelmhm_rentiva_vendor_profile_url_base filtresi ile override

Slug daima ASCII (Latin) — sanitize_title(remove_accents($display_name)). Display name'deki Türkçe diakritikler (örn. "Akif Ötömötiv Şirketi") ASCII'ye katlanır (akif-otomotiv-sirketi); URL her tarayıcı, e-posta istemcisi ve eski paylaşım hedefi için güvenli kalır.

Slug değişiklikleri eski URL'den yenisine kalıcı 301 yönlendirmesi üretir — önceki slug 10 girdilik bir history meta'sına eklenir, VendorProfileRewrite::handle_request() eski slug'ları yakalayıp güncelse yönlendirir.

Admin akışı

1. Slug ve avatar — bayi kullanıcı profili

Kullanıcılar → Kullanıcıyı düzenle sayfasına git. "MHM Rentiva Vendor Settings" altında üç yeni alan görünür:

  • Default Branch/Location — operasyonel, public profille ilgili değil.
  • Vendor Avatar — WP medya kütüphanesi üzerinden özel yükleme. Boş bırakılırsa public profil sırayla Gravatar'a (eşleşen e-posta) ve son olarak display_name'den deterministic üretilen SVG initials avatarına düşer (her bayi farklı, tema-bağımsız, "mystery man" görseli olmadan kimlik sanatı alır).
  • Public Profile URL Slug — manuel doldur veya boş bırakırsan display_name'den otomatik üretilir. Değiştirildiğinde otomatik 301 yönlendirme oluşur.

Save yolu v4.38.1'den itibaren VendorSlugManager::change_slug() üzerinden geçer; iki bayiye aynı raw slug verildiğinde otomatik çakışma suffix'i (-2, -3, ...) uygulanır.

2. Rozet uygunluğu — otomatik

"✓ Doğrulanmış Bayi" rozeti tamamen eşik-tabanlıdır. Bir bayi şu üç koşulun hepsini sağlarsa onaylanmış sayılır:

EşikVarsayılanAyar anahtarı
Hesap yaşı (onaydan beri gün sayısı)180vendor_badge_min_age_days
Güvenilirlik puanı (0-100)80vendor_badge_min_score
Tamamlanan rezervasyon (toplam)10vendor_badge_min_completed_bookings

Eşikleri MHM Rentiva → Ayarlar → Bayi Pazaryeri altından ayarla (veya mhm_rentiva_vendor_badge_eligibility filtresi ile bayi-bazlı override et — Geliştirici uzantı noktalarına bak).

Üç eşiği henüz tutturmamış bayiler "Yeni Bayi" etiketini görür — yeni hesaplara olumlu çerçeveleme; iki yönde de olumsuz sinyal yok.

3. Bio, şehir — onboarding'den taşınır

"Hakkında" bölümü _rentiva_vendor_bio'dan (onboarding sırasında toplanır) okur. Hero "📍 Şehir · Üye YYYY" satırı _rentiva_vendor_city ve _rentiva_vendor_approved_at'tan okur. Bayiler ikisini de panelden istedikleri zaman güncelleyebilir — değişiklikler 1 saatlik transient cache'ini otomatik invalidate eder.

Frontend kullanım

Manuel yerleştirme (sayfa veya yazı)

Çoğu kurulumda rewrite kuralı işi yapar: bayi slug'ı yeterli, sayfa oluşturmaya gerek yok. Ama kısa kodu istediğin yere de yapıştırabilirsin:

[rentiva_vendor_profile slug="akif-otomotiv"]

Yapılandırılmış örnek:

[rentiva_vendor_profile
slug="akif-otomotiv"
show_badge="yes"
show_about="yes"
show_vehicles="yes"
max_vehicles="6"
vehicle_sort="rating-newest"
show_reviews="yes"
max_reviews="10"
show_location="no"]

slug boş ve sayfa rewrite-routed ise slug otomatik olarak mhm_rentiva_vendor_slug query var'ından okunur.

Gutenberg bloğu

MHM Vendor Profile bloğunu blok inserter'dan ekle (kategori: Widgets). Inspector kontrolleri her kısa kod attribute'unu Inspector panelleri üzerinden açar.

Elementor widget'ı

MHM Vendor Profile widget'ını Elementor panelinden ekle (kategori: MHM Rentiva). Auto-parity kontrolleri kısa kod attribute'larıyla eşleşir; standart Elementor wrapper styling kontrolleri (margin, padding, color, typography) render edilen HTML'i sarar.

Attribute referansı

12 attribute kanonik snake_case (kısa kod kullanır) ve camelCase alias (blok/widget kullanır) formatlarını kabul eder. Eklentinin CAM (Canonical Attribute Mapper) katmanı her ikisini aynı dahili forma normalize eder.

AttributeVarsayılanTipAmaç
slugboşstringBayi slug'ı. Boş + rewrite-routed sayfa query var'dan okur.
show_badgeyesboolHero'da "✓ Doğrulanmış Bayi" / "Yeni Bayi" etiketini göster.
show_ratingyesboolHero'da agregat puan barı (★★★★½ 4.6) ve yorum sayısını göster.
show_aboutyesboolHakkında bölümünü render et (_rentiva_vendor_bio boşsa gizli).
show_vehiclesyesboolAktif araç grid bölümünü render et.
max_vehicles6int (1-50)Maksimum araç kartı. Aralığa clamp'lenir.
vehicle_sortrating-newestenumAraç grid sıralaması. Şu anda tek mod (rating DESC, sonra post_date DESC).
show_reviewsyesboolSon yorumlar bölümünü render et.
max_reviews10int (1-50)Maksimum yorum girdisi. Her yorum kaynak araca link verir.
show_locationnoboolAdanmış Konum bölümünü render et. Varsayılan v4.37.2'de no'ya çevrildi — hero zaten şehri gösteriyor. Adanmış bölüm v4.40.0+ Transfer Map zenginleştirmesi için saklı; o gelene kadar hero meta'sını tekrarlıyor.
empty_vehicles_messageboşstring"Bu bayi şu anda araç listelememektedir." metnini override et.
empty_reviews_messageboşstring"Henüz değerlendirme yok — ilk değerlendirmeyi siz yapın." metnini override et.
classboşstringWrapper'a ek CSS class(lar)ı. Birden fazla token kabul edilir; her biri ayrı sanitize edilir.

Gizlilik sözleşmesi

Aşağıdaki user_meta anahtarları, en uç attribute kombinasyonlarında bile public profilde asla render edilmez:

  • _rentiva_vendor_phone — bayi onboarding'de toplanır, admin-only kalır (anti-spam scraping).
  • _rentiva_vendor_iban — finansal.
  • _rentiva_vendor_account_holder — finansal.
  • _rentiva_vendor_tax_number — finansal.

VendorProfileProvider sınıfı render array'ini besleyen alanları tam olarak allowlist'ler; hassas alanlar hiç okunmaz. mhm_rentiva_vendor_profile_data filtre DocBlock'u, hassas değerleri bu filtre üzerinden enjekte etmenin 1 saatlik transient'a sızdıracağı uyarısını taşır — filter callback'lerini salt-okunur tut.

Schema.org LocalBusiness JSON-LD + SEO eklenti probe'u

Modül her aktif bayi profil sayfasının <head>'ine LocalBusiness schema'sı içeren bir <script type="application/ld+json"> bloğu yayar. Doldurulan alanlar:

  • @type: LocalBusiness
  • name (display name, </script> enjeksiyonuna karşı hex-encoded — JSON_HEX_TAG bayrağı)
  • url (kanonik profil URL'si)
  • address.addressLocality (bayi şehri, ayarlıysa)
  • aggregateRating (bayi-seviyesi ağırlıklı ortalama + yorum sayısı, ≥1 yorum varsa)

JSON encoding JSON_HEX_TAG | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES kullanır — Türkçe karakterler korunur (Ö literal), </script> enjeksiyonları hex-encoded.

Sayfa başlığı ({bayi adı} — {site adı}) ve meta açıklaması (bayi bio'su, kelime sınırında 155 karaktere trim'lenir) yalnızca aktif bir SEO eklentisi yokken yayınlanır. Probe seti Yoast SEO, Rank Math, AIOSEO, SEOPress, The SEO Framework ve SmartCrawl'u kapsar; herhangi biri aktifse bizim title/description emisyonumuz inert olur (Google çift metadata'yı cezalandırır ve bu eklentilerin daha zengin ayar UI'ları vardır).

Schema.org JSON-LD çıktısı SEO eklentisinin canonical-tag filtresine de yol verir — wpseo_canonical (Yoast) ve rank_math/frontend/canonical (Rank Math) PHP_INT_MAX - 10 öncelikli — böylece kanonik URL tutarlı kalır.

Geliştirici uzantı noktaları

mhm_rentiva_vendor_profile_url_base

URL base segment'ini override et. Locale fark etmeksizin /dealers/ veya /firmalar/ gibi özel slug istediğinde işe yarar.

add_filter('mhm_rentiva_vendor_profile_url_base', function ($base) {
return 'firmalar';
});

Locale değişim takipçisi yeni değeri otomatik algılar ve rewrite kurallarını flush eder.

mhm_rentiva_vendor_profile_data

Tam render data array'ini (kimlik, rozet durumu, araç listesi, yorum agregatı, schema verisi) şablon çalışmadan önce filtrele. Özel template partial'ının okuyacağı ek alanlar enjekte etmek veya sayfa-bazında alan redact etmek için kullan.

add_filter('mhm_rentiva_vendor_profile_data', function (array $data) {
$data['custom_extra_text'] = 'Antalya Turizm Derneği üyesi';
return $data;
});

Konvansiyonel olarak salt-okunur. Burada hassas değer enjekte etmek 1 saatlik transient cache'e sızdırır.

mhm_rentiva_vendor_badge_eligibility

Bayi-bazlı rozet sonucunu override et. Tipik kullanım: "öne çıkan" bayiler için eşikleri bypass et veya inceleme altındaki bir bayiden rozeti geçici olarak çek.

add_filter('mhm_rentiva_vendor_badge_eligibility', function (bool $eligible, int $vendor_id, array $context) {
if (in_array($vendor_id, get_option('featured_vendor_ids', []), true)) {
return true;
}
return $eligible;
}, 10, 3);

$context age_days, score, completed_bookings taşır.

mhm_rentiva_vendor_completed_bookings_count

VendorBadgeEligibility'nin kullandığı toplam tamamlanan rezervasyon sayısını override et. Varsayılan callback ReliabilityScoreCalculator::count_completed_bookings()'a delege eder. Özel sayım stratejisi (örn. yalnızca belirli ürün kategorilerini sayma) için değiştir.

mhm_rentiva_vendor_profile_view_all_url

Araçlar bölümündeki "Tüm araçları görüntüle →" link hedefini filtrele. Boş döndürülürse link gizlenir — search-results sayfası olmayan kurulumlar için kullanışlı.

mhm_rentiva_vendor_profile_seo_disable

Title + meta description emisyonu için global kill switch. Varsayılan false; tamamen opt-out etmek için true döndür (genellikle tema bayi metadata'sını kendi yöntemiyle yönetiyorsa).

add_filter('mhm_rentiva_vendor_profile_seo_disable', '__return_true');

Lite vs Pro davranışı

Bayi Profil Sayfası Pro-yalnız bir özelliktirvendor_marketplace flag'i gerekir. Lite kullanıcıları görür:

  • Rewrite kuralı kayıt edilir ama template_redirect Lite için 404 dispatch eder (Mode::canUseVendorMarketplace() false döner).
  • Bir sayfada manuel kısa kod kullanımı boş string döndürür.
  • Blok ve Elementor widget'ı boş render eder (kısa koda delege ettiklerinden).

Yükseltme istemleri /pricing ve mevcut [mhm_rentiva_pricing_table] kısa kodunda yer alır.

Boş durumlar

DurumRender
Bayi bulunamadı / askıya alındı / slug eksikWordPress 404 (status header 404, temanın 404 şablonu)
0 aktif araç"Bu bayi şu anda araç listelememektedir." (empty_vehicles_message ile override edilebilir)
0 yorum"Henüz değerlendirme yok — ilk değerlendirmeyi siz yapın." (empty_reviews_message ile override edilebilir)
0 araç + 0 yorum (yeni bayi)İki boş durum da render edilir. Hero hâlâ görünür. "Yeni Bayi" etiketi bağlam ekler.

Ayrıca bakınız