Qui n'a jamais pesté devant son code lorsque que vous voulez simplement réutiliser votre variable $poo dans votre template que vous appelez, comme le force demande WordPress, avec la fonction get_template_part() ? Voici un code tout simple qui ne fonctionne pas:
$poo = 'toto'; get_template_part('single', 'toto);
Le fichier single-toto.php:
echo $toto;
Rien, nada, quedchi ....
L'astuce pourtant est toute simple. Il suffit d'ajouter votre variable à $wp_query via set_query_var. le code devient alors:
$poo = 'toto'; set_query_var( 'poo', $poo ); get_template_part('single', 'toto);
Et voilou .... $poo est accessible dans votre template single-toto.php, mais aussi tout autre template qui serait appelé par la suite. Mais pourquoi donc ...
La fonction get_template_part() fait appel à locate_template() qui ensuite fait appel à load_template() pour finalement retrouver votre template via un require() ou require_once(). Si on observe le code de la fonction load_template(), on remarque un petit bout de code intéressant juste avant le require() :
extract( $wp_query->query_vars, EXTR_SKIP );
C'est ici que la magie s'opère.
Notez que vous pouvez ensuite retirer cette variable juste après votre get_template_part() via remove_query_var('poo)