Tein pluginin tarpeeseen: toisinaan tarvitaan tekstiä, joka katoaa tietyn ajan kuluttua. Tavallisessa blogissa tällaiselle ei ole yleensä käyttöä, mutta monilla sivuilla esiintyy esimerkiksi tilapäisiä kampanjoita. Jos ylläpitää useampaa sivua, on kätevää, jos vanhentuvien kampanjoiden tietoja ei tarvitse käydä itse poistamassa.
Tähän tarpeeseen syntyi siis plugini. Perustoteutus on hyvin yksinkertainen: tekstin hävittäminen tehdään shortcodella, jolla katoava teksti ympäröidään. Shortcode ottaa parametriksi päiväyksen, tähän tapaan: [expire date=”2010-09-01″]Teksti, joka katoaa syyskuun ensimmäisenä.[/expire]
Tämä on helppoa toteuttaa, tarvitaan vain pieni pätkä koodia, joka vertailee päiväyksiä (joskin siihen liittyy pieni komplikaatio, josta kohta lisää) ja jos parasta ennen -päiväys on ohitettu, shortcoden sisältö nollataan. Kas, teksti häviää.
Roskien siivoaminen
Vanhentuneiden tekstien siivoaminen onkin sitten haastavampi juttu. Ajattelin ensin toteuttaa operaation käyttämällä WordPressin erittäin käteviä ajastettuja toimintoja, joilla olisin virittänyt kerran päivässä ajettavan puhdistusoperaation. Se on kuitenkin hieman vaivalloista, kun joka kerta täytyy käydä mahdollisesti useampia merkintöjä läpi ja niin edelleen. Keksin onneksi helpomman ratkaisun.
Pluginihan nimittäin tietää, kun se kohtaa vanhentuneen tiedon. Se voidaan poistaa saman tien. Tiedossahan on merkintä, jossa vanhentunut kenttä on ja kentän tekstikin löytyy. Niinpä vanhentuneen kentän kohdatessaan plugini käynnistää siivouksen. Siivousfunktio etsii merkinnästä shortcoden sisällön (joka tulee automaattisesti WordPressistä) ja hakee vielä ympärille shortcode-tagit ja sen jälkeen poistaa tämän pätkän merkinnän sisällöstä. Lopuksi yksi MySQL-komento ja päivitetty merkintä tallennetaan tietokantaan. Homma selvä!
Ajanlaskua
Alunperin aioin vertailla aikoja käyttäen strtotime-funktiota, joka olisi bonuksena mahdollistanut erilaisia tapoja ajan ilmaisemiseen. Strtotimen käyttäminen aikojen vertailuun on kuitenkin laiskaa koodaamista, jossa piilee vaara: strtotime kun osaa aikoja vain vuoteen 2038 asti (32-bittisissä järjestelmissä, katso Year 2038 problem).
Päivämäärien vertailua voi tehdä paremmin käyttämällä GregorianToJD-funktiota, joka muuttaa gregoriaanisen kalenterin päivät juliaanisen kalenterin päivälaskuriksi. Näppärää, ja tämä toimii vuoteen 9999 asti. Siinä vaiheessa asia on jo takuuvarmasti jonkun muun ongelma…
Kiinnostaako?
Tein pluginin omiin tarpeisiin ja omaan käyttöön, mutta jos joku haluaa, on hyvä ja ottaa yhteyttä.