WordPress Child Tema Stilləri Yüklənmir
Child temanızın style.css faylı yüklənmir, çünki WordPress onu sizin əvəzinizə enqueue etmir. Child temanın stil faylı əl ilə child temanın functions.php faylında qeydiyyatdan keçirilməlidir.
Nəşr olundu
Child temanızın style.css faylı yüklənmir, çünki WordPress onu sizin əvəzinizə enqueue etmir. Child temanın stil faylı child temanın functions.php faylında əl ilə qeydiyyatdan keçirilməlidir və bu enqueue demək olar ki, həmişə iki səhvdən birini daşıyır: ya heç mövcud deyil, ya da valideyn stil faylını asılılıq (dependency) kimi bəyan etmədən yüklənir, nəticədə qaydalarınız cascade-də yanlış yerə düşür və üzərinə yazılır. Enqueue-nu düzəldin, stillər geri qayıdacaq. Yəqin ki, 2013-cü ilin bir dərsliyindən köçürdüyünüz köhnə @import üsulu isə yanlış həlldir.
Niyə baş verir
Klassik child tema iki tələb olunan fayldan ibarətdir: valideyni adlandıran header blokuna malik style.css və bir functions.php. Header-in Template: sətri WordPress-ə şablonları hansı valideyndən miras alacağını bildirir. WordPress avtomatik olaraq yalnız bunu edir. O, header-i oxuyur, şablon fallback-ini qurur və dayanır. Ön tərəfdə (front end) sizin child style.css faylınızı heç vaxt enqueue etmir.
Valideyn tema isə öz stil faylını öz functions.php faylından, wp_enqueue_scripts hook-una qoşulmuş şəkildə enqueue edir. Sizin child functions.php faylınız əvvəl işləyir, sonra valideynin, sonra da həmin hook-dakı hər şey işə düşür. Əgər child faylınız öz faylı üçün wp_enqueue_style çağırmırsa, brauzer onu heç vaxt tələb etmir. Səhifə xam valideyn tema kimi görünür, çünki o, dəqiq elə budur.
İkinci uğursuzluq daha incədir. Child stil faylını enqueue edirsiniz, o yüklənir, amma override-larınız heç bir təsir etmir. Bu, yükləmə sırası problemidir. İki qaydanın specificity-si bərabər olduqda, sonuncu yüklənən qalib gəlir. Əgər child CSS-iniz valideyndən əvvəl yüklənirsə, hər bərabərlikdə valideyn qalib gəlir. wp_enqueue_style-dakı asılılıq massivi (dependency array) sıranı məcbur edən şeydir.
İnsanların yanlış etdiyi bir şey də: get_template_directory_uri() valideyn tema qovluğunu, get_stylesheet_directory_uri() isə aktiv (child) tema qovluğunu göstərir. Onları qarışdırsanız, valideynin style.css faylını ikinci dəfə enqueue edir və child-a heç toxunmursunuz.
Həll yolu, sıra ilə
Əvvəlcə əslində nəyin yükləndiyini təsdiqləyin. Sınıq səhifəni açın, mənbə koduna baxın (view source) və child tema qovluğunuzun adını axtarın. WordPress enqueue edilmiş stilləri <link id="handle-css" href="..."> şəklində render edir — id sizin handle-iniz plus -css-dir. Əgər child style.css faylınız <head>-də ümumiyyətlə yoxdursa, enqueue işləmir. Əgər oradadırsa amma stillər tətbiq olunmursa, bu asılılıq/sıra problemidir. Bu bir yoxlama sizə iki səhvdən hansına sahib olduğunuzu deyir.
İkincisi, valideynin əsl handle-ini tapın. Əksər müasir temalar (Astra, GeneratePress, Twenty-* temaları) öz stil faylını artıq müəyyən bir handle altında enqueue edir — astra-theme-css, generate-style-css, twenty-twenty-four-style və s. Sizə həmin dəqiq sətir lazımdır. Valideyn temanı grep edin, yaxud mənbə kodundakı <link id="...-css">-dən oxuyun (sondakı -css-i atın).
Üçüncüsü, enqueue-nu yazın. Valideyn öz stil faylını artıq yüklədiyi ümumi hal üçün valideyni yenidən enqueue etmirsiniz. Yalnız child-ı enqueue edir və sizinki ondan sonra yüklənsin deyə valideynin handle-ini asılılıq kimi göstərirsiniz:
<?php
add_action( 'wp_enqueue_scripts', 'child_enqueue_styles', 20 );
function child_enqueue_styles() {
wp_enqueue_style(
'child-style',
get_stylesheet_directory_uri() . '/style.css',
array( 'astra-theme-css' ), // <-- the parent's REAL handle
wp_get_theme()->get( 'Version' )
);
}
Əgər valideyn tema öz stil faylını enqueue etmirsə (bəzi köhnə və ya minimal temalar @import-a güvənir), onda hər ikisini enqueue edin və child-ı valideyndən asılı edin:
<?php
add_action( 'wp_enqueue_scripts', 'child_enqueue_styles' );
function child_enqueue_styles() {
wp_enqueue_style(
'parent-style',
get_template_directory_uri() . '/style.css'
);
wp_enqueue_style(
'child-style',
get_stylesheet_directory_uri() . '/style.css',
array( 'parent-style' ),
wp_get_theme()->get( 'Version' )
);
}
wp_get_theme()->get('Version') arqumenti sizin cache-buster-inizdir. Child-ın style.css header-indəki Version: sətrini artırın, brauzerlər yenidən götürəcək. Onu buraxsanız, CSS-i redaktə edib heç nəyin dəyişmədiyinə and içəcəksiniz, halbuki sadəcə keşlənib.
Əgər functions.php-də sintaksis səhvi varsa, bütün fayl səssizcə ölür və enqueue-larınızın heç biri işləmir — bu, dəqiq “stillər yüklənmir” kimi görünür. WP_DEBUG-ı aktivləşdirin, yaxud fatal-ı tez tapmaq üçün debug.log-unuzu bizim WordPress error log dekoderimizə yapışdırın.
Nə etməməli
@import istifadə etməyin. Codex dövrünün məsləhəti child style.css-in yuxarısına @import url("../parenttheme/style.css"); qoymaq idi. İşləyir, amma yavaşdır — brauzer child CSS-i parse edənə qədər valideyn CSS-i yükləməyə başlaya bilmir, ona görə də iki tələb paralel yerinə ardıcıl işləyir. WordPress-in öz təlimatı illərdir buna qarşı tövsiyə verir. Əgər dərsliyiniz sizə bunu deməyibsə, stillərinizin nasaz olmasının səbəbi məhz həmin dərslikdir.
'parent-style' handle-ini hardcode edib valideyn faylını kor-koranə enqueue etməyin. Məşhur Codex snippet-i dəqiq bunu edir və stil faylını artıq fərqli handle altında qeydiyyatdan keçirən istənilən tema üçün yanlışdır. Nəticədə valideyn CSS-i iki dəfə yükləyir və asılılığınız mövcud olmaya bilən bir handle-a işarə edir.
wp_enqueue_style-ı functions.php-in ən üst səviyyəsində çağırmayın. O, wp_enqueue_scripts-ə qoşulmuş bir funksiyanın içində işləməlidir. Çox erkən çağırılırsa, heç nə etmir.
Valideynin bütün functions.php faylını child-a köçürməyin. Hər ikisi yüklənir; child-ınki əvvəl işləyir. Onu köçürmək təkrarlanan funksiya bəyanlarına və fatal səhvə səbəb olur.
Bir qeyd: bunların hamısı klassik (PHP-şablonlu) temalarla bağlıdır. Əgər valideyniniz blok temadırsa, stilləşmə əsasən theme.json və Sayt Redaktoru (Site Editor) vasitəsilə axır və style.css override-ları fərqli davranır — buna daha az güvənərdim və bu enqueue-nun həll olduğunu fərz etmək əvəzinə birbaşa test edərdim.
Hələ də ilişib qalmısınız?
Child-ın style.css header-indəki Template: sətrinin valideynin qovluq adı ilə dəqiq uyğun gəldiyini yoxlayın, hərf reqistrinə həssas şəkildə — valideynin göstərilən adı ilə deyil. Sonra mənbə kodunu yenidən yoxlayın: handle mövcuddur, valideyndən sonra yüklənir, versiya query sətri artırılıb. Əgər <link> oradadırsa, sonuncu yüklənirsə və CSS hələ də tətbiq olunmursa, bu artıq enqueue problemi deyil — bu specificity-dir və həll qaydaların özünə keçir.