WordPress och Child Themes

WordPress Child Themes

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.

Hur child themes fungerar

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?

Ivar Johansson

Skriven av

Ivar började med webbutveckling för tio Är sedan och har sedan dess utvecklat breda kunskaper inom framför allt webbprestanda, sökmotorer och anvÀndarupplevelse. Idag driver han eget företag dÀr han skapar webbplatser som Àr snabba, sÀkra och enkla att hantera.

  1. Catlin

    5 januari, 2014

    Tackar sÄ mycket för en mycket vÀlskriven artikel, nu ska hÀr göras barnteman :-)

  2. Ivar Johansson

    5 januari, 2014

    Tack för dina ord, Catlin, och kör hÄrt!

  3. 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.

  4. 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. :-)

  5. 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 :/

    /*
     Theme Name:   Barntema
     Template:     twentyeleven
    */
    
    /* Importera stilmallen frÄn huvudtemat */
    @import url('../twentyeleven/style.css');
    
    .main-page-title .page-title {
    	font-size: 16px;
    	font-weight: 400;
    	line-height: 120%;
  6. 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. :-)

  7. 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?.

  8. 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 ex font-size: 1px !important;.

  9. 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?

  10. 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.

  11. 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?

  12. 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.

  13. 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

  14. 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 barntemats style.css Àr det exakta namnet pÄ modertemats katalog.

    Hoppas detta hjÀlpte dig nÄgot!

Kommentarer Àr för nÀrvarande avstÀngda.