Child themes (eller âbarntemanâ) i WordPress kan verka krĂ„ngliga och onödiga för den oerfarne. Jag fick en förfrĂ„gan om jag kunde skriva en artikel om just child themes, och sjĂ€lvklart kan jag göra det.
Sanningen Ă€r att child themes inte Ă€r sĂ„ krĂ„ngliga som mĂ„nga tror, och det finns flera fördelar med dem. I den hĂ€r artikeln kommer jag berĂ€tta vad child themes Ă€r och dess fördelar, men Ă€ven vilka nackdelar det finns med dem. Sedan kommer jag gĂ„ igenom hur de fungerar och till slut hur man skapar ett child theme â allt förklarat pĂ„ ett sĂ€tt som Ă€r barnsligt enkelt att förstĂ„.
Vad Àr child themes?
Vi ska börja med att klargöra vad child themes inte Àr; att ett tema kallas för just barntema betyder inte att det har nÄgot med barn att göra, utan pekar istÀllet pÄ var i hierarkin temat ligger. Jag skulle hellre kalla dessa teman för underteman som faktiskt sÀger lite mer om vad det Àr för nÄgot, men eftersom att bÄde child theme och barntema anvÀnds flitigt sÄ ska Àven jag göra det.
Ett child theme Àr med andra ord ett tema som utgÄr frÄn ett vanligt tema, vanligtvis kallat för förÀlder- eller huvudtema. Det Àr den enklaste formen av WordPress-tema, och att göra Àndringar genom ett child theme istÀllet för direkt i huvudtemat har flera fördelar:
- NÀr huvudtemat uppdateras sÄ försvinner inte dina Àndringar.
- GĂ„r (ofta) snabbare att jobba med.
- Enklare att jobba med för nybörjare.
Men, som med det mesta, sÄ finns det Àven nackdelar:
- Man anvÀnder sig oftast av
@import
, vilket Àr dÄligt för webbplatsens prestanda. - Vid mÄnga Àndringar blir stilmallarna onödigt lÄnga.
Ifall man har höga krav pÄ prestandan och har tÀnkt göra vÀldigt mÄnga Àndringar sÄ Àr det med andra ord bÀttre att göra ett vanligt tema Àn ett barntema. För de flesta gÄr det dock alldeles utmÀrkt att köra med ett barntema.
VÀrt att veta Àr att det inte gÄr att skapa ett barntema med ett annat barntema som förÀlder.
Hur fungerar child themes?
I mina exempel kommer jag utgĂ„ frĂ„n ett barntema som vi kallar âMitt temaâ. Hur du skapar ett barntema kommer jag berĂ€tta mer om senare i denna artikel.
I âMitt temaâ har vi endast följande filer:
- style.css
- header.php
- footer.php
- functions.php
NÀr man arbetar med child themes finns det frÀmst tvÄ saker man ska komma ihÄg:
- De PHP-filer som inte finns i barntemat hÀmtas istÀllet frÄn huvudtemat.
- Undantaget Àr
functions.php
 dĂ€r bĂ„da hĂ€mtas â först frĂ„n barntemat, dĂ€refter frĂ„n huvudtemat.
För att göra detta Ànnu enklare att förstÄ sÄ har jag gjort nedanstÄende illustration med vÄrt exempel.
WordPress tittar först om filen finns i barntemat â ifall den inte finns sĂ„ hĂ€mtas den istĂ€llet frĂ„n huvudtemat. Detta innebĂ€r att nĂ€r du arbetar med barnteman ska du bara kopiera över de PHP-filer som du har tĂ€nkt Ă€ndra nĂ„got i. NĂ€r det i framtiden kommer en uppdatering till huvudtemat sĂ„ kan du lugnt hĂ€mta uppdateringen utan att de Ă€ndringar du gjort försvinner.
Och functions.php?
Som jag berÀttade tidigare sÄ hÀmtas filen functions.php
 först frÄn barntemat och sedan frÄn huvudtemat. Detta gör sÄ att du kan ersÀtta funktioner i huvudtemat med dina egna.
I ett vanligt tema kan en funktion i filen till exempel se ut sÄ hÀr:
if(!function_exists('do_something'))
{
function do_something()
{
//Gör nÄgot
}
}
Eftersom koden kontrollerar sÄ att funktionen do_something()
inte redan existerar, och för att koden kommer köras efter vÄr egen functions.php
, sÄ kan vi enkelt ersÀtta funktionen med vÄr egen:
function do_something()
{
//Gör nÄgot annat
}
Hur skapar man ett child theme?
Att skapa ett barntema Ă€r vĂ€ldigt enkelt. Ăppna mappen /wp-content/themes/
 och skapa en ny mapp dĂ€r. Det Ă€r en god vana att döpa mappen för ett barntema till det samma som huvudtemat med â-childâ i slutet, och eftersom âMitt temaâ kommer ha âTwenty Thirteenâ som huvudtema sĂ„ döper vi mappen till twentythirteen-child
.
Stilmallen
I mappen skapar vi en ny fil vid namn style.css
 med följande innehÄll:
/*
Theme Name: Mitt tema
Template: twentythirteen
*/
/* Importera stilmallen frÄn huvudtemat */
@import url('../twentythirteen/style.css');
Observera att Template: twentythirteen
 Àr det som anger att det hĂ€r Ă€r ett barntema till âTwenty Thirteenâ, vars mapp heter twentythirteen
.
Mer Àn sÄ behövs inte. Om du sparar filen, loggar in i din admin-panel och gÄr till Utseende > Teman sÄ kommer du se ditt nya barntema dÀr och kan aktivera det. Eftersom du hittills inte har gjort nÄgra Àndringar sÄ kommer du dock inte sÄ nÄgon skillnad mellan barntemat och huvudtemat.
Raden med @import
 sÀger Ät webblÀsaren att hÀmta en annan stilmall, i det hÀr fallet rör det sig om originalstilmallen frÄn huvudtemat. Alla Àndringar du gör i stilmallen mÄste ske efter importen, annars kommer de inte gÀlla.
För att hitta det du vill Àndra i stilmallar rekommenderar jag utvecklingsverktyget som finns inbyggt i din webblÀsare.
PHP-filer
SÀg att du vill Àndra nÄgon HTML-kod i sidhuvudet pÄ din webbplats. DÄ kopierar du först twentythirteen/header.php
 till twentythirteen-child/header.php
, dÀrefter gör du dina Àndringar i den nya kopian. Som jag förklarade tidigare sÄ kommer WordPress nu att hÀmta header.php
 frÄn ditt barntema och resten av alla PHP-filer frÄn huvudtemat.
Slutord
Det Àr faktiskt inte svÄrare Àn sÄ att skapa ett barntema. Om du vill fördjupa dig mer sÄ finns resten vÀl dokumenterat.
Vad föredrar du att jobba med â barnteman eller vanliga teman?
Catlin
5 januari, 2014
Tackar sÄ mycket för en mycket vÀlskriven artikel, nu ska hÀr göras barnteman :-)
Ivar Johansson
5 januari, 2014
Tack för dina ord, Catlin, och kör hÄrt!
Patrick Hansson
6 januari, 2014
Bra skrivet om ett vettigt Àmne! Hade planer att skriva ihop nÄgot liknande dÄ child themes (?barntema? lÄter sÄ fel! :) ) ofta Àr nÄgot som efterfrÄgas och rekommenderas i olika supportforum. Nu kan jag istÀllet lÀnka dem hit för en ordentlig genomgÄng.
Ivar Johansson
6 januari, 2014
Kul att höra, Patrick! Ja det Àr synd att det inte finns ett vettigare ord pÄ svenska som redan anvÀnds flitigt. :-)
Johan
20 april, 2014
Hej.
Undrar över en sak. Om jag ska Àndra nÄgot i style.css i ett barntema Àr detta rÀtt? Gör nÄgot fel iomed att det inte fungerar :/
Ivar Johansson
21 april, 2014
Hej Johan! Det ser korrekt ut, bortsett frÄn att du har missat den sista klammern,
}
.Ifall det inte fungerar kan du anvÀnda utvecklingsverktyget i webblÀsaren för att se vad som försiggÄr. Om du inte ser dina Àndringar dÀr sÄ kan du Àven kika pÄ första frÄgan i den hÀr artikeln och se ifall det hjÀlper dig. :-)
Johan
21 april, 2014
Det Àr sÄ skumt. För att nu rÀttade jag till den som du sa.
https://pastebin.com/WPZ1di8p
Och om jag kollar med utvecklingsverktyget sÄ lÀser den fortfarande frÄn förÀlder temat. Jag har bÄde refreshat och provat kolla pÄ siten i ?incognito mode?.
Ivar Johansson
21 april, 2014
Kan hÀnda att selektorerna Àr sÄ pass specifika i förÀldertemat att du behöver anvÀnda
!important
för att skriva över stilarna, t exfont-size: 1px !important;
.Marta
5 maj, 2014
Hej
Jag försöker att modifiera en fil som befinner sig i min huvud thema (html fel som orsakade validerings errors) och laddade upp en ny i min child thema och Äterskapade strukturen sÄ klart men WP verkar inte vilja lÀsa den filen tyvÀrr. Kan de bero pÄ att min lilla fil anropas frÄn huvudmallen genom en annan sökvÀg? Hur ska jag kunna anvÀnda mig av min version av filen utan att behöva skriva om sjÀlva sökvÀgen i huvudmallen? Finns det ngn lösning?
Ivar Johansson
5 maj, 2014
Hej Marta!
Det Àr jÀttesvÄrt för mig att veta utan att se hur du har gjort. Dubbelkolla gÀrna alla steg i artikeln för att sÀkerhetsstÀlla att du har gjort rÀtt, dÀrefter kan du Äterkomma med hur din
style.css
ser ut. :-)Sedan kan jag tipsa om den officiella WordPress-gruppen, dÀr Àr vi flera som brukar svara pÄ frÄgor ? pÄ sÄ vis bör du fÄ ett svar snabbare.
Marie
7 februari, 2015
Hej,
tittade pÄ din lÀnk till WordPress Codex. De vill inte att man anvÀnder @import.
? Note that the previous method was to import the parent theme stylesheet using @import: this is no longer best practice. The correct method of enqueuing the parent theme stylesheet is to use wp_enqueue_script() in your child theme?s functions.php.?
What you say?
Ivar Johansson
11 mars, 2015
Hej Marie!
Tack för din kommentar, och en jÀtteursÀkt för mitt sena svar.
Det stÀmmer det du sÀger, att det bÀsta sÀttet Àr att inkludera stilmallen via
functions.php
istÀllet för att anvÀnda@import
. Anledningen till att jag anvÀnder@import
i artikeln Àr för att det Àr enklare att förstÄ och anvÀnda för nybörjare.Jag nÀmner Àven i artikeln att ?man anvÀnder sig oftast av @import, vilket Àr dÄligt för webbplatsens prestanda?, men jag kanske borde förstÀrka budskapet och hÀnvisa till lösningen med
functions.php
för webbplatser i drift.Christer
24 april, 2015
Hej! Har ett problem och det Àr att den inte hittar det befintliga temat, var i koderna Àr det som Àr fel? Pekningarna till modertemat ja. Men det ligger i samma mapp, men hur? Hmm beror det pÄ @import? Eller vart? Ska function do_something()
{
//Gör nÄgot annat
} in nÄgonstans? eller Àr det bara ett exempel? Samt i hantera teman, sÄ sÀger wordpress att det Àr skadat och valet Àr ?radera?. Hur göra och vart finner jag mer kunskap i detta?
Tack för hjÀlpen! MVH Christer
Ivar Johansson
27 april, 2015
Hej Christer!
NÀr du sÀger att den inte hittar det befintliga temat, sÄ tolkar jag det som att du inte ser barntemat under
Utseende > Teman
.Observera att barntemat inte ska ligga i modertemats katalog. Temana ska istÀllet ligga parallellt i katalogen
/wp-content/themes/
, sedan Àr det viktigt att ?Template? i barntematsstyle.css
Àr det exakta namnet pÄ modertemats katalog.Hoppas detta hjÀlpte dig nÄgot!
Kommentarer Àr för nÀrvarande avstÀngda.