Enkla vägen?
Ibland känns det som programmerare att man vill ta ”den enkla vägen” och redigera direkt i befintliga filer i ett WordPress-tema. Jag vill hävda att detta är brist på respekt gentemot kunden – och mot sin egen yrkesstolthet.
Det är lockande att skriva funktioner direkt i functions.php (filen som används som utgångspunkt när man använder ett visst tema) och sedan anropa dem på ett sådant här sätt:
function hello_world() {
echo 'hello world';
}
if (!is_admin()) {
hello_world();
}
Plugin
Det går ju självklart att göra på detta sätt men gör hellre ett plugin som skapar funktionaliteten och gör denna funktionalitet objektorienterad! Även om det inte är ett krav att programmera objektorienterat i WordPress så är det definitivt värt det. Jag skulle t.o.m. säga att det är faktiskt lite svårare (än ”vanlig php programmering”) då det krävs lite specialistkompetens inom WordPress då man måste förstå hur funktioner prioriteras, vad hooks, filter m.m. innebär och hur de bör användas i WordPress. Att skapa ett plugin är inte speciellt svårt (om man känner till programmering i php). Det handlar bara om att skapa en fil med pluginets namn och sedan några rader som gör att WordPress kan identifiera att det är ett plugin.
Använd barntema!
Om det är bara en funktion eller så som krävs så fungerar det att redigera direkt i functions.php direkt i temat . Om man bara vill ändra färg på någon knapp eller liknande som finns i temat så kan man ju ändra direkt i style.css som är den stilmall som används för ett tema. Eller? Nej, absolut inte! Känner man att man inte vill skapa ett plugin för det ”lilla behov” man har för tillfället så kan man redigera i functions.php men gör det inte direkt i mappen där temat finns. Skapa hellre ett s.k. barntema (blir ju töntigt när man översätter child-theme men det heter barntema på svenska)
Ett barntema handlar i stora drag om att skapa ett nytt tema men ärver funktioner, layout m.m. från ett befintligt tema. Detta gör att man inte behöver uppfinna hjulet på nytt. När man vill ändra något i en befintlig fil i temat, t.ex. functions.php så kopierar man denna fil till barntemat och ändrar i barntemat. Det enda som krävs för att skapa ett barntema är att skapa en css-fil (vanlig textfil med filtägg .css alltså). I denna css-fil anger du referenser till det temat du vill utgå ifrån.
Så här skulle det t.ex. kunna se ut i barntemat:
/*
Theme Name: Dundercool
Theme URI: http://themegrill.com/themes/radiate/
Description: Nirvana
Author: Gustav Wiberg
Author URI: https://wibergsweb.se/
Template: nirvana
*/
@import url("../nirvana/style.css");
Ovanstående style.css lägger man i en mapp som heter Dundercool, dvs wp_content/themes/Dundecool och i denna mapp har man ovanstående fil som måste heta style.css. Självklart krävs det att man har temat Nirvana i sin WordPress-installation i ovanstående exempel (dvs wp_content/themes/nirvana) för att det ska fungera. När du har skapat denna fil style.css i mappen wp_content/themes/Dundecool så loggar du in i din WordPress och aktiverar ditt barntema precis som du aktiverar ett vanligt tema, dvs gå in under Utseende/teman och klickar på ”Aktivera”-knappen för ditt barntema (i detta exempel Thundercool). En väldigt viktig sak att tänka på (som är svårt att förstå i början) är att namnet på temat man väljer att utgå ifrån (i ovanstående fall temat nirvana) måste stå på exakt samma sätt som mappen för detta tema heter (alltså skilja på stora och små bokstäver) – annars kommer det inte att fungera.
Vill du skapa en funktion som inte finns i temat Nirvana så skapar du en fil som heter functions.php och lägger i ditt barntema. (i det här exemlet alltså wp_content/themes/Dundecool/functions.php). Först körs dina funktioner i barntemat och sedan körs den funktionalitet som finns i huvud/föräldrartemat (nirvana) och detta gör att du inte behöver kopiera hela functions.php utan att lägger bara till de funktioner du anser behövs för det nya barntemat. Vill du göra någon justering i pagelayouten för ett inlägg så kopierar du mallen från huvudtemat (Nirvana) till ditt barntema och justerar i barntemat.
Enkla vägen – kan bli den svåra/jobbiga vägen
Ibland känns det som programmerare att man vill ta ”den enkla vägen” och redigera direkt i befintliga filer i ett WordPress-tema. Jag vill hävda att detta är brist på respekt gentemot kunden – och mot sin egen yrkesstolthet.
Vad menade jag egentligen med det? Jo om man redigerar direkt i style.css i temat och ändrar ett antal färger som visas för olika saker på hemsidan och sedan så uppdaterar man (Nirvana) temat så skrivs din justeringar i style.css över med den nya versionen av Nirvana. Skapar du en helt ny sidmall genom att ändra i befintligt tema (Nirvana) så kommer denna layout som du har gjort återgå till den ursprungliga layouten. Skapar du funktioner i functions.php kommer dessa funktioner att försvinna när temat uppdateras.
Respektlöst mot kund
Detta betyder alltså att du måste se till att temat aldrig uppdateras – men vill du verkligen det? Nej, det kan ju vara saker i temat som skaparen av temat har justerat som t.ex. att han/hon har täppt till något säkerhetshål och då ”måste” (eller i alla fall bör) du uppdatera. Nu blir den enkla vägen helt plötslig svår. Om du har lanserat en ny sida åt en kund och kunden tycker allt är jättefint och fungerar jättebra så är det bra, men vad händer om kundens hemsida helt plötsligt slutar fungera på grund av att du har skapat en funktion direkt i temat som har uppdaterats med automatik av WordPress. Då uppkommer ett antal frågeställningar. Vill du verkligen lägga tid på att fixa till detta? Har du backup på alla dina ändringar – och har möjlighet att återställa allt? Att ens behöva komma i denna sits är respektlöst mot kunden eftersom detta kan förstöra för kunden – både vad gäller rykte och/eller pengar. Och tror du denna kunden kommer att ge dig en god referens?
Yrkesstolthet
Att skapa ett barntema är helt enkelt ett måste om du har någon som helst yrkesstolthet och är rädd om dina kunder. Dessa anledningar samt att det är extremt enkelt och flexibelt att använda sig av barnteman så använder Wibergs Web alltid barntema i sina WordPress-installationer. Det är helt enkelt en bättre och säkrare väg!