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.