Om du som jag gjorde en gång, funderar på hur man gör en widget till WordPress, så tänkte jag vi skulle gå igenom det och helt enkelt göra en enkel widget. Syftet med widgeten är att visa information om dagens datum, är det helg, röd dag, namnsdag och så vidare. Kanske inte den mest användbara av widgets, men det lär oss dels att skapa en widget och dels att implementera ett API.
För ändamålet kommer vi använda oss av ett API från Johan Blomgren och dryg.net, Svenska Dagar som visar just denna information om ett visst datum.

Innan vi börjar behöver vi fundera på namnet och prefix som vi använder i widgeten. Detta bör nämligen vara unikt. Det ökar chansen att en widget (eller plugin) ska bli godkänd i WordPress Plugin Directory. Pippins Plugins har en text med tips på vad man generellt ska tänka på. Ett unikt prefix som du använder för klassnamn, funktionsnamn och variabler gör också att du inte riskerar att en annan widget har använt samma namn och i värsta fall anropas istället för din funktion. Så, vi döper den till wp-svdays eftersom det bara handlar om svenska dagar och då en sökning på WordPress.org inte visar att det finns något liknande. Som prefix använder vi wpsvdays, lite långt men säkerligen unikt.

Nu skapar vi en mapp på vår dator, som har samma namn som widgeten. I den skapar vi en, för tillfället tom, php-fil, också den med samma namn:

wp-svdays widget Så, nu kickar vi igång vår favoriteditor och öppnar filen. Det första vi behöver göra är att lägga till ett block med kommentarer, för att WordPress ska kunna plocka ut lite information om widgeten.


<?php

/*
Plugin Name: Svenska Dagar
Plugin URI: http://www.example.com/
Description: Visar information om dagens datum
Version: 0.1
Text Domain: wpsvdays
Author: Bjarne Gårdebratt
Author URI: http://www.gardebratt.se/
License: GPL2
*/

?>


Det mesta här är självförklarande, det går att läsa om vad som kan/bör finnas i en header i WordPress codex. Text Domain har med översättningar att göra. Alla texter kommer vi här ange som engelska, med en svensk översättning och denna hanteras via text domain. Men mer om det i ett senare läge.

Dags att börja med själva kodandet.
En WordPress Widget ska innehålla en klass, som ärver egenskaper från klassen WP_Widget. Låt oss alltså skapa en klass för vår widget.


class wpsvdays_widget extends WP_Widget 
{

}


Klassen behöver ett antal standard funktioner för att fungera. Vi börjar med initieringen som ska ligga i en funktion som heter __construct:


function __construct() 
{
          parent::__construct(
               'sl_widget', // Bas ID för widgeten
               'Swedish Days', // Namnet
               array( 'description' => 'Information about current day') ) // Beskrivning
          );
}


I denna anropar vi föräldraklassen WP_Widget och dess __construct funktion. Där skickar vi med ID och namn och en array med beskrivning som argument. Denna funktion registrerar widgeten i WordPress, så den kommer synas på widgetsidan i admin med det namn och standardbeskrivning som anges i argumenten.

Vi behöver också en funktion för hur allt ska visas i frontend, och den heter helt enkelt widget. Denna ska vara publik.


public function widget( $args, $instance ) 
{

}


Vi behöver också en funktion för att visa ett formulär på widgetsidan i admin, för eventuell konfigurering av widgeten, funktion form.


public function form( $instance )
{

}


Argumentet $instance är tidigare sparade formvärden.

Till sist behöver också en update funktion som tar hand om de nya värdena i form funktionen .


public function update( $new_instance, $old_instance )
{

}


Argumentet $new_instance är de nya värdena och $old_instance alltså de gamla värdena.
Nu har vi grunden i vår klass klar.


<?php

/*
Plugin Name: Svenska Dagar
Plugin URI: http://www.example.com/
Description: Visar information om dagens datum
Version: 0.1
Text Domain: wpsvdays
Author: Bjarne Gårdebratt
Author URI: http://www.gardebratt.se/
License: GPL2
*/

class wpsvdays_widget extends WP_Widget {


     function __construct()
     {
          parent::__construct(
               'sl_widget', // Bas ID för widgeten
               'Swedish Days', // Namnet
               array( 'description' => 'Information about current day') // Beskrivning
          );
     }


     public function widget( $args, $instance )
     {

     }

     public function form( $instance )
     {

     }

     public function update( $new_instance, $old_instance )
     {

     }

}

add_action('widgets_init', create_function('', 'return register_widget("wpsvdays_widget");'));

?>


Till sist behöver vi initiera pluginen, via hooken widgets_init. Efter vår klass lägger vi alltså följande:


add_action('widgets_init', create_function('', 'return register_widget("wpsvdays_widget");'));


För att nu testa detta, lägger vi upp mappen i vår WordPress installation, i mappen wp-content/plugins:

wp-svdays widget

Nu dyker widgeten upp i listan över installerade tillägg:

wp-svdays widget

Om vi nu aktiverar vår widget och går till widgetsidan i admin finns den nu med där, under Tillgängliga widgets och vi kan dra den till en widgetarea. Men den gör ju faktiskt ingenting ännu, och det lilla den gör görs på engelska. Så låt oss titta på att ändra det i del 2.

wp-svdays widget