WordPress Web Sitesinde Teknik Kodlama Standartları

WordPress; esnek tema yapısı, eklenti ekosistemi ve güçlü API katmanıyla üretkenliği artırır. Fakat “hızlıca çalışan” bir fonksiyonu canlıya itmek, uzun vadede borç (technical debt), güvenlik açığı, performans kaybı ve bakım maliyeti olarak geri döner. Teknik kodlama standartları, geliştirici ve ekipler arasında ortak dil, tekrar üretilebilir süreç, test edilebilir mimari ve denetlenebilir kalite sağlar.
Bu rehber; WordPress Coding Standards (WPCS), PSR uyumlu PHP pratikleri, temalarda Twig/Blade benzeri şablon disiplinleri (varsa), Gutenberg/Block Editor odaklı modern JS akışı, i18n/l10n, güvenlik (sanitize–validate–escape–nonce), REST API/Headless senaryoları, CI/CD kapıları, performans ve Core Web Vitals, erişilebilirlik, test piramidi, dökümantasyon, sürümleme ve paketleme, runbook/operasyon gibi 25+ başlıkta, uygulanabilir örneklerle standart takımı sunar. Hedefimiz; “stil rehberi” değil, üretim kalitesinde sürdürülebilir bir kod kültürü.
1) Kodlama Standartlarının Amacı ve Kapsamı
Amaç: Ekip içi uyum, hızlı kod inceleme, düşük hata ve güvenlik açığı, kolay refactor.
Kapsam: PHP + JS/TS + CSS/Sass + dosya/dizin isimleri + i18n + WPCS + PHPStan/Psalm + ESLint/TypeScript + Stylelint + Prettier.
İlke: “Fikir birliği > mükemmeliyet.” Önce anlaşalım, sonra otomatikleştirelim.
2) WPCS (WordPress Coding Standards) ile PHP Stili
-
Kurulum:
composer require --dev wp-coding-standards/wpcs squizlabs/php_codesniffer
-
Config:
phpcs.xml
ile kurallar (WordPress-Extra, WordPress-Docs, WordPressVIPMinimum vs.). -
Kullanım:
phpcs
(denetim),phpcbf
(otomatik düzeltme).
Fayda: Naming, spacing, dokümantasyon ve güvenlik uyarıları otomatik yakalanır.
3) PSR-4 Autoloading ve Modüler PHP
-
Yapı:
src/
altında namespace’lenmiş sınıflar (örn.Acme\Plugin\Subscriber
). -
Autoload:
composer.json
→"autoload": {"psr-4": {"Acme\\Plugin\\": "src/"}}
-
Avantaj: Test edilebilirlik, bağımlılık enjeksiyonu (DI), servis tabanlı mimari.
4) Güvenlik Hijyeni: Sanitize–Validate–Escape–Nonce
-
Girdi:
sanitize_text_field
,sanitize_email
,sanitize_key
,absint
,wp_unslash
. -
Doğrulama: İş kuralları: regex, aralık, tip; kabul edilmeyen değerde fail fast.
-
Çıkış:
esc_html
,esc_attr
,esc_url
,wp_kses
. -
CSRF:
wp_nonce_field
,check_admin_referer
/wp_verify_nonce
.
Kural: Girdi sanitize/validate, çıktı escape edilir. İstisna yok.
5) Veritabanı Erişimi: $wpdb->prepare()
ve Depo (Repository) Deseni
-
Zorunlu: Parametreli sorgu →
$wpdb->prepare( 'SELECT * FROM ... WHERE id = %d', $id )
. -
Abstraction: Depo sınıfları; sorgu inşası tek yerde.
-
Migrate: Şema değişimleri için güvenli kurulum/upgrade rutinleri (dbDelta, ver. kontrollü migrasyon).
6) Tema Mimarisi: Template Parçalama, View Model ve Kaçınma Noktaları
-
Ayrışma: Template (görünüm) içinde iş kuralı yok; PHP kontrol minimum.
-
Parçalama:
get_template_part()
/locate_template()
ile mantıksal bölme. -
View Model: PHP’de çıktı için bir “view data” array’i; şablonda salt erişim.
-
Kaçınılacaklar: Karmaşık sorgular, side-effect, doğrudan
$_POST/$_GET
erişimi.
7) Gutenberg/Block Editor: Modern JS/TS, API ve A11y
-
Yapı:
@wordpress/scripts
, React/JSX, TS tercih edin; bileşenleri küçük ve saf tutun. -
A11y: Klavye navigasyonu, ARIA rolleri, odak yönetimi; bloklarda etkileşim süresi (INP) ölçümü.
-
İçerik modeli: Reusable block/pattern; şablon kilidi (template locking) ile marka tutarlılığı.
8) Eklenti Mimarisinde “SOLID” ve Hook Stratejisi
-
Single Responsibility: Dosyalar/klasslar tek sorumluluk.
-
Open/Closed: Hook/Filter ile genişlet, çekirdeği kapatma.
-
LSP, ISP, DIP: Arayüzler ve DI.
-
Hook yönetimi: Subscriber/Hookable sınıflar;
add_action
/add_filter
tek yerde toplanır.
9) REST API & Headless: Yetki, Rate Limit, Şema
-
İzin:
permission_callback
zorunlu; sadece gerekli kapsamlara izin. -
Rate limit: Uç başına sınır; brute force koruması.
-
Şema:
register_rest_route
içinargs
veschema
tanımları; tür/doğrulama net.
10) Performans Kalıpları: Sorgu Diyeti, Cache, Asset Yönetimi
-
Sorgu:
WP_Query
doğru indeks;no_found_rows
,fields
azaltma. -
Cache: Transient/Object cache; invalidation kuralları.
-
Asset: Koşullu
wp_enqueue_*
,defer/async
, kritik CSS, modül parçalama (code-splitting).
11) Core Web Vitals Odaklı Frontend Disiplini
-
LCP: Hero görsel ön yükleme,
fetchpriority="high"
, düşük chain. -
INP: Event handler’ları hafifletme; gereksiz reflow yok.
-
CLS: Boyut belirtilmiş görsel/video; font
preload
+font-display
.
Kontrol: Lighthouse + alan verisi (RUM) karşılaştırması.
12) Erişilebilirlik (A11y) İlkeleri
-
Semantik HTML: hiyerarşi, landmark’lar.
-
Odak: Klavye ile gezilebilirlik; odak hapsi yok.
-
Kontrast ve durum: Hata/başarı mesajları; screen reader uyumu.
Araç: Axe, WAVE, Storybook A11y.
13) Uluslararasılaştırma (i18n) ve Yerelleştirme (l10n)
-
Text domain: Eklenti/tema domain’i,
__()/_e()/esc_html__()
vb. -
Çeviri dosyaları:
.pot/.po/.mo
üretimi; yazı tipleri, RTL desteği. -
Tarih/para birimi:
wp_date
,number_format_i18n
.
Kural: Bütün kullanıcı metinleri i18n fonksiyonlarından geçer.
14) Dosya ve Dizin İsimlendirme, Proje Yapısı
-
İsimler: kebab-case dosya, PascalCase sınıf, camelCase fonksiyon değişken.
-
Dizinler:
src/
,templates/
,assets/
(js, css, images),languages/
,tests/
. -
Kök temizliği:
index.php
koruma, gereksiz dosya yok.
15) Gelişmiş Tip Kontrol: PHPStan/Psalm, TypeScript
-
PHP:
phpstan.neon
ile seviye 6–8; nullability, array shape, dead code tespiti. -
TS:
tsconfig.json
; public API yüzeyini tiplerle güvenceye almak. -
CI: Tip hatası = kırmızı build.
16) Lint & Format: ESLint, Stylelint, Prettier
-
ESLint:
@wordpress/eslint-plugin
bazlı kurallar. -
Stylelint: BEM/utility odak; spesifiklik düşük;
:where()
/clamp()
bilinçli kullanımı. -
Prettier: Stil tartışmasını bitir; otomatik format.
17) Test Piramidi: Unit → Integration → E2E → Görsel
-
PHP Unit: Saf fonksiyonlar/sınıflar.
-
Integration: WP test suite; custom post type, meta, query.
-
E2E: Playwright/Cypress + wp-env; kritik kullanıcı yolunu test.
-
Görsel regresyon: Percy/Loki; blok/tema değişimlerinde piksel farkı.
18) Dökümantasyon ve DocBlocks
-
PHPDoc: Param/return tip, istisnalar, yan etkiler.
-
README: Kurulum, komutlar, mimari kararlar (ADR).
-
Değişiklik günlüğü (CHANGELOG): SemVer anlatımı, migration notları.
19) Sürümleme, Paketleme ve Dağıtım Artefaktları
-
SemVer: MAJOR/MINOR/PATCH; composer/
stable
kanal. -
Build: Prod paketinden dev dosyaları çıkar; asset hash’leri.
-
İmza: Paket checksum; güvenli indirme/doğrulama.
20) CI/CD Kapıları: “Kırmızıysa Yayın Yok”
-
Kapılar: Lint, tip kontrol, test, WPCS, güvenlik denetimi (Dependabot/
composer audit
). -
Ölçü: Kod kapsama, bundle boyutu bütçeleri, CWV sentinel testleri.
-
Canary: Sınırlı trafik, log/metric alarm; başarısızlıkta rollback.
21) Güvenlik Başlıkları ve Çerçeve Kuralları
-
CSP: Kaynak kısıtı;
nonce
/hash
yönetimi. -
HSTS/Referrer-Policy/Permissions-Policy: Devreye alma rehberi.
-
Çerez:
Secure
,HttpOnly
,SameSite
.
İlke: Tema/eklenti kodu bu başlık varsayımlarını ihlal etmez.
22) Medya ve Upload Güvenliği/Performansı
-
MIME doğrulama: Sunucu tarafı; SVG sanitize.
-
Uploads: PHP çalıştırma engeli;
wp_content_dir()
politikaları. -
Görseller:
srcset/sizes
, WebP/AVIF; küçük ekran önceliklendirme.
23) Loglama, İzleme ve Hata Ele Alma
-
Uygulama logları: Yapılandırılmış format (JSON); hata/uyarı ayrımı.
-
Kullanıcı dostu hata: WP_DEBUG false prod’da; özel hata sayfaları.
-
İzleme: 5xx, TTFB, JS hataları; alarmlar ve korelasyon ID.
24) Kod İnceleme (PR) Rehberi
-
Checklist: Güvenlik (nonce/escape), performans (sorgu/asset), i18n, test, dokümantasyon, WPCS uyumu.
-
Boyut: Küçük PR’lar, tek konu.
-
Onay: En az bir teknik reviewer, kritiklerde iki kişi.
25) Eğitim, Runbook ve Bilgi Tabanı
-
Runbook: Yayın, rollback, CDN purge, schema/canonical kontrol, cron/kuyruk.
-
KBA: “Şu blok nasıl geliştirilir?”, “REST uç izinleri”.
-
Süreklilik: Sürüm çıktılarında mikro-eğitim; yeni geliştiricilere onboarding.
Sonuç: Standartlar, Takımın “Gizli Süper Gücü”dür
WordPress’te teknik kodlama standartları, yalnız biçimsel kurallar değil, risk azaltan, hızı artıran, kaliteyi görünür kılan bir işletim sistemidir. Bu yazının önerdiği çerçeve—WPCS + PSR-4, sanitize–validate–escape–nonce, $wpdb->prepare ve depo deseni, Gutenberg/JS disiplinleri, REST/Headless güvenliği, performans ve CWV odaklı frontend, i18n/a11y, lint–tip–test–görsel regresyon kapıları, sürümleme/paketleme, log/izleme, PR checklist ve runbook’lar—ile kodunuz yalnız “bugün çalışır” değil, yarın da kolayca bakım gören ve sınırları bilinen bir yapıya kavuşur.
Öneri: Hemen bugün phpcs.xml
, phpstan.neon
, eslint.config.js
, stylelint.config.js
, tsconfig.json
, composer.json
(autoload ve scripts) dosyalarınızı tek bir mühendislik şablonuna bağlayın. CI’da kırmızıysa yayın yok kuralını devreye alın; PR’lara güvenlik–performans–i18n–test kontrol listelerini ekleyin. Blok geliştirme ve REST uçlarında izin + şemayı standartlaştırın. Bir hafta sonra kod incelemelerinin kısaldığını, bir ay sonra prod hatalarının düştüğünü, üç ay sonra ise yeni geliştiricilerin çok daha hızlı akışa girdiğini göreceksiniz.