WordPress Web Sitesinde Teknik Kodlama Rehberi

WordPress ekosisteminde “çalışıyor” ile “üretim kalitesinde” arasında büyük bir uçurum vardır. Bir işlevin lokal ortamda hatasız çalışması; güvenlik, performans, sürdürülebilirlik, test edilebilirlik, geri dönüş (rollback), çoklu ortam (dev–staging–prod), sürüm yönetimi, çoklu kullanıcı ve çok dilli senaryolarda istikrarlı sonuçlar vereceğinin garantisi değildir. Üretim kalitesinde kodlama, yalnızca bir PHP dosyasına fonksiyon yazmak değil; WordPress kodlama standartlarına uyum, hook/action/filter yaşam döngüsünü bilinçli kullanma, güvenli veri akışı (sanitize–validate–escape–nonce), sorgu ve veritabanı katmanı yönetimi, varlık (asset) yükleme stratejileri, REST API ve blok (Gutenberg) geliştirme, i18n/l10n, CI/CD ve otomasyon, ölçüm–log–izleme, bağımlılık ve yapılandırma yönetimi gibi çok katmanlı disiplinlerin toplamıdır.
1) Kodlama Standartları: WordPress Coding Standards (WPCS) ve PSR Dengesi
Amaç: Ekip içi tutarlılık, güvenlik ve okunabilirlik.
-
WPCS + PHPCS: Projeye
phpcs.xml
ekleyin;WordPress
,WordPress-Docs
,WordPress-Extra
kurallarını etkinleştirin. -
PSR etkisi: WordPress tarihi gereği PSR-4 yerine kendi tarzını kullanır; yine de autoloading için PSR-4 benimsenebilir.
-
DocBlock disiplini: Fonksiyon/method açıklamaları, parametre/return türleri,
@since
,@deprecated
etiketleri.
Uygulama: CI hattında composer phpcs
ile kod kalitesini kırmızıya düşürerek hatalı commit’in prod’a çıkmasını engelleyin.
2) Eylemler ve Filtreler: Yaşam Döngüsüne Uyumlu Tasarım
Amaç: Core, tema ve eklentilerle uyumlu, genişletilebilir mimari.
-
Action vs Filter: Action yan etki yaratır; Filter veriyi alır-değiştirir-döndürür.
-
Örnek:
add_filter(‘the_content’, function($content){
if (is_singular(‘post’)) {
$content .= ‘<div class=”post-cta”>Bültene abone olun</div>’;
}
return $content;
}, 20); // öncelik
-
Öncelik ve parametre sayısı: Çakışmaları azaltmak için uygun öncelik verin; filter/register sırasında
$accepted_args
doğrudur. -
Kancaları dokümante edin: Genişleme noktaları için kendi
do_action()
/apply_filters()
kancalarınızı oluşturun ve belgeleyin.
3) Güvenlik Temelleri: Sanitize–Validate–Escape–Nonce Dörtlüsü
Amaç: XSS, CSRF, SQL Injection ve yetkisiz işlemleri engellemek.
-
Sanitize/Validate: Giriş verisini
sanitize_text_field
,sanitize_email
,sanitize_key
vb. ile temizleyin; iş kurallarına göre doğrulayın. -
Escape: Çıkış noktasında
esc_html
,esc_attr
,esc_url
,wp_kses
kullanın. -
Nonces: Form/aksiyonlar için
wp_nonce_field
vecheck_admin_referer
/wp_verify_nonce
. -
Yetenek kontrolü:
current_user_can('edit_post', $post_id)
gibi bağlama duyarlı kontroller.
Uygulama: Ödeme webhook’ları, dış API callback’leri ve admin-ajax eylemlerinde nonce + capability + rate limit birlikte uygulanmalı.
4) Varlık Yönetimi: Script/Style Enqueue, Bağımlılıklar ve Sürümleme
Amaç: Performanslı ve çakışmasız asset yüklemesi.
-
Enqueue doğru kullanım:
wp_enqueue_script/style
yalnızca gerekli sayfalarda; admin ve front ayrımı. -
Bağımlılıklar:
dependencies
dizisi ile tek kütüphane birden çok kez yüklenmesin. -
Sürümleme (cache-bust): Dosya adında hash veya
wp_enqueue_script(..., $ver=filemtime())
. -
Defer/async:
script_loader_tag
filtresiyle kritik olmayan JS’yi erteleyin.
Vaka: Slider kütüphanesi tüm sayfalarda yükleniyordu; koşullu enqueue ile LCP iyileşti.
5) Sorgular ve Döngü: WP_Query, pre_get_posts ve Performans
Amaç: Gereksiz sorgu ve N+1 problemlerini azaltmak.
-
WP_Query yerine pre_get_posts: Birçok listeleme ayarı için global sorguyu değiştirmek daha hafif.
-
Alan seçimi ve cache:
update_post_meta_cache
/update_post_term_cache
bayrakları; büyük listelerde kapatın. -
Sadece gerekenleri çekin:
fields => 'ids'
kullanın; sonra toplu meta çekin. -
Transient/objekte cache: Yoğun sorgular için cache katmanı.
Örnek: Büyük katalogda WP_Query
ile 100 ürün ID’si; sonra get_post_meta
toplu. TTFB %30 azaldı.
6) Veritabanı Katmanı: $wpdb
, prepare()
ve Özel Tablolar
Amaç: Güvenli ve sürdürülebilir veri erişimi.
-
$wpdb->prepare()
zorunluluğu: Değişkenleri bağla; manuel birleştirmeden kaçın. -
Index ve şema: Yoğun erişilen sütunlarda index; migration için dbDelta.
-
Özel tablo ne zaman?
postmeta
/usermeta
şişmesi ve raporlama gereksinimlerinde.
Uygulama: Raporlama için wp_reports
tablosu, event_time
+ user_id
bileşik index; dbDelta
ile versiyonlama.
7) REST API ve Endpoint Tasarımı
Amaç: Harici entegrasyonlar, SPA/SSG ön yüzleri ve otomasyon.
-
Kayıt:
register_rest_route('namespace/v1', '/items', [...])
-
İzin kontrolü:
permission_callback
içindecurrent_user_can
/token doğrulama. -
Schema ve “partial response”: Büyük nesnelerde gereksiz alan göndermeyin; sayfalama ve filtre parametreleri ekleyin.
Vaka: Mobil uygulama için özel /v1/menu
endpoint’i; menü ağacı ve etag
/last-modified
ile cache’lenebilir yanıt.
8) Gutenberg (Blok) Geliştirme: Editör Deneyimini Kodla Tasarlamak
Amaç: İçerik üreticilerine güvenli ve yönlendirilmiş şablonlar sağlamak.
-
Dinamik vs statik blok: Sunucu tarafı render (PHP) ile veri taze; statik blokta build aşamasında HTML üretimi.
-
Block supports:
spacing
,color
,typography
sınırlarıyla tasarımı koruyun. -
Pattern ve Template Lock: Sayfa düzenini sabitleyerek markaya aykırı içerikleri önleyin.
Uygulama: “Vaka Çalışması” blok paketi: özet, metrikler, CTA; editör yalnızca doldurur, tasarım bozulmaz.
9) Shortcode’lar, Widget’lar ve mu-plugins
Amaç: Kurumsal işlevleri merkezileştirmek ve kalıcı kılmak.
-
Shortcode: İçeriğe gömülü işlevler için sınırlı ve güvenli kullanım.
-
Widget/Block dönüşümü: Eski widget mantıklarını bloklara taşıyın.
-
mu-plugins
: Site-özgü kritik kodları tema/eklenti güncellemelerinden izole edin.
Vaka: “Kurumsal veri çekme” işlevi mu-plugin
e taşındı; tema değişse de iş akışı bozulmuyor.
10) Uluslararasılaştırma (i18n) ve Yerelleştirme (l10n)
Amaç: Çok dilli sitelerde sürdürülebilir çeviri akışı.
-
Metin sarma:
__()
,_e()
,_x()
; metin alanlarını domain ile etiketleyin. -
.pot
üretimi:wp i18n make-pot
ile otomasyon. -
RTL ve tarih/sayı biçimleri: Yerelleştirilmiş formatlar; çeviri ekipleri için readme.
Uygulama: Eklenti yayın pipeline’ında otomatik .pot
güncelleme ve PO/MO paketleme.
11) Medya, Görsel Boyutları ve Dönüştürme
Amaç: Hız ve kalite dengesi, CLS’nin önlenmesi.
-
Görsel boyutları:
add_image_size
ile gerektiği kadar boyut;srcset/sizes
aktifleştirme. -
Formatlar: WebP/AVIF dönüşümü sunucu veya CDN’de.
-
Yer tutucular: Genişlik/yükseklik öznitelikleriyle layout kaymasını önleyin.
Vaka: Ürün galerisinde dinamik boyutlar CLS yaratıyordu; sabit oranlı kapsayıcı + object-fit
ile düzeldi.
12) Cron, Kuyruklar ve Uzun Süreli İşler
Amaç: Kullanıcı isteğini kilitlemeden ağır görevleri çalıştırmak.
-
Gerçek cron: Trafik tetiklemeli
wp-cron.php
yerine sistem cron. -
Queue yaklaşımı: Batch e-posta, dış API senkronizasyonu için kuyruk (Action Scheduler vb.).
-
İzleme: Cron/kuyruk durum panosu, timeout ve yeniden deneme (retry) politikası.
Uygulama: Ürün içe aktarımları 500’lük paketler halinde, her 5 dakikada bir; timeout 30 sn, 3 deneme.
13) Performans ve Önbellek Stratejileri
Amaç: LCP/INP/CLS hedeflerine ulaşmak, sunucu yükünü azaltmak.
-
Katmanlar: Nesne önbelleği (Redis/Memcached), sayfa önbelleği (Nginx/Apache), CDN.
-
Purge kuralları: Yalnız ilgili sayfaları temizleyin (yazı, kategori, ana sayfa).
-
Transient/Options: Kalkıcı cache için
transient
vewp_options
kullanımında TTL/temizlik planı.
Vaka: Blog index’inde pahalı sorgu transient’e alındı, TTL 10 dk; cache hit ratio %80’e çıktı.
14) Hata Ayıklama ve İzleme: WP_DEBUG, Loglar, Query Monitor
Amaç: Sorunları kullanıcıdan önce fark etmek.
-
Ortam değişkenleri:
WP_DEBUG
,WP_DEBUG_LOG
,SCRIPT_DEBUG
yalnızca dev/staging’de açık. -
Query Monitor: Ağır sorgular, Object Cache hit/miss, hook sırası.
-
Merkezi loglama: PHP-FPM, web sunucusu ve uygulama loglarını bir havuzda toplayın.
Uygulama: Bir üçüncü taraf API gecikmesi TTFB’yi bozuyordu; timeout + fall back ile çözüldü.
15) Bağımlılık Yönetimi: Composer, Autoload ve Sürüm Sabitleme
Amaç: Tekrarlanabilir kurulum ve minimum çatışma.
-
Composer kullanın: Eklenti/kitaplık sürümlerini sabitleyin;
composer.lock
sürümleyin. -
PSR-4 autoload:
composer.json
ilesrc/
altını otomatik yükleme. -
Özel depolar: Özel eklentileri
repositories
ile dahil edin.
Vaka: Rasgele güncellenen SDK sürümü prod’da hata yaptı; ^1.4
yerine 1.4.6
sabitleyerek stabilize edildi.
16) Yapılandırma Yönetimi: .env
, wp-config.php
ve Sırlar
Amaç: Kod–konfigürasyon ayrımı, güvenli sır yönetimi.
-
Çevresel değişkenler: DB, API anahtarları
.env
veya gizli kasada (Vault). -
wp-config.php
katmanları: Ortam bazlı yüklemeler (DEV/STAGE/PROD). -
Salt anahtarları: Düzenli rotasyon; repoda sır tutmayın.
Uygulama: .env
dışı sırlar yalnız kasadan okunur; erişimler loglanır.
17) Rol/Yetenek (Capability) ve Güvenli Yönetim Deneyimi
Amaç: Asgari yetki ilkesi (PoLP).
-
Özel roller: Editör, içerik yöneticisi, geliştirici; yalnız gerekli capability’ler.
-
Admin kısıtlama: Kritik sayfaları yalnız yüksek yetkili kullanıcı görsün.
-
Denetim izi: Kim, ne zaman, ne yaptı? Log ve raporlama.
Vaka: Yanlış rol atamasıyla gereksiz menüler görünüyordu; özel rol seti ve menü kısıtları ile düzeltildi.
18) Admin UX Özelleştirme: Metabox, Screen Options, List Table
Amaç: Editör verimliliği ve hata payını azaltmak.
-
Metabox mantığı: Zorunlu/opsiyon alanlar; açıklama ve doğrulama.
-
List table özelleştirme: Özel sütunlar, filtreleme, hızlı işlemler.
-
Rehberlik: Alan altına ipucu metinleri; doğrulama hatalarını kullanıcı dostu gösterin.
Uygulama: “Vaka Çalışması” içerik tipinde KPI alanları zorunlu; liste ekranında filtrelenebilir sütunlar.
19) Test Otomasyonu: PHPUnit, Playwright/Cypress ve WP-CLI
Amaç: Değişikliklerden korkmadan dağıtım.
-
Unit test: İş kuralları, yardımcı fonksiyonlar.
-
Entegrasyon/e2e: Form gönderimi, giriş, arama, ödeme gibi kritik akışlar.
-
WP-CLI komut testleri: Geliştirici araçları için.
Vaka: “Sipariş akışı kırılmasın” duman testi: her dağıtım sonrası 30 sn’de sonuç; başarısızlıkta auto-rollback.
20) Sürekli Entegrasyon/Dağıtım (CI/CD) ve Rollback
Amaç: Tutarlı, güvenli ve hızlı yayın.
-
Adımlar: Lint → test → build → paket → staging → onay → prod → smoke test.
-
Artefaktlar: Sürüm etiketli build;
changelog
ve hash. -
Rollback: Tek komutla bir önceki istikrarlı sürüme dönüş.
Uygulama: “Go/No-Go” kontrol listesi, dağıtım süresince read-only DB politika.
21) Çoklu Site (Multisite) ve Çoklu Bölge
Amaç: Paylaşılan kod, ayrık içerik ve bölgesel ayarlar.
-
Ağ etkinleştirme: Eklenti/tema ağ düzeyinde; site bazlı override.
-
Bölgeye özgü konfig: CDN, para birimi, dil.
-
Performans: Kullanıcı ve meta tablolarında ölçek stratejileri.
Vaka: Çoklu markada ortak blok kütüphanesi; marka özel CSS yalnız o sitede yükleniyor.
22) SEO-Teknik Uyum: Canonical, Schema, Sitemap ve Robots
Amaç: Kodla garantilenen arama görünürlüğü.
-
Kanonik: Liste/parametreli sayfalarda doğru canonical üretimi.
-
Schema: JSON-LD ile Article/Organization/Breadcrumb.
-
Dinamik sitemap: Büyük sitelerde parça parça (index sitemap).
Uygulama: İçerik yayınlandıktan sonra ilgili sayfaların CDN purge ve sitemap ping’i tetiklenir.
23) Dış Servisler ve Dayanıklılık: Timeouts, Retries, Circuit Breaker
Amaç: Harici API’lerin sisteme zarar vermesini engellemek.
-
Timeout: 2–5 sn üstü uygun değil; bağlama göre ayarlayın.
-
Retry: Artan bekleme (exponential backoff).
-
Circuit breaker: Belirli hata oranında geçici devre dışı bırakma.
Vaka: Ödeme doğrulama API’si gecikti; local queue ve retry ile kullanıcı akışı donmadı.
24) Loglama, Telemetri ve Alarm
Amaç: Gözlemlenebilirlik (observability) kültürü.
-
Uygulama logları: JSON format, korelasyon ID.
-
Metrikler: Response time, hata oranı, cache hit.
-
Alarm kanalları: CRITICAL/MAJOR/MINOR ayrımı; on-call rotası.
Uygulama: 500 hataları için otomatik olay bileti; kök neden analizi (RCA) dokümantasyonu.
25) Vaka Çalışması: “Yavaşlayan Blog ve Kararan Yönetim Paneli”
Sorun: Son 3 ayda içerik ekleme ve listeleme sayfaları yavaşladı; arada 500 hataları görülüyor.
Analiz:
-
Query Monitor:
wp_postmeta
aşırı şişmiş,LIKE
aramaları ağır. -
Üç eklenti aynı JS kütüphanesini yüklüyor, çakışma var.
-
Cron tetiklediği toplu içe aktarma işleminde memory leak.
Çözüm: -
postmeta
temizlik + uygun index; pahalı sorgular transient ile cache. -
Asset manifest ve koşullu enqueue; tekrar eden kütüphaneler kaldırıldı.
-
İçeri aktarma kuyruğa taşındı; her batch 200 kayıt, memory limit izlendi.
Sonuç: TTFB %35 iyileşti, panel hataları sona erdi.
26) Kod İnceleme (Code Review) ve Bilgi Üretimi
Amaç: Tek kişinin bilgisine bağımlı olmayan, kolektif kalite.
-
PR şablonu: Değişiklik kapsamı, risk, test adımları, geri alma planı.
-
Check-list: Güvenlik, performans, i18n, dokümantasyon, testler.
-
Bilgi tabanı: Sık sorunlar için KBA; runbook’larla entegre.
Uygulama: Her major değişiklikte en az iki onay; kritiklerde zorunlu QA.
27) Lisans ve Telif Uyumları
Amaç: Açık kaynak uyumu ve yasal risklerin önlenmesi.
-
Lisans bildirimi: Üçüncü taraf kütüphaneler; NOTICE dosyası.
-
Ticari kullanım: Lisans koşulları ve atıf; tema/eklenti dağıtımında lisans metinleri.
-
Medya telifleri: DAM entegrasyonu ve meta verilerle telif takibi.
Vaka: Lisans uyumsuzluğu nedeniyle stok görsel dosyaları kaldırıldı; otomatik telif kontrolü eklendi.
28) Eğitim, Onboarding ve İç Rehberler
Amaç: Süreklilik ve hız.
-
Onboarding paketi: Geliştirme ortamı,
make
/npm
komutları, debug ve test rehberi. -
Kod örnekleri: Blok, REST, enqueue, nonce,
$wpdb->prepare()
kalıpları. -
İç eğitim: Üç ayda bir “WordPress Kod Standardı” oturumu.
Uygulama: Yeni geliştirici ilk haftasında üretken; PR kalitesi hızla standart seviyeye gelir.
Sonuç: Üretim Kalitesinde WordPress için Disiplinli Bir Mühendislik Yaklaşımı
Bu rehberde ele aldığımız başlıklar—kodlama standartları, hook temelli mimari, güvenli veri akışı, sorgu/veritabanı yönetimi, varlık yükleme ve sürümleme, REST API ve Gutenberg blokları, i18n/l10n, cron/kuyruk, cache ve performans, hata ayıklama ve gözlemlenebilirlik, bağımlılık ve yapılandırma yönetimi, test–CI/CD–rollback—bir araya geldiğinde WordPress kod tabanınız yalnızca “çalışan” değil, dayanıklı, ölçeklenebilir, denetlenebilir ve hızlı iterasyona uygun hale gelir.
Bugün atacağınız küçük ama sistematik adımlar (örn. prepare()
kullanmaya zorlayan kod inceleme kuralı, asset koşullu yükleme, i18n disiplini, cron yerine kuyruk, CI’da otomatik duman testleri) yarın daha az kesinti, daha düşük bakım maliyeti, daha yüksek SEO ve dönüşüm olarak geri döner. Unutmayın: “Kaliteli kod” tek bir dosya değil; süreç + standart + otomasyon + ölçüm dengesidir. WordPress’in esnekliğini, mühendislik disiplininizle birleştirdiğinizde, kurumsal sınıf bir içerik platformu elinizde olur—güvenli, hızlı ve uzun ömürlü.