Bir WordPress temasını çalışır hale getirmek için CSS yazmadan önce atılması gereken bir adım vardır: style.css dosyasının en başına doğru formatta bir yorum bloğu eklemek. WordPress bu bloğu okumadan temanızı hiç tanımaz — CSS'in geri kalanı ne kadar doğru yazılmış olursa olsun fark etmez. Bu yazıda bu header'ın nasıl çalıştığını, hangi alanların ne işe yaradığını, child theme oluştururken nelere dikkat edilmesi gerektiğini ve sık yapılan hataları ele alıyoruz.
WordPress Bir Temayı Nasıl Tanır?
WordPress bir temayı tanımak için wp-content/themes/ altındaki her klasörü tarar ve içindeki style.css dosyasının en başında bu yorum bloğunu arar. Blok orada değilse ya da Theme Name alanı boşsa, WordPress o klasörü geçerli bir tema olarak görmez ve Görünüm > Temalar ekranında listelemez. Önemli olan nokta şu: WordPress dosyanın CSS içeriğinin geri kalanıyla ilgilenmez, sadece bu üstbilgiyi tarar. Yani teknik olarak geçersiz CSS içeren ama header'ı doğru olan bir style.css, tema olarak tanınmaya devam eder.
Somut bir örnek üzerinden gidelim: wp-content/themes/vitrin-tema/ klasöründe bir style.css dosyası oluşturduğunuzu, ancak dosyanın en başına yanlışlıkla bir @charset "UTF-8"; satırı ya da açıklama amaçlı sıradan bir CSS yorumu koyduğunuzu düşünün. Header bloğu bu satırın hemen ardından, dosyanın ikinci satırında başlıyor olsa bile WordPress temayı tanımaz, çünkü tarama işlemi dosyanın tam olarak ilk satırından başlar. Aynı header, dosyanın gerçekten ilk satırına taşındığında sorun anında çözülür.
style.css Header Alanları
| Alan | Zorunlu mu | Ne işe yarar |
|---|---|---|
| Theme Name | Evet | Temanın tanınması için tek zorunlu alan; Temalar ekranında görünen isimdir |
| Theme URI | Hayır | Temanın tanıtım sayfasına bağlantı verir |
| Author | Hayır | Yazar adını gösterir |
| Author URI | Hayır | Yazar adına tıklandığında açılacak bağlantıdır |
| Description | Hayır | Temalar ekranındaki açıklama metnidir |
| Version | Hayır | Sürüm numarasını gösterir |
| Requires at least | Hayır | Temanın çalışması için gereken minimum WordPress sürümünü belirtir |
| Requires PHP | Hayır | Temanın çalışması için gereken minimum PHP sürümünü belirtir |
| License | Hayır | Lisans türünü gösterir |
| License URI | Hayır | Lisans metnine bağlantı verir |
| Text Domain | Hayır | Çeviri dizelerinin eşleştiği kimliktir; i18n için gereklidir |
| Template | Sadece child theme'de | Ebeveyn temanın klasör adını belirtir; child theme'in hangi temadan miras alacağını tanımlar |
Tam Kod Örneği
/*
Theme Name: My Custom Theme
Theme URI: https://example.com/my-custom-theme
Author: Your Name
Author URI: https://example.com
Description: A clean, custom WordPress theme.
Version: 1.0.0
Requires at least: 6.0
Requires PHP: 7.4
License: GPL v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: my-custom-theme
*/
Requires at least ve Requires PHP: Uyumluluk Kontrolü
Requires at least ve Requires PHP alanları, WordPress'in kurulu sürümle temanın uyumluluğunu otomatik olarak kontrol etmesini sağlar. Site bu gereksinimleri karşılamıyorsa WordPress temayı Temalar ekranında uyumsuz olarak işaretler ve etkinleştirmeyi engeller. Bu mekanizma, eski bir PHP sürümünde çalışan ya da güncellenmemiş bir WordPress kurulumunda kullanıcının bilmeden temayı etkinleştirip bozuk bir siteyle baş başa kalmasını önler.
Child Theme ve Template Satırı
Bir child theme (alt tema) oluşturuyorsanız, header'a ayrıca ebeveyn temanın klasör adını gösteren bir Template: satırı eklemeniz gerekir. Örneğin ebeveyn tema wp-content/themes/twentytwentyfour klasöründeyse, child theme'in style.css dosyasına Template: twentytwentyfour satırını eklersiniz. WordPress bu satırla hangi temadan miras alınacağını anlar; child theme'in kendi style.css dosyası ebeveynin CSS'ini geçersiz kılmak için kullanılırken, PHP şablon dosyaları da yine bu satır sayesinde ebeveyn temadan devralınır.
Template: satırı, ebeveyn temanın gösterilen adı (Theme Name) değil, klasör adıdır. Bu iki değer genellikle farklı yazılır; klasör adını kullanmak yerine görünen adı yazmak, WordPress'in ebeveyn temayı bulamamasına yol açar.Child theme yaklaşımının pratikteki değeri şuradan gelir: bir temayı doğrudan düzenlemek yerine, üzerine kurulu ayrı bir klasörde çalışırsınız. Değişiklikleriniz child theme'in kendi dosyalarında durur, ebeveyn temanın dosyalarına dokunulmaz. Template: satırı bu ilişkiyi kurduğu için, ebeveyn temada eksik olan her şablon dosyası, fonksiyon veya stil otomatik olarak ebeveynden devralınır; siz sadece değiştirmek istediğiniz kısımları child theme içinde yeniden tanımlarsınız.
Text Domain ve Çeviri Eşleşmesi
Text Domain, temadaki load_theme_textdomain() çağrısında ve tüm __() / _e() çeviri fonksiyonlarında kullanılan değerle birebir aynı olmalıdır. Bu iki değer eşleşmediğinde WordPress doğru .mo çeviri dosyasını bulamaz ve arayüz her zaman orijinal, genellikle İngilizce metinle görünür. Bu hata da Text Domain uyumsuzluklarında olduğu gibi herhangi bir hata mesajı üretmez; sadece çeviriler sessizce devre dışı kalır.
Sık Yapılan Hatalar
- Header dosyanın en başında değil: Blok,
style.cssdosyasının gerçekten ilk satırında olmalıdır. Öncesinde bir@charsetkuralı, boş satır ya da başka bir yorum bulunursa WordPress bloğu tanımayabilir ve temayı listelemez. - Theme Name eksik: Diğer tüm alanlar doğru olsa bile
Theme Nameboşsa WordPress klasörü geçerli bir tema olarak görmez. - Child theme'de Template satırının unutulması: Bu satır eksik kalırsa WordPress child theme'i bağımsız, kendi başına ayakta duran bir tema olarak değerlendirir; ebeveyn temadan hiçbir şablon dosyası devralınmaz ve site genellikle bozuk görünür.
- Text Domain uyumsuzluğu: Header'daki değer ile çeviri fonksiyonlarında kullanılan slug tutmuyorsa çeviriler sessizce çalışmaz, herhangi bir hata görülmez.
Header'daki alanları elle yazmak, özellikle child theme'lerde Template satırının klasör adıyla birebir eşleşmesi gerektiği için hataya açıktır. Aşağıdaki araç, gerekli alanları doğru formatta oluşturmanıza yardımcı olur.
Theme Name, Text Domain, Template ve diğer style.css header alanlarını doğru formatta oluşturup kopyalamaya hazır hale getirin.