theme.json Şeması
theme.json tema klasörünün kökünde durur ve üç iş yapar: temayı tanıtır, temanın kendi durağan varsayılanlarını taşır ve site sahibinin göreceği özelleştirici panelini bildirir.

Bu sayfa kodun okuduğu anahtarları listeliyor. Gelen temalarda başka anahtarlar da var - license, author_url, minimum_cms_version, menu_locations, image_sizes, assets, templates, requirements gibi - ama bunlar insan için not niteliğindedir, hiçbir kod tarafından okunmazlar. Eklemek bir davranışı değiştirmez, çıkarmak bir şeyi bozmaz.
Kimlik
| Anahtar | Tür | Not | |---|---|---| | name | metin | Zorunlu. Olmadan tema geçersiz sayılır | | version | metin | Semver. Tema kartında görünür, varlık önbellek kırıcısı olarak kullanılır | | author | metin | Tema kartında görünür | | description | metin | Tema seçici için tek satır | | screenshot | metin | Kart görselinin dosya adı, tema klasörüne göre | | internal | boolean | true ise tema, zaten aktif olmadıkça Temalar ekranında gizlenir | | language | metin | Temanın kendi labels değerlerinin yazıldığı dil | | labels | nesne | Temanın sağladığı metinler; jek_label() tarafından okunur - aşağıya bakın |
Ayarlanacak bir slug yoktur. Üründeki her theme.json dosyasında bir tane var ve hiçbiri okunmuyor: kısa ad her zaman klasör adıdır. Dosyadaki slug anahtarını değiştirmek hiçbir şeyi değiştirmez; klasörün adını değiştirmek ise temanın kayıtlı özelleştirme değerlerini sahipsiz bırakır.
labels, bir temanın tek tek metinleri ezmesini sağlar. Çok dilli değer site diline göre seçilir; düz metin değer yalnızca temanın kendi language değeri site diliyle eşleşiyorsa kullanılır - İngilizce bir etiketin Türkçe siteye sızmasını engelleyen şey budur.
{
"labels": {
"read_more": { "tr": "Yazının devamı", "en": "Keep reading" }
}
}
settings bloğu - temanın kendi varsayılanları
settings, temaya gömülü değerleri tutar. Özelleştirici değildir: buradaki hiçbir şey yönetim panelinde görünmez, hiçbiri kullanıcı tarafından yazılmaz ve hiçbiri CSS değişkenine dönüşmez.
{
"settings": {
"colors": { "primary": "#2563eb", "text": "#0f172a", "background": "#ffffff" },
"typography": { "body": "Inter, system-ui, sans-serif" },
"posts": { "posts_per_page": 12 },
"features": { "dark_mode": true }
}
}
Şablonlar bunu temanın kendi functions.php dosyasında tanımlı yardımcıyla okur:
$perPage = theme_setting('posts.posts_per_page', 10);
Gelen on beş temanın on dördünde settings bloğu var. İçindeki bir anahtarı ayrıca söylemek gerekir, çünkü işlevsizdir: settings.colors_dark birkaç temada görünür ve hiçbir kod tarafından okunmaz - koyu renkler bunun yerine özelleştiricinin koyu eşlerinden gelir.
customizer bloğu
customizer düzenlenebilir taraftır ve altında üç anahtar yaşar.
customizer.tabs panelin kendisidir. Her anahtar bir sekmedir; her sekmede bir label (düz metin ya da { "tr": …, "en": … } çifti), isteğe bağlı bir icon ve description, bir de fields haritası vardır. Sekme anahtarı arama anahtarının ilk parçası olur; branding.accent, branding sekmesinin accent alanıdır.
{
"customizer": {
"dark_selector": "[data-theme=\"dark\"]",
"tabs": {
"branding": {
"label": { "tr": "Marka", "en": "Branding" },
"icon": "palette",
"fields": {
"accent": {
"type": "color",
"label": "Vurgu rengi",
"default": "#0891b2",
"css_var": "--color-accent",
"help": "Bağlantılar, butonlar ve odak halkaları."
}
}
}
}
}
}
customizer.dark_selector, koyu paletin nasıl basılacağına karar verir. Yazmazsanız varsayılan [data-theme="dark"] kullanılır. "media" yazarsanız koyu blok @media (prefers-color-scheme: dark) içine alınır; bu, düğmesi olmayan bir temaya uygundur. false yazarsanız tema mekanizmanın tamamen dışında kalır - renk alanları için koyu eş üretilmez. Başka herhangi bir metin, olduğu gibi seçici olarak kullanılır; gövde sınıfıyla mod değiştiren bir temanın çalışmaya devam etmesi böyle sağlanır.
customizer.extend_default, evrensel varsayılan şemayı temanın kendi sekmelerinin yerine geçirmek yerine onunla birleştirir. Hiç tabs bildirmeyen bir tema varsayılan şemayı zaten otomatik alır.
Alan tanımları
Her alan nesnesi ortak bir anahtar kümesini kabul eder.
| Anahtar | Not | |---|---| | type | Pratikte zorunlu - bilinmeyen ya da eksik tür düz metin kutusu olarak çizilir | | label | Düz metin ya da {tr, en} çifti | | default | Başlangıç değeri; default_tr Türkçe siteler için alternatif verir | | help | Kontrolün altındaki yardım metni | | css_var | Otomatik basılan özel özellik adı ya da ad dizisi | | placeholder | Boş girdide görünen metin | | optional | Alanı bir "Özelleştir" kutusunun arkasına alır; işaretsizken temanın kendi değeri geçerlidir | | emit_saved_only | Kullanıcı bir değer kaydedene kadar sayfaya hiçbir şey yazılmaz | | depends_on | Bu alanı yalnız başka bir alan belirli bir değeri taşırken göster | | no_dark | Bu renk alanı için otomatik koyu eşi üretme | | dark_default | Üretilen koyu eşin başlangıç değeri |
Türe özel anahtarlar ise şunlar:
| Tür | Ek anahtarlar | Nasıl saklanır | |---|---|---| | color | - | "#rrggbb" | | font | options, allow_empty | Aile adı; options yoksa ortak yazı tipi kütüphanesi kullanılır | | range / number | min, max, step, unit | Sayı | | toggle / checkbox | - | 1 / 0 | | select | options - liste ya da {"anahtar": "Etiket"} haritası | Seçenek anahtarı | | choice_cards | options; her biri label ve mock taşır | Seçenek anahtarı | | textarea / code | rows, language | Metin | | image | - | Adres ya da yol | | url / text | - | Metin |
Bir sekme ayrıca kontrollerini görsel olarak gruplamak için fields_columns ve fields_heading taşıyabilir.
layouts - sırası değiştirilebilir bölümler
layouts, bir sayfanın hangi bölümlerden kurulduğunu ve bu temanın onların hangi yeteneklerini gerçekten kullandığını bildirir. Özelleştirici her satırı sürüklenebilir bir karta dönüştürür.
{
"layouts": {
"home": [
{ "key": "hero", "variants": ["slider", "split"], "settings_allow": ["count"] },
{ "key": "latest", "settings_default": { "count": 6 } },
{ "key": "categories", "default_on": 0 }
]
}
}
key, çekirdek kayıt defterindeki bir bölümü adlandırır. variants, temanın gerçekten biçimlendirdiği varyantları beyaz listeye alır; boş dizi burada varyant olmadığı anlamına gelir. settings_allow o bölüm için gösterilen ayarları daraltır, settings_default kayıt defterindeki varsayılanı ezer, default_on: 0 ise bölümü kapalı olarak gönderir.
Hiçbir şey bildirmezseniz bölüm, kayıt defterindeki tam yetenek setiyle gelir. Temanın hiç anmadığı bölümler de - kapalı olarak - eklenir; böylece site sahibi, tema yazarının hiç bağlamadığı evrensel bir bloğu açabilir.
Destek bayrakları
supports, özelleştiriciye bu temanın hangi isteğe bağlı kontrol gruplarını gerçekten karşılayabildiğini söyler. Temanın görmezden geldiği bir kontrolü göstermek, hiç göstermemekten kötüdür; bu yüzden bu bayraklar tüm panelleri kapılar.
{ "supports": { "card_options": true, "share_styles": true, "comment_styles": true } }
Liste biçimi de - ["card_options", "share_styles"] - aynı şekilde çalışır.
Enjekte edilen özelleştirici panellerini açan bayraklar şunlar: card_options, hero_styles, hero_controls, share_styles, comment_styles, author_box_styles, sidebar_styles, section_title_styles, typography_controls ve layout_controls. Gelen manifestlerde başka bayraklar da görünür (dark_mode, widgets, menus, custom_logo gibi); bunlar niyet beyanıdır, hiçbir çekirdek modül onları okumaz.
Kart ve manşet daraltma
Üç küçük anahtar, bir temanın evrensel kart ve manşet düzeneğinin kimi parçalarından çıkmasını sağlar - kontrolün görünür hiçbir şey üretmeyeceği tasarımlar için.
card_defaults, enjekte edilen Kartlar sekmesi için bu temanın başlangıç değerlerini belirler. card_omit, gizlenecek kart kontrollerini listeler. hero_omit aynısını manşet için yapar. footer_kit_default ise temanın varsayılan alt bilgi kitini seçer.
Üst düzey colors ve fonts
colors ve fonts üst düzeyde, settings dışında da görünebilir. Tema kartındaki renk örnekleri için yedek olarak dururlar ve başka hiçbir yerde okunmazlar. Yeni bir tema paletini settings.colors altına, düzenlenebilir renklerini customizer.tabs içine koymalıdır.