Sviluppatore web, freelancer, blogger e pensatore nonconformista a Milano

Pimp a WordPress-Standard-Widget

Poco tempo fa ho presentato un hack che nasconde il Link-Widget nella homepage del blog. La decisione di cercare una soluzione del tipo “quick & dirty” era in parte dovuta al mio gusto personale e in parte alla curiosità di capire che cosa succede all’interno di WordPress una volta attivato un widget. Alla fine ho presentato una soluzione non molto bella e nemmeno raccomandabile in un ambiente più complesso.

A questo punto, prima di presentare una soluzione un po’ più elegante, voglio scrivere due righe sui widget. In rete viaggiano tante spiegazioni diverse su cosa sia un WordPress Widget. Ci sono anche articoli che descrivono questa funzionalità come qualcosa a metà strada fra tema e plugin. Ma questa la definirei una semplificazione e, di fatto, non è così!

Naturalmente i widget esistono per definizione per essere presentati nelle sidebar dinamiche. Ma per questo motivo non diventano automaticamente una parte di un tema. Nel controllo dei widget, che si trova nel pannello di amministrazione, i widget restano disponibili, se il codice non si trova nel functions.php del tema, anche quando si cambia il design.

Per un widget il fatto che il suo codice esista nel core di WordPress, nel functions.php del tema o in un file di un plugin, è del tutto indifferente. Importante è solo attenersi alle regole, ovvero seguire la Widget-API. Tra l’altro, personalmente trovo anche la denominazione API un po’ infelice.

Parlerei piuttosto di un Framework o per essere più preciso di una raccolta delle classi con qualche esempio predefinito, gli Standard Widget. Tutti i widget devono estendere la classe WP_Widget e devono implementare pochi metodi per integrarsi bene.

A questo punto la domanda, perché non estendere i widget standard, è ovvia. È possibile determinare da soli quando mostrare un widget e quando no? La risposta è sì … e non solo: alla fine la soluzione risulta non solo efficace ma anche molto semplice.

Il codice si può inserire per esempio nel file functions.php del tema e si può spiegare anche con poche parole:

La classe MY_Widget_Links estende il widget standard responsabile per la visualizzazione della blogroll. Il metodo widget che rende l’output controlla prima tramite i tag condizionali se la pagina non è la nostra homepage e, in tal caso, ricorre al metodo della classe parent. Presento poi una funzione che viene triggerata quando i widget vengono inizializzati, che disattiva il widget standard e infine attiva la versione modificata.

Parla alla tua mente

*