Come personalizzare i default Widget di WordPress

Una guida alla creazione di Widget personalizzati per Wordpress.

Wordpress LogoWordPress include una serie di widget molto utili, che possono essere inseriti fin da subito all’interno di ogni tema. Possono essere visualizzati gli ultimi commenti, i post più recenti ed una serie di altre informazioni utili gestendo tutto dal pannello di amministrazione.

Spesso però i default widget sono limitati e non adatti a tutte le occasioni: potreste avere la necessità di eliminare una particolare categoria dagli ultimi post, o di modificare il codice html con cui viene presentato il box di ricerca.

La soluzione fortunatamente esiste e non è complessa: è possibile infatti recuperare i widget esistenti, modificarli e farli apparire sul pannello di amministrazione accanto a quelli standard.

Aggiornamento 2022: WordPress è cambiato nel tempo e i default Widget ora sono suddivisi ognuno nel suo file, all’interno della cartella wp-includes/widgets. Le istruzioni di questo post restano valide.

I passi da seguire

Se avete un minimo di basi di php, creare i vostri widget è semplice. Questa è la procedura in sintesi:

  1. Aprite il file wp-includes/default-widgets.php, dove sono presenti tutti i widget di default.
  2. Individuate il widget da personalizzare. Ognuno ha qualche riga di commento che ne chiarisce la funzione, ma i nomi delle classi sono già autoesplicativi: WP_Widget_Search, WP_Widget_Recent_Comments, WP_Widget_Tag_Cloud, ecc.
  3. Copiate tutto il codice del widget che vi interessa dentro il file functions.php del vostro tema (se non l’avete, createlo).
  4. Personalizzate il nome della classe in tutte le sue occorrenze e le altre informazioni necessarie (ad esempio la descrizione che appare sul pannello di amministrazione).
  5. Modificate il codice secondo le vostre esigenze. Qualche esempio? Personalizzare i link del widget meta, cambiare il form nel widget della ricerca, mostrare gli ultimi post di una specifica categoria… le possibilità sono infinite.
  6. Aggiungete subito dopo la definizione del nuovo widget, nel file functions.php, la riga
    register_widget('nome_del_widget_personalizzato');

I vantaggi di questo metodo sono notevoli:

  • Non è necessario conoscere php approfonditamente, basta saperlo leggere per poter aggiungere qualche riga di codice
  • E’ possibile aggiornare WordPress senza problemi
  • Il nuovo widget appare sul pannello di amministrazione, e può essere usato anche da utenti non esperti (l’ideale quando si ha a che fare con clienti poco tecnici)

Se decidete di personalizzare i widget, fate però attenzione: non modificate direttamente il file default-widgets.php, è bene che il core di WordPress resti intatto. Utilizzare functions.php è l’ideale: eviterete possibili problemi e soprattutto potrete aggiornare WordPress senza preoccupazioni. Gli update della piattaforma sono frequenti e spesso essenziali per motivi di sicurezza, non è mai bene vincolarsi ad una particolare versione.

Vuoi far crescere il tuo progetto online?

Tommaso Baldovino

UX/UI Designer, professionista del web con più di 15 anni di esperienza su WordPress. Sono disponibile a seguire nuovi progetti dall'ideazione alla realizzazione finale. Scrivo ogni 2 settimane la mia newsletter.

12 commenti su “Come personalizzare i default Widget di WordPress”

  1. Grazie Tom.

    questa cosa mi mancava perché volevo personalizzare qualche widget ma non ho mai avuto la voglia di mettere mano al codice

  2. @Laura: sul pannello di amministrazione con questa procedura appare un nuovo widget. Gli puoi dare nome e descrizione corrispondenti alla nuova funzione in modo da renderlo riconoscibile da quello standard.

    Se poi duplichi un widget esistente e gli dai lo stesso nome ovviamente te ne troverai due apparentemente uguali, mi pare logico :)

  3. Ottimo consiglio…. vorrei sapere se qualcuno ha mai provato a programmare un plug-in o widget di word press da zero….. Non sembra una cosa impossibile ma il problema (presumo ) siano i futuri aggiornamenti….. Tuttavia secondo me la realizzazione di plug-in o widget per wordpress porta un sacco di visibilità e “stima” nel web….

  4. Ciao,
    era proprio la guida che cercavo.

    Però non mi funziona:
    copiato il codice da wp-includes/default-widgets.php
    e incollato su \wp-content\themes\temamio\function.php

    modificato il nome della funzione e infine aggiunto register_widget(‘nome_del_widget_personalizzato’);

    Niente! Nell’amministrazione non esce un nuovo Widget, anche se il codice è uguale al widget originale.

    Suggerimenti?
    Grazie mille ciao!
    Andrea

  5. @Andrea: probabilmente ti sei perso qualche modifica cambiando il nome della funzione. Fai qualche prova cercando in tutto il testo il vecchio nome e controlla le prime 3-4 righe della funzione, dove c’è “classname” ad esempio. Se non ti appare il nuovo widget è perchè ha qualcosa in comune con quello di default, e non viene considerato.

  6. Grazie,
    non funziona lo stesso,
    ho provato con un widget base come il calendario, o la ricerca.
    E provato con il kubrik.

    Forse è perchè provo in locale con easyphp? No non ha senso.

    Grazie lo stesso, ciao!!

  7. Ciao, non riesco a farlo funzionare. Vorrei modificare il widget di ricerca, ho eseguito esattamente, almeno credo, le tue istruzioni ma non succede nulla. Ti incollo il codice:

    /**
    * Search widget class
    *
    * @since 2.8.0
    */
    class WP_Widget_CercaCustom extends WP_Widget {

    function __construct() {
    $widget_ops = array(‘classname’ => ‘widget_cercacustom’, ‘description’ => __( “CercaCustom”) );
    parent::__construct(‘search’, __(‘CercaCustom’), $widget_ops);
    }

    function widget( $args, $instance ) {
    extract($args);
    $title = apply_filters( ‘widget_title’, empty( $instance[‘title’] ) ? ” : $instance[‘title’], $instance, $this->id_base );

    echo $before_widget;
    if ( $title )
    echo $before_title . $title . $after_title;

    // Use current theme search form if it exists
    get_search_form();

    echo $after_widget;
    }

    function form( $instance ) {
    $instance = wp_parse_args( (array) $instance, array( ‘title’ => ”) );
    $title = $instance[‘title’];
    ?>
    <label for="get_field_id(‘title’); ?>”><input class="widefat" id="get_field_id(‘title’); ?>” name=”get_field_name(‘title’); ?>” type=”text” value=”” />
    ”));
    $instance[‘title’] = strip_tags($new_instance[‘title’]);
    return $instance;
    }

    }

    register_widget(‘WP_Widget_CercaCustom’);

    Dove sbaglio?

  8. Buonasera, io dovrei modificare il piè di pagine, ossia la scritta del sito, in fondo “power by…” ma non so proprio dove mettere le mani, insomma dovrei modificare il nome del registratore sito ma non sono in grado, ho aperto tutti i punti immaginabili del sito. Chi mi può aiutare ? Grazie, Daniela