Bien que je l'utilise généralement include
ou require
seul pour économiser la maintenance de code à long terme, j'ai commencé à l'utiliser get_template_part
et locate_template
utiliser des éléments WordPress intégrés est toujours préférable.
Ma question est la suivante: êtes-vous censé être capable de transmettre des variables aux résultats de l'un get_template_part
ou de l'autre locate_template
?
<?php
$var = get_option( 'my-custom-option' );
get_template_part( 'custom-template-part' );
?>
Dans le code ci-dessus, le $var
serait imprimé dans le modèle personnalisé, mais la variable ne semble pas fonctionner. Est-ce que je manque quelque chose ou est ce comportement attendu?
J'ai constaté qu'ils ne passaient pas dans l'instance ci-dessus ou lors de l'utilisation de Locate_template
<?php
locate_template( 'custom-template-part.php', true );
?>
la source
locate_template()
en fait, l' inclusion est faite, si le paramètre est défini commetrue
-as dans la question. (Par défautfalse
, ne collez pas la version de la question dans la réponse acceptée.) Vous pouvez également simplement utiliserset_query_var('var', $var);
et utiliser votreget_template_part()
comme d'habitude. Ensuite, vous avez également les variables Worpdress par défaut accessibles dans le fichier modèle, comme indiqué par @MathSmath.Une solution soignée trouvée dans le codex
Donc, si vous parcourez des publications personnalisées, vous pouvez le faire:
Et dans ce modèle, vous obtiendrez automatiquement un
$my_post
.la source
wc_get_template_part
WooCommerce qui étend sans aucun doute WP par défaut.J'ai également eu des problèmes avec cela (en essayant de faire en sorte qu'une requête personnalisée fonctionne avec un élément de modèle). La réponse courte est: non, la partie de modèle n'hérite pas automatiquement des vars personnalisés comme le ferait une inclusion classique.
Les méthodes get_template_part () et local_template () utilisent finalement la fonction load_template () pour charger le fichier (à l'aide d'un require). Cette fonction permet de globaliser les vars suivants:
$ posts, $ post, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ comment, $ user_ID
Cependant, aucun autre fichier ne semble être disponible à l'intérieur de la partie modèle. Je suppose que puisque l'exigence réelle est encapsulée dans une fonction, la portée change ou quelque chose de ce genre?
Quoi qu'il en soit, j'essayerais de globaliser tous les vars supplémentaires que vous devez transmettre, puis d'appeler ces globals à partir de votre partie de modèle.
la source
Juste mes deux centimes pour les références futures, une solution au moins dans Wordpress 3.5 consiste à ajouter la variable à
$wp_query->query_vars
.J'avais besoin de mon global
_vk_errors
dans une partie de modèle et juste$wp_query->query_vars['_vk_errors'] = $_vk_errors;
avant d'appelerget_template_part()
.la source
Il y a mon problème de résolution de fonction simple. C'est faire la même chose que Wordpress en
get_template_part()
fonction. Il suffit de copier et coller pourfunction.php
Exemple d'utilisation dans le modèle
Dans la
content-heighlight.php
variable est accessible avec nom$utm_source
et valeurfooter
la source
Vous pouvez simplement envelopper get_template_part, stocker un objet de modèle dans une variable globale et l'effacer ultérieurement. Voici comment nous en sommes dans nos projets:
functions.php
Utilisation dans le template principal:
Accéder au modèle fourni dans la partie modèle:
De cette façon, vous n'avez pas besoin de copier-coller la fonction get_template_part d'origine dans votre propre fonction au cas où son implémentation pourrait être modifiée ultérieurement par les développeurs WP.
la source