devdev / in the loop

Passare variabili a get_template_part() in WordPress

Come sappiamo, la funzione get_template_part(), ci mette a disposizione un meccanismo semplice per creare delle sezioni riusabili all’interno del nostro tema. Questa funzione, sotto al cofano, utilizza la funzione require() di PHP (e non require_once()), in modo da poterla utilizzare anche più volte nella stessa pagina.

La funzione get_template_part(), però, non supporta il passaggio di variabili. Perciò, se volessimo utilizzare nella parte inclusa delle variabili definite nella pagina del template, non possiamo. WordPress non offre una funzione specifica per questa situazione, ma possiamo risolvere in due modi, aggirando quindi il problema.

Metodo 1: una funzione supplementare

Scriviamo una funzione che estende le funzionalità di get_template_part(), che accetta i primi due parametri in modo analogo all’originale, ma aggiunge un terzo parametro array, al quale passeremo appunto le variabili che ci serve passare:

function devdev_get_template_part($slug, $name = null, array $data = null) {
    $templates = [];
    $name = (string) $name;

    if (!empty($name)) {
        $templates[] = "{$slug}-{$name}.php";
    }

    $templates[] = "{$slug}.php";

    $template = locate_template($templates, false);

    if (!$template) {
        return;
    }

    if (!empty($data)) {
        extract($data);
    }

    include($template);
}

Per esempio: devdev_get_template_part(“blocco-chisiamo”,’chisiamo’, array(‘messaggio’ => ‘prova’));

A questo punto, all’interno di blocco-chisiamo.php  potremmo usare $messaggio.

Metodo 2: le costanti di PHP

Questo metodo è per scenari più semplici, dove non è necessario reinventare la ruota. Semplicemente, prima di utilizzare la funzione get_template_part(), definiamo una o più costanti:

define(COSTANTE_PROVA, "foo");
get_template_part("blocco-chisiamo", "chisiamo" );

Nel file blocco-chisiamo.php  potremmo utilizzare adesso la costante appena dichiarata. Facciamo attenzione a non creare override con le costanti di sistema: utilizziamo, magari, un prefisso per il nostro tema.

echo COSTANTE_PROVA;
// foo

Cosa non utilizzare

Le globali sono molto utilizzate in WordPress, ma in genere è meglio evitarle .

Le Query vars (get_query_vars() e set_query_vars()) non sono fatte per questo scopo, sono un workaround.. ma come vi ho dimostrato ci sono soluzioni più semplici ed eleganti.

Questo articolo ti è stato utile?
Wordpress – LETTURA 5 MINUTI Abilitare upload di file in WordPress (senza plugin)
Se volessimo caricare nella Libreria Media di WordPress un tipo di file non supportato, riceveremo l’errore: Non hai i permessi…
Wordpress – LETTURA 7 MINUTI WordPress e cron job in modo semplice
WordPress possiede un sistema interno di cron job da poter sfruttare in modo modo semplice, senza l’utilizzo di alcun plugin…
Wordpress – LETTURA 3 MINUTI Ottenere l’URL della pagina attuale in WordPress
Ecco uno snippet che ci permette di ottenere velocemente l’URL della pagina WordPress attuale, non importa se essa è una…
Wordpress – LETTURA 4 MINUTI Visualizzare i tag di una categoria in WordPress
Nella costruzione di un template, spesso ci troviamo a dover ottenere la lista dei tag dei post associati ad una…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.