15 β Block temaga kirish¶
β¬ οΈ Oldingi: 14 β Custom Fields, meta va Customizer Β· π README Β· Keyingi: 16 β theme.json I: settings β‘οΈ
Bu bobda: Shu paytgacha biz klassik tema yozdik β har bir sahifani PHP shabloni yasardi. Endi WordPress'ning zamonaviy yo'liga o'tamiz: block tema (Full Site Editing). Block temada PHP shablon fayllari o'rniga HTML blok markup fayllar va
theme.jsonturadi. Saytning butun ko'rinishini β header, footer, ranglar, shriftlar β brauzerdagi vizual Site Editor orqali, kod yozmasdan tahrirlash mumkin. Bu bob IV qismni β kitobning eng zamonaviy yarmini β ochadi.
Block tema nima va nega kerak?¶
Bizning klassik temamizda mantiq aniq edi: foydalanuvchi sahifani so'raydi, WordPress mos .php shablonni topadi (03-bobdagi template hierarchy), shablon ichidagi PHP kod HTML chiqaradi. Bu yondashuv yillar davomida ishlab keldi va hozir ham ishlaydi. Lekin bitta katta kamchiligi bor: saytning ko'rinishini o'zgartirish uchun kod yozish kerak. Mijoz "logoni o'ngga sur" desa, siz header.php ni ochib PHP/HTML tahrirlaysiz.
WordPress 5.9 dan boshlab (2022) yangi yondashuv standartga aylandi β Full Site Editing (FSE, "saytni to'liq tahrirlash"). Bu yondashuvni amalga oshiradigan tema turi block tema deyiladi. 2026-yilda, WordPress 7.0 davrida, block tema β yangi tema yaratishning asosiy usuli.
G'oya oddiy: agar postni blok editor (Gutenberg) bilan tahrirlaysiz, nega butun saytni β header, footer, sidebar, sahifa maketini β xuddi shu editor bilan tahrirlamaysiz? Block temada aynan shunday: sayt ham, kontent ham bir xil blok tilida yoziladi.
Hayotiy o'xshatish: klassik tema β bu buyurtma kostyum, uni faqat tikuvchi (dasturchi) o'zgartira oladi. Block tema β bu konstruktor (LEGO): bo'laklar tayyor, mijozning o'zi ularni surib, almashtirib, yangi ko'rinish yig'a oladi. Dasturchi konstruktorni va qoidalarni beradi, lekin kundalik o'zgarishlar uchun har safar chaqirilmaydi.
Nega block temaga o'tish kerak:
- Vizual tahrirlash. Mijoz header, footer, ranglarni Site Editor'da o'zi o'zgartiradi β sizga har mayda o'zgarish uchun murojaat qilmaydi.
- Kelajakka mos. WordPress'ning yangi imkoniyatlari (global styles, style variations, block bindings) avval block temalarga keladi. Klassik tema asta-sekin "eski" toifaga o'tmoqda.
- Kamroq kod. Maketni PHP bilan emas, blok markup bilan tasvirlaysiz; stilni CSS bilan emas,
theme.jsonbilan. Ko'p hollarda umuman PHP yozmasligingiz mumkin. - Tezroq. Block tema generatsiya qiladigan CSS faqat sahifada ishlatilgan bloklar uchun yuklanadi, JavaScript kamroq β natijada sayt yengilroq.
Diqqat: klassik tema o'lmagan. Eski saytlar, murakkab maxsus mantiq yoki mavjud klassik kod bazasi bilan ishlashda u hali ham uchraydi β shuning uchun biz uni IβIII qismlarda puxta o'rgandik. Lekin yangi loyiha boshlayotgan bo'lsangiz, standart tanlov β block tema.
Klassik vs block: asosiy farq¶
Eng muhim aqliy o'zgarish β sahifani kim yasaydi degan savolda.
Klassik temada sahifani PHP kodi yasaydi. Siz single.php ichida the_title(), the_content() kabi funksiyalarni chaqirasiz, ular HTML chiqaradi. Stil esa alohida style.css faylda β haqiqiy CSS.
Block temada sahifani blok markup yasaydi. PHP shablon fayllari umuman yo'q. Ularning o'rnida .html fayllar turadi, lekin ular ichida oddiy HTML emas, balki blok markup bor β maxsus HTML izohlari ko'rinishidagi bloklar:
Bu satrlar "shu yerda post sarlavhasi bloki, undan keyin post kontenti bloki turadi" degani. WordPress ularni o'qib, haqiqiy HTML'ga aylantiradi. Stil esa style.css da emas, theme.json da β WordPress undan CSS'ni o'zi generatsiya qiladi.
Quyidagi jadval ikki yondashuvni yonma-yon qo'yadi:
| Jihat | Klassik tema | Block tema |
|---|---|---|
| Sahifa shablonlari | index.php, single.php (PHP) |
templates/index.html, templates/single.html (blok markup) |
| Header / footer | header.php, footer.php |
parts/header.html, parts/footer.html |
| HTML kim chiqaradi | PHP funksiyalari (the_title...) |
blok markup (<!-- wp:post-title /-->) |
| Stil | style.css (haqiqiy CSS) |
theme.json (WP CSS generatsiya qiladi) |
functions.php |
deyarli majburiy | ixtiyoriy |
| Ko'rinishni kim tahrirlaydi | dasturchi (kodda) | mijoz ham (Site Editor'da) |
| Tahrirlash joyi | matn muharriri / IDE | brauzerdagi Site Editor |
Diqqat qiling: klassik temada PHP bilim juda zarur edi. Block temada uning roli kamayadi β asosiy ish blok markup va JSON bilan. Lekin PHP butunlay yo'qolmaydi: dinamik imkoniyatlar, patterns va custom bloklar uchun u baribir kerak bo'ladi (V qism).
Blok markup sintaksisi (
<!-- wp:... -->) bu bobda faqat tanishtiriladi. Uni chuqur β atributlar, ichma-ich bloklar, template part chaqiruvi β 18-bobda batafsil ko'rib chiqamiz. Hozir asosiy g'oyani tushunish kifoya:.htmlfayl ichida bloklar yashaydi.
Block tema fayl strukturasi¶
Block tema fayllari mantiqiy papkalarga ajratilgan. Quyida to'liq struktura β har biri o'z vazifasi bilan.
mening-temam/
βββ style.css # tema nomi (header izohi) β SHART
βββ theme.json # stil + sozlamalar β SHART
βββ templates/ # sahifa shablonlari (.html)
β βββ index.html # zaxira shablon (har doim bo'lsin)
β βββ single.html # bitta post
β βββ page.html # sahifa
β βββ archive.html # arxiv ro'yxati
β βββ 404.html # topilmadi
βββ parts/ # qayta ishlatiluvchi bo'laklar (.html)
β βββ header.html
β βββ footer.html
βββ patterns/ # tayyor blok to'plamlari (.php)
β βββ hero.php
βββ styles/ # stil variatsiyalari (.json)
β βββ tungi.json
βββ functions.php # ixtiyoriy (enqueue, hooks, theme support)
βββ screenshot.png # tema oynasidagi rasm (1200x900 tavsiya)
Har bir element nima qiladi:
style.css(SHART). Klassik temadagi kabi tepasida tema haqida ma'lumot (header izohi) βTheme Name,Author,Versionva hokazo. WordPress aynan shu fayl borligiga qarab papkani tema deb taniydi. Block temada uning ichida CSS deyarli bo'lmaydi (faqat kerak bo'lsa qo'shimcha tuzatishlar); asosiy stiltheme.jsonda.theme.json(SHART). Block temani block tema qiladigan eng muhim fayl. Ranglar palitrasi, shriftlar, oraliqlar, maket o'lchamlari β hammasi shu yerda. WordPress undan saytning CSS'ini avtomatik generatsiya qiladi. 16- va 17-boblar to'liq shu faylga bag'ishlangan.templates/. Sahifa shablonlari. Klassik temadagiindex.php,single.phpning ekvivalenti, lekin.htmlva blok markup bilan. Nomlash mantig'i bir xil β template hierarchy (03-bob) block temada ham ishlaydi. Minimal talab:index.html.parts/. Template part'lar β bir nechta shablonda qayta ishlatiladigan bo'laklar. Odatdaheader.htmlvafooter.html. Klassikget_header()/get_footer()ning ekvivalenti.patterns/. Block pattern'lar β tayyor blok to'plamlari (masalan hero bo'limi, narx jadvali). Foydalanuvchi ularni bir bosishda sahifaga qo'ya oladi..phpfayl, tepasida maxsus izoh-header. 20-bobda batafsil.styles/. Style variation'lar β temaning muqobil ko'rinishlari (masalan "tungi rejim", boshqa rang sxemasi). Har biri kichik.jsonfayl. 19-bobda batafsil.functions.php(ixtiyoriy). Klassik temada bu deyarli majburiy edi; block temada esa ixtiyoriy. Kerak bo'ladigan holatlar: o'z shriftingizni yoki skriptni ulash (enqueue, 10-bob), pattern kategoriyasini ro'yxatga olish, dinamik blok yoki maxsus hook. Oddiy block temada umuman bo'lmasligi mumkin.
Klassik tema bilan solishtiring: u yerda
header.php,footer.php,sidebar.php,functions.phpdeyarli har doim kerak edi. Block temada esa eng kam zarur fayl atigi ikkita:style.css(tema nomi uchun) vatheme.json(stil uchun), plus kamida bitta shablon βtemplates/index.html.
Minimal block tema¶
Eng kichik ishlaydigan block tema atigi uchta fayldan iborat:
style.cssβ tema nomi uchun (faqat header izohi).theme.jsonβ stil va sozlamalar uchun.templates/index.htmlβ kamida bitta shablon.
Ana shu uchtasi bilan WordPress papkani to'liq block tema deb taniydi, aktivlashtirsa bo'ladi va Site Editor ham ochiladi. (Bu bobning oxirida aynan shunday temani yaratdik va jonli WordPress 7.0 da uni tasdiqladik β soxta emas.)
1) style.css β diqqat: barcha qatorlar izoh (/* ... */) ichida, CSS qoida emas. WordPress shu yerdan tema nomini o'qiydi:
/*
Theme Name: Mening Block Temam
Author: Oqil Imomnazarov
Description: Minimal block tema namunasi.
Requires at least: 6.7
Tested up to: 7.0
Requires PHP: 8.0
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: mening-block-temam
Tags: full-site-editing, blog, one-column
*/
style.css header maydonlarini 04-bobda batafsil o'rgangandik β block temada ham aynan o'sha maydonlar. Yagona farq: Tags ichiga full-site-editing qo'shilsa, tema katalogida block tema deb belgilanadi.
2) theme.json β eng minimal varianti version va bo'sh settings/styles dan iborat bo'lishi mumkin, lekin amalda kamida bir nechta sozlama qo'shamiz. theme.json β bu JSON fayl, demak sintaksisi qat'iy: kalitlar qo'shtirnoqda, oxirgi elementdan keyin vergul yo'q, izoh yozib bo'lmaydi.
{
"$schema": "https://schemas.wp.org/wp/6.7/theme.json",
"version": 3,
"settings": {
"appearanceTools": true,
"layout": {
"contentSize": "640px",
"wideSize": "1000px"
},
"color": {
"palette": [
{ "slug": "base", "color": "#ffffff", "name": "Asosiy fon" },
{ "slug": "contrast", "color": "#1e293b", "name": "Matn" },
{ "slug": "primary", "color": "#2563eb", "name": "Brend" }
]
}
},
"styles": {
"color": {
"background": "var:preset|color|base",
"text": "var:preset|color|contrast"
}
}
}
Hozir har bir kalitni yodlash shart emas β version: 3 block tema uchun majburiy, settings foydalanuvchiga nima ruxsat berishni belgilaydi, styles esa sayt ko'rinishini. To'liq tushuntirish 16β17-boblarda.
Nega
version: 3? Bu βtheme.jsonformati versiyasi (WordPress versiyasi emas). WordPress 7.0 davrida eng so'nggi format β 3. Twenty Twenty-Five referens temasi hamversion: 3ishlatadi.
3) templates/index.html β eng oddiy shablon: sayt sarlavhasi va postlar ro'yxati. Ichidagi <!-- wp:... --> satrlari β bloklar:
<!-- wp:group {"tagName":"main","layout":{"type":"constrained"}} -->
<main class="wp-block-group">
<!-- wp:site-title {"level":1} /-->
<!-- wp:query {"queryId":1,"query":{"inherit":true}} -->
<div class="wp-block-query">
<!-- wp:post-template -->
<!-- wp:post-title {"isLink":true} /-->
<!-- wp:post-excerpt /-->
<!-- /wp:post-template -->
</div>
<!-- /wp:query -->
</main>
<!-- /wp:group -->
Bu markup nima qiladi: core/group bloki <main> konteyner yasaydi; ichida core/site-title sayt nomini chiqaradi; core/query bloki esa main query'dan ("inherit":true β 05-bobdagi The Loop'ning block ekvivalenti) postlarni oladi va har biri uchun sarlavha (post-title) hamda qisqacha matn (post-excerpt) ko'rsatadi.
Bu yerda ishlatilgan barcha blok nomlari (core/group, core/site-title, core/query, core/post-template, core/post-title, core/post-excerpt) β jonli WordPress 7.0 da ro'yxatdan o'tgan haqiqiy core bloklar (tasdiqlangan).
Diqqat: minimal temada
parts/header.htmlvaparts/footer.htmlbo'lmasligi mumkin β shablon o'zi to'liq sahifani tasvirlaydi. Ammo amaliy temada header/footer'ni alohidaparts/ga chiqarish to'g'ri yondashuv (18-bob), xuddi klassik temadaget_header()ishlatganimizdek.
Site Editor bilan tahrirlash¶
Block temaning eng kuchli tomoni β Site Editor (Sayt muharriri). Block tema aktiv bo'lsa, admin panelda Appearance > Editor (Ko'rinish > Muharrir) menyusi paydo bo'ladi. Bu klassik temadagi mavjud bo'lmagan, butunlay yangi imkoniyat.
Site Editor ichida nimalarni tahrirlash mumkin:
- Templates (Shablonlar).
templates/papkangizdagi har bir shablonni (index, single, page, 404...) brauzerda vizual ochib, bloklarni surib o'zgartirasiz. Saqlasangiz, o'zgarish ma'lumotlar bazasiga yoziladi (faylga emas β bu muhim nuans). - Template Parts (Bo'laklar).
parts/papkangizdagi header, footer kabi bo'laklarni tahrirlaysiz. Bir joyda o'zgartirsangiz, undan foydalangan barcha shablonda yangilanadi. - Styles (Global stil).
theme.jsonda belgilangan ranglar, shriftlar, oraliqlarni vizual o'zgartirasiz. Bu βtheme.jsonning grafik usti. Style variation'lar (styles/) ham shu yerda almashtiriladi. - Navigation (Menyu). Sayt menyusini bevosita tahrirlaysiz. Klassik temadagi
wp_nav_menuva Walker (11-bob) o'rnini bu yerda navigation bloki egallaydi. - Pages (Sahifalar). Mavjud sahifalarni Site Editor kontekstida ko'rib, ularning maketini sozlaysiz.
Eng muhim tushuncha β ikki manba. Block tema fayllari (templates/*.html) β bu boshlang'ich nuqta (default). Foydalanuvchi Site Editor'da o'zgartirsa, o'zgartirilgan versiya ma'lumotlar bazasida saqlanadi va faylnikidan ustun bo'ladi. Site Editor'da "Clear customizations" (sozlamalarni tozalash) bossangiz, baza versiyasi o'chib, yana fayl versiyasiga qaytiladi. Shuning uchun siz, dasturchi, fayllarni yozasiz; mijoz esa baza orqali ularni moslaydi β bir-biriga xalal bermaydi.
Klassik temada bunday narsa yo'q edi: shablonni o'zgartirish faqat
.phpfaylni qo'lda tahrirlash demakdi va mijoz buni qila olmasdi (yoki Theme File Editor orqali xavfli tarzda qilardi). Block temada esa tahrirlash xavfsiz, vizual va orqaga qaytariladigan.
Qachon klassik, qachon block tema tanlash?¶
Block tema standart bo'lsa-da, har bir loyiha uchun emas. To'g'ri tanlov uchun yo'riqnoma:
Block tema tanlang, agar:
- yangi loyiha boshlayotgan bo'lsangiz (eng keng tarqalgan holat);
- mijoz saytni o'zi tahrirlay olishini xohlasa (kontent + dizayn);
- zamonaviy, kelajakka mos, yengil tema kerak bo'lsa;
- dizayn standart blok imkoniyatlariga (ranglar, shriftlar, maketlar) sig'sa.
Klassik tema (yoki hybrid) tanlang, agar:
- mavjud katta klassik kod bazasini qo'llab-quvvatlayotgan bo'lsangiz;
- juda murakkab, blok tizimiga sig'maydigan maxsus PHP mantiq kerak bo'lsa;
- jamoangiz hali blok yondashuviga o'tmagan bo'lsa va muddat tig'iz bo'lsa;
- eski WordPress (FSE'gacha) bilan moslik talab qilinsa (kamdan-kam).
Uchinchi yo'l ham bor β hybrid tema: block templates'dan foydalanasiz, lekin functions.php bilan klassik imkoniyatlarni ham qo'shasiz. Bu klassikdan block'ga bosqichma-bosqich o'tishning amaliy usuli. Hybrid temalarni 21-bobda alohida ko'rib chiqamiz.
Maslahat: bu kitobda biz IβIII qismda klassik temani puxta o'rgandik (ish bozori va eski saytlar uchun zarur), endi IV qismda block temaga to'liq sho'ng'iymiz. Ikkalasini ham bilish β sizni har qanday WordPress loyihasiga tayyor mutaxassis qiladi.
Referens tema. Block tema sintaksisini o'rganishning eng yaxshi yo'li β WordPress bilan kelgan Twenty Twenty-Five temasini o'qish. U
theme.json,templates/,parts/,patterns/,styles/β hammasini to'g'ri, zamonaviy tarzda ko'rsatadi. Keyingi boblarda biz unga bir necha bor murojaat qilamiz.
Mashqlar¶
Oson¶
-
Bo'sh papkadan boshlab minimal block tema yarating:
style.css(faqat header izohi,Theme Name: Mening Birinchi Block),theme.json(version: 3vaappearanceTools: true) vatemplates/index.html(faqat bittacore/paragraphbloki "Salom, block tema!" matni bilan). Uchta fayl ham joyida bo'lsin. -
O'z
theme.jsonfaylingizning yaroqli JSON ekanini tekshiring:php -r "var_dump(json_decode(file_get_contents('theme.json')) !== null);"buyrug'ibool(true)qaytarsin. -
Quyidagi fayllarning qaysilari block temaga, qaysilari klassik temaga tegishli ekanini belgilang:
single.php,templates/single.html,theme.json,header.php,parts/header.html,functions.php. -
Block temaning eng kam zarur uchta faylini nomlang va har birining vazifasini bir jumlada yozing.
O'rta¶
-
templates/index.htmlga sayt sarlavhasini qo'shadigan blok markup yozing:core/group(tagName: main) ichidacore/site-titlebloki, undan keyincore/site-taglinebloki. Markup to'g'ri ochilib-yopilsin (<!-- wp:... -->...<!-- /wp:... -->). -
Quyidagi buzuq
theme.jsonning xatosini toping va tuzating (JSON sifatida yaroqsiz):
{
"version": 3,
"settings": {
"color": {
"palette": [
{ "slug": "brand", "color": "#2563eb", "name": "Brend" },
]
},
}
}
-
Klassik temadagi
header.php+get_header()mexanizmining block temadagi ekvivalentini tushuntiring: qaysi fayl, qaysi papka, qaysi blok markup ishlatiladi? -
theme.jsonga uchta rangdan iborat palitra qo'shing (baseoq,contrastto'q kulrang#1e293b,primaryko'k#2563eb) va uni yaroqli JSON ekanini tekshiring.
Qiyin¶
-
To'liq minimal block tema yarating va uni jonli WordPress'da (yoki o'z lokal o'rnatmangizda) WP-CLI bilan inactive holatda ko'rinishini tasdiqlang (
wp theme list). Temani aktivlashtirmang β faqat ro'yxatda paydo bo'lishini ko'rsating. -
templates/index.htmlga The Loop'ning block ekvivalentini yozing:core/querybloki ("query":{"inherit":true}bilan, ya'ni main query'dan meros oladi), ichidacore/post-template, uning ichidacore/post-title(isLink: true) vacore/post-excerpt. Sahifa postlar ro'yxatini ko'rsatsin. -
Bitta loyihaga qaror qabul qiling: "Mijoz kichik biznes uchun sayt so'radi, kelajakda kontentni o'zi yangilab turmoqchi, dizayn standart (ranglar/shriftlar/oddiy maketlar). Byudjet va muddat o'rtacha." β block, klassik yoki hybrid temani tanlang va kamida uchta sabab bilan asoslang.
-
Klassik temadagi quyidagi fayllar to'plamini block tema ekvivalentlariga moslang (jadval ko'rinishida):
index.php,single.php,header.php,footer.php,style.css(CSS bilan),functions.php. -
Referens sifatida Twenty Twenty-Five temasining
templates/index.htmlfaylini o'qing (yoki o'z lokal WP'ngizdagisini). U qaysi bloklardan foydalanadi va negaparts/header.htmlni to'g'ridan-to'g'ri emas,core/template-partbloki orqali chaqiradi β tushuntiring. -
Hybrid tema g'oyasini bir nechta jumlada tasvirlang: block templates ishlatib, lekin
functions.phpni ham saqlash qaysi holatlarda foydali? Klassikdan block'ga bosqichma-bosqich o'tishda bu qanday yordam beradi?
Yechimlar¶
Yechim β 1
Uch fayl. Papka strukturasi:
mening-birinchi-block/
βββ style.css
βββ theme.json
βββ templates/
βββ index.html
style.css (faqat header izohi):
/*
Theme Name: Mening Birinchi Block
Author: Oqil Imomnazarov
Description: Birinchi minimal block tema.
Version: 1.0.0
Requires at least: 6.7
Tested up to: 7.0
Requires PHP: 8.0
License: GNU General Public License v2 or later
Text Domain: mening-birinchi-block
Tags: full-site-editing
*/
theme.json:
{
"$schema": "https://schemas.wp.org/wp/6.7/theme.json",
"version": 3,
"settings": {
"appearanceTools": true
}
}
templates/index.html:
Uch fayl tayyor bo'lsa, WordPress papkani block tema deb taniydi va aktivlashtirsa bo'ladi.
Yechim β 2
Agar JSON yaroqli bo'lsa β bool(true). Yaroqsiz bo'lsa β bool(false). Sababni ko'rish uchun:
Yaroqli faylda No error, buzuqida esa aniq xabar (masalan Syntax error) chiqadi. (Shu bob verifikatsiyasida aynan shu usul bilan ch15-test temasining theme.json faylini tekshirdik β natija: VALID JSON.)
Yechim β 3
| Fayl | Tema turi |
|---|---|
single.php |
Klassik (PHP shablon) |
templates/single.html |
Block (blok markup) |
theme.json |
Block (stil + sozlamalar) |
header.php |
Klassik (get_header() chaqiradi) |
parts/header.html |
Block (template part) |
functions.php |
Ikkalasida ham bo'lishi mumkin β klassikda deyarli majburiy, block'da ixtiyoriy |
Kalit: .php shablon va header.php/footer.php β klassik belgisi; .html shablon, theme.json, parts/, templates/ papkalar β block belgisi.
Yechim β 4
style.cssβ tema nomi va ma'lumotlari (header izohi). WordPress papkani aynan shu fayl borligiga qarab tema deb taniydi.theme.jsonβ stil (ranglar, shriftlar, oraliqlar) va sozlamalar. WordPress undan saytning CSS'ini generatsiya qiladi; bu fayl block temani block tema qiladi.templates/index.htmlβ kamida bitta sahifa shabloni. Block markup bilan sahifa maketini tasvirlaydi (klassikindex.phpekvivalenti).
Yechim β 5
<!-- wp:group {"tagName":"main","layout":{"type":"constrained"}} -->
<main class="wp-block-group">
<!-- wp:site-title {"level":1} /-->
<!-- wp:site-tagline /-->
</main>
<!-- /wp:group -->
Tushuntirish: core/group bloki <main> konteyner yasaydi (tagName: main). Ichida core/site-title sayt nomini <h1> darajada (level: 1) chiqaradi, core/site-tagline esa sayt shiorini. O'z-o'zini yopadigan bloklar /--> bilan tugaydi (ichki kontenti yo'q), core/group esa <!-- /wp:group --> bilan yopiladi (ichida boshqa bloklar bor).
Yechim β 6
Ikki xato β ikkalasi ham ortiqcha vergul (trailing comma). JSON oxirgi element/kalitdan keyin vergulga ruxsat bermaydi (PHP massividan farqli o'laroq).
palettemassivining oxirgi obyektidan keyin vergul.colorobyektidan keyin (ya'nisettingsning oxirgi kalitidan keyin) vergul.
Tuzatilgan, yaroqli JSON:
{
"version": 3,
"settings": {
"color": {
"palette": [
{ "slug": "brand", "color": "#2563eb", "name": "Brend" }
]
}
}
}
php -r "json_decode(...); echo json_last_error_msg();" endi No error qaytaradi. (Buzuq variant Syntax error berardi.)
Yechim β 7
Klassik temada header.php faylni get_header() chaqirar va sahifaga qo'shar edi. Block temadagi ekvivalenti:
- Fayl:
parts/header.html(.phpemas,.html; alohidaparts/papkasida). - Chaqirish: PHP funksiya bilan emas, template part bloki bilan:
Bu satr "shu yerga parts/header.html ni qo'sh" degani.
- theme.json'da ro'yxat (tavsiya): templateParts ro'yxatiga header ni area: "header" bilan kiritish β Site Editor uni to'g'ri toifaga joylashtiradi.
Demak: get_header() -> core/template-part bloki; header.php -> parts/header.html.
Yechim β 8
{
"$schema": "https://schemas.wp.org/wp/6.7/theme.json",
"version": 3,
"settings": {
"color": {
"palette": [
{ "slug": "base", "color": "#ffffff", "name": "Asosiy fon" },
{ "slug": "contrast", "color": "#1e293b", "name": "Matn" },
{ "slug": "primary", "color": "#2563eb", "name": "Brend" }
]
}
}
}
Tekshirish:
bool(true) qaytishi kerak. Diqqat: oxirgi palitra elementidan keyin vergul yo'q, har bir kalit qo'shtirnoqda.
Yechim β 9
Avval uch faylli minimal temani yarating (Yechim 1 dagi kabi) va WP'ning wp-content/themes/ papkasiga joylang, masalan mening-block-test/ nomi bilan.
Keyin WP-CLI bilan ro'yxatni ko'ring (temani aktivlashtirmasdan):
Natijada temangiz inactive holatda ko'rinishi kerak:
status ustunida inactive bo'lsa β WordPress temani to'g'ri tanidi, lekin aktiv emas. (Aynan shu jarayonni bu bob verifikatsiyasida bajardik: ch15-test temasi inactive holatda ro'yxatda chiqdi, aktiv tema o'zgarmadi.) Temani aktivlashtirish β keyingi (markaziy) bosqich; parallel ishda bir saytni bir nechta tema talashmasligi uchun bu yerda aktivlashtirmaymiz.
Yechim β 10
<!-- wp:query {"queryId":1,"query":{"inherit":true}} -->
<div class="wp-block-query">
<!-- wp:post-template -->
<!-- wp:post-title {"isLink":true} /-->
<!-- wp:post-excerpt /-->
<!-- /wp:post-template -->
</div>
<!-- /wp:query -->
Tushuntirish:
core/queryβ postlar so'rovi bloki."inherit":trueβ main query'dan (joriy sahifaga mos so'rov) meros oladi, ya'ni 05-bobdagi The Loop'ning block ekvivalenti. Klassikhave_posts()/the_post()siklini bu blok o'rnini bosadi.core/post-templateβ har bir post uchun ichidagi bloklarni takrorlaydi (sikl tanasi).core/post-title(isLink: true) β post sarlavhasi, postga havola bilan.core/post-excerptβ post qisqacha matni.
Bu markup'dagi barcha blok nomlari jonli WordPress 7.0 da ro'yxatdan o'tgan (tasdiqlangan).
Yechim β 11
Tanlov: block tema.
Sabablar:
- Mijoz kontentni o'zi yangilamoqchi β block tema Site Editor beradi, mijoz dizayn va kontentni kod yozmasdan o'zgartiradi.
- Dizayn standart β ranglar, shriftlar, oddiy maketlar block tema imkoniyatlariga to'liq sig'adi; maxsus PHP mantiq talab etmaydi.
- Kelajakka mos va yengil β kichik biznes sayti uzoq ishlaydi; block tema yangi imkoniyatlarni avval oladi va tezroq yuklanadi (kamroq CSS/JS).
- O'rtacha byudjet/muddat β block temada PHP/CSS kam yoziladi, ko'p ish Site Editor'da bajariladi; bu vaqt va xarajatni tejaydi.
(Hybrid faqat keyinchalik maxsus PHP mantiq paydo bo'lsa kerak bo'ladi; klassik bu holatda asossiz β eski yondashuv, mijozga o'zi tahrirlash imkonini bermaydi.)
Yechim β 12
| Klassik fayl | Block tema ekvivalenti |
|---|---|
index.php |
templates/index.html (blok markup) |
single.php |
templates/single.html |
header.php |
parts/header.html (+ core/template-part bloki orqali chaqiriladi) |
footer.php |
parts/footer.html (+ core/template-part bloki) |
style.css (CSS bilan) |
style.css (faqat header) + stil theme.json da |
functions.php |
functions.php (ixtiyoriy) yoki butunlay yo'q |
Asosiy o'zgarish: PHP shablonlar -> .html blok markup; CSS -> theme.json; get_header() -> core/template-part bloki.
Yechim β 13
Twenty Twenty-Five ning templates/index.html (referens) odatda quyidagicha:
<!-- wp:template-part {"slug":"header"} /-->
<!-- wp:group {"tagName":"main", ...} -->
<main class="wp-block-group">
<!-- wp:pattern {"slug":"twentytwentyfive/..."} /-->
</main>
<!-- /wp:group -->
<!-- wp:template-part {"slug":"footer"} /-->
Asosiy bloklar: core/template-part (header/footer), core/group (<main> konteyner), core/pattern (tayyor blok to'plamini chaqirish β masalan postlar ro'yxati).
Nega parts/header.html ni to'g'ridan-to'g'ri emas, core/template-part orqali? Chunki template part bloki β bu havola, nusxa emas. parts/header.html ni bitta joyda o'zgartirsangiz, undan foydalangan barcha shablonda yangilanadi (index, single, page...). Agar har shablonga header markup'ini nusxa qilsangiz, o'zgartirishda hammasini qo'lda tuzatishga to'g'ri kelardi. Bu β klassik get_header() bergan DRY foydaning aynan o'zi, block tilida.
Yechim β 14
Hybrid tema β block templates (templates/*.html, parts/*.html, theme.json) bilan ishlaydi, lekin functions.php ni ham saqlaydi va undan klassik imkoniyatlardan foydalanadi (hook'lar, custom skript/stil enqueue, custom post type, maxsus PHP mantiq).
Qachon foydali:
- Maxsus PHP mantiq kerak β masalan tashqi API bilan ishlash, murakkab shartli logika yoki dinamik blok (
render_callback), bunifunctions.phpda yozasiz. - Mavjud klassik kod β eski temadagi
functions.phpmantiqini saqlab qolib, sekin-asta shablonlarni block'ga ko'chirasiz. - Bosqichma-bosqich o'tish β butun temani bir kunda block'ga aylantirish o'rniga: avval
theme.jsonqo'shasiz, keyin bitta-bitta shablonni.phpdan.htmlga ko'chirasiz,functions.phpesa o'tish davomida ishlab turadi. Sayt har qadamda ishlaydi, katta xavfli "katta portlash" bo'lmaydi.
Bu strategiya 21-bobda batafsil ko'rib chiqiladi.
β¬ οΈ Oldingi: 14 β Custom Fields, meta va Customizer Β· π README Β· Keyingi: 16 β theme.json I: settings β‘οΈ