Tema Yapımı
Tema = themes/<slug>/ klasörü. Çekirdek şablonları ezmez, üzerine biner: temada dosya varsa o, yoksa includes/ kullanılır (cms_theme_path()).
İskelet
themes/ornek/
theme.json # ad + açıklama (Panel → Temalar listesi buradan)
style.css # ana stil (önerilir)
functions.php # kanca kayıtları (opsiyonel)
header.php # komple üst şablon (opsiyonel, nadiren gerekir)
footer.php # komple alt şablon (opsiyonel, nadiren gerekir)
theme.json:
{"name": "Örnek", "description": "Tek cümlelik tanıtım.", "version": "1.0.0", "author": "Hexabee"}
Önerilen yol: CSS + kanca
Komple header.php kopyalamak yerine stil + kanca yeter (bakınız: Pixel Hive):
<?php
// themes/ornek/functions.php — sadece bu tema etkinken yüklenir
add_action('cms_head', function() {
$css = HEXABEE_THEME_DIR . '/ornek/style.css';
$v = is_file($css) ? filemtime($css) : 1;
echo '<link rel="stylesheet" href="/themes/ornek/style.css?v=' . $v . '">' . "\n";
});
style.css honey.css'ten sonra yüklenir — eşit özgüllükte tema kazanır. Kapatma kancası: cms_foot (</body> öncesi).
Tema seçimi
| Katman | Kaynak | Etki |
|---|---|---|
| Site varsayılanı | data/theme.json + Panel → Temalar |
Herkese |
| Ziyaretçi seçimi | Footer'daki 🎮 seçici → hx_theme çerezi |
Sadece o ziyaretçi, varsayılanı ezmez |
cms_effective_theme() ikisini çözer; default teması boş klasördür — her şeyi includes/'tan devralır, referans alınabilir.
Kurallar
- Dış font/CDN yok: CSP
font-src 'self'kilitlidir, sistem fontu +monospacekullan. prefers-reduced-motionvarsa blink/scanline gibi efektleri kapat.- Tema, kapalıyken yüklenmez — fonksiyonlarını
function_existsile sarmana gerek yok, ama çakışan isim kullanma.