Finns det nåt tema i webbadressen?

Ibland kanske webbsurfaren bara gått till samio.se och då behövs ju inget knasigt tematrixande. Men för en webbadress som

https://samio.se/123/twentyfifteen

behöver vi lista ut om en del av adressen är ett tema.

Hur tar datorn reda på om det finns ett tema i webbadressen

Som vanligt är metoden -> dela upp problemet i mindre delar. Koden behöver göra tre saker.

  1. dela upp adressen i delar
  2. kolla om sista delen matchar namnet på ett installerat tema
  3. logga om ett tema hittades
function check_url_for_theme() {
    $current_url = $_SERVER['REQUEST_URI'];
    error_log('Nuvarande URL: ' . $current_url);
    
    // Dela upp URL:en i delar
    $url_parts = explode('/', trim($current_url, '/'));
    
    // Sista delen av URL:en kan vara temanamnet
    $possible_theme = end($url_parts);
    
    // Hämta alla tillgängliga teman
    $available_themes = wp_get_themes();
    
    // Kontrollera om sista delen matchar ett tema
    if (isset($available_themes[$possible_theme])) {
        error_log('Hittade tema: ' . $possible_theme);
        // TODO: Implementera tema-byte här
    }

Efter att ha lagt in denna kod surfade jag till https://samio.se/3880/twentyten och fick tillbaka ”Hoppsan! Den sidan kan inte hittas.” men i loggen ser det bättre ut 🙂

[31-Dec-2024 19:39:40 UTC] Nuvarande URL: /
[31-Dec-2024 19:39:40 UTC] Detta är förstasidan
[31-Dec-2024 19:39:43 UTC] Nuvarande URL: /3880
[31-Dec-2024 19:39:43 UTC] Detta är ett enskilt inlägg
[31-Dec-2024 19:39:43 UTC] Post ID: 3880
[31-Dec-2024 19:39:50 UTC] Nuvarande URL: /3880/twentyten
[31-Dec-2024 19:39:50 UTC] Hittade tema: twentyten

Koden fungerar för att

  1. Identifiera URL:en (/3880/twentyten)
  2. Hitta temat (twentyten)
  3. Identifiera sidtypen (enskilt inlägg med ID 3880)

Så nu har användaren berättat allt vi behöver veta.

Problemet är att WordPress tolkar /3880/twentyten som en försök att nå en undersida till inlägget, vilket inte existerar.

Dags att lura WordPress!

Källor

Vad är detta

Här beskriver jag bygget av en plugin till WordPress. Exemplet ger dig möjlighet att byta utseende på en webbsida.

  1. Hur du skapar en WordPress plugin
  2. WordPress hooks
  3. Fånga URLen!
  4. Identifiera sidtyp
  5. Finns det nåt tema i webbadressen?

Identifiera sidtyp

För att visa en webbsida behöver datorsystemet veta vilken sida det gäller. Det kan vara ett inlägg, en kategori, författare eller något annat. Vore dumt att visa min blogg om framing när du klickat på en länk till en sida om Mexiko.

Poängen med en temaväxlare som styrs av webbadressen är att adressen kan ange

  • vilken sida vi är ute efter
  • hur vi vill att sidan ska se ut

Vi har hämtat webbsidans URL (webbadress) och det är dags att skilja de olika sidorna åt (inlägg, tagg…).

Logiken för att identifiera sidtyp använder inbyggda funktioner i WordPress.

if ( is_front_page() ) {

        error_log('Detta är förstasidan');

    } 

    elseif ( is_single() ) {

        error_log('Detta är ett enskilt inlägg');
        error_log('Post ID: ' . get_the_ID());

    }

    elseif ( is_page() ) {

        error_log('Detta är en sida');
        error_log('Page ID: ' . get_the_ID());

    }

    elseif ( is_category() ) {

        error_log('Detta är en kategorisida');
        error_log('Category: ' . single_cat_title('', false));

    }

    elseif ( is_tag() ) {

        error_log('Detta är en etikettssida');
        error_log('Tag: ' . single_tag_title('', false));

    }

    elseif ( is_author() ) {

        error_log('Detta är en författarsida');
        error_log('Author: ' . get_the_author());

    }

Källor

Vad är detta

Här beskriver jag bygget av en plugin till WordPress. Exemplet ger dig möjlighet att byta utseende på en webbsida.

  1. Hur du skapar en WordPress plugin
  2. WordPress hooks
  3. Fånga URLen!
  4. Identifiera sidtyp
  5. Finns det nåt tema i webbadressen?

Fånga URLen!

För att kunna ändra sajtens utseende med hjälp av sidans webbadress behöver vi

  • hämta webbadressen (URL:en)
  • innan sidan visas

Det gör vi med en funktion som

  • begär ut URL:en – $_SERVER[’REQUEST_URI’]
  • lägger den i en behållare – $current_url =

Så här ser funktionen ut tillsammans med en avslutande Action som sätter igång funktionen precis innan sidan laddas.

function check_url_for_theme() {
    $current_url = $_SERVER['REQUEST_URI'];
    error_log('Nuvarande URL: ' . $current_url);
}

add_action('init', 'check_url_for_theme');

På det sättet ser vi exakt vilken URL-struktur vi behöver hantera. Sen kan vi börja bygga logiken för att plocka ut temadelen ur URL:en.

Källor

Vad är detta

Här beskriver jag bygget av en plugin till WordPress. Exemplet ger dig möjlighet att byta utseende på en webbsida.

  1. Hur du skapar en WordPress plugin
  2. WordPress hooks
  3. Fånga URLen!
  4. Identifiera sidtyp
  5. Finns det nåt tema i webbadressen?

WordPress hooks

Nu tar vi över WordPress!

Nej inte hela systemet, bara en liten del. Med en hook kopplar du på din egen kod i WordPress flöde utan att behöva ändra i WordPress kärna.

  • WordPress: ”Nu ska jag visa en sida”
  • Din plugin: ”Vänta! Innan du visar sidan vill jag kolla URL:en för att se om vi ska byta tema”

När används hooks

  • När en sida laddas (för att kanske ändra innehållet)
  • När någon loggar in (för att kanske spara data om inloggningen)
  • När ett inlägg sparas (för att kanske skicka ett mail)

I vårt fall med temaväxlaren behöver vi en hook som körs tidigt i sidladdningen, innan WordPress bestämmer vilket tema som ska användas. Vi vill kunna säga: ”Hej WordPress! Innan du väljer tema, kolla om det finns ett temanamn i URL:en!”

Två sorters hooks

Det finns två huvudtyper av hooks i WordPress:

  1. Actions (åtgärder)
  2. Filters (filter)

Vi börjar med Actions och återkommer till Filters senare. En action är en hook som körs vid specifika tillfällen i WordPress. Till exempel:

  • en sida laddas
  • ett inlägg sparas
  • en användare loggar in

Hur använder du en action

För att använda en action använder du funktionen add_action(). Den tar emot två parametrar:

  1. Funktionen som ska köras när hooken aktiveras
  2. Namnet på det vi vill ”kroka fast i”
function test_our_hook() {
    error_log('Vår hook kördes!');
}

add_action('init', 'test_our_hook');

WTF, init??

Nu dök det upp konstiga saker. Vad är init för nåt?

Init är en förkortning av initialisera, en funktion som körs vid varje sidladdning. När du klickar runt på en WordPressajt initialiseras WordPress vid varje ny sida du går till. Systemet kollar om det ska utföra något innan en sida visas.

Vår hook innebär att Init skriver en rad, Vår hook kördes!, till WordPress error log varje gång en sida laddas (WordPress initialiseras).

Källor

Vad är detta

Här beskriver jag bygget av en plugin till WordPress. Exemplet ger dig möjlighet att byta utseende på en webbsida.

  1. Hur du skapar en WordPress plugin
  2. WordPress hooks
  3. Fånga URLen!
  4. Identifiera sidtyp
  5. Finns det nåt tema i webbadressen?

Hur du skapar en WordPress plugin

Här beskriver jag bygget av en plugin till WordPress. Exemplet ger dig möjlighet att byta utseende på en webbsida.

En poäng med att publicera information och funktionalitet i en plugin (ett tillägg), istället för direkt på webbsidan, är att den fungerar i alla teman. Även då du byter tema finns informationen där.

Du kan till exempel se licensinformation en bit ner på denna webbsida, om hur du kan återanvända information på sajten. Licensinformationen har jag lagt i ett tillägg så att den följer med även när temat byts ut.

Varför berätta om detta

En poäng med att beskriva arbetet med tillägget öppet är att det ger dig möjlighet att hjälpa mig 😉

Jag vet inte riktigt vad jag håller på med, är en ganska oerfaren WordPress- utvecklare. Så när du inte fattar eller hittar problem kan du lösa dem, dela med dig av lösningen och hjälpa mig förstå. Skriv en kommentar eller ett eget inlägg och länka hit.

Ett tillägg byggs med ett textdokument

Skriv text i ett textdokument och placera det på rätt plats så kommer WordPress förstå att det handlar om ett tillägg.

Var

Placera ditt textdokument, ditt tillägg, i mappen wp-content/plugins i en egen mapp, i mitt fall Temaskiftaren.

wp-content/plugins/temaskiftare

Textdokumentet heter temaskiftare.php

Header

Inled texten i tillägget med det som kallas Header, en beskrivning.

/*
Plugin Name: Temaskiftaren
Description: Byt WordPress-tema via URL
Version: 0.1
Author: Rikard Linde
*/

Säkerhetskontroll

Med Temaskiftaren kommer du kunna byta utseende på webbsidor genom att ändra webbadress.

För att användaren ska kunna använda tillägget som tänkt men inte påverka resten av WordPress inleder vi tillägget med en säkerhetskontroll.

if (!defined('ABSPATH')) {
    exit;
}

ABSPATH är en säkerhetskontroll som förhindrar att någon kör tillägget direkt via webben.

Källor

Vad är detta

Här beskriver jag bygget av en plugin till WordPress. Exemplet ger dig möjlighet att byta utseende på en webbsida.

  1. Hur du skapar en WordPress plugin
  2. WordPress hooks
  3. Fånga URLen!
  4. Identifiera sidtyp
  5. Finns det nåt tema i webbadressen?