Während ich in der Regel verwendet habe include
oder require
allein, um langfristige Code-Wartung zu sparen, habe ich angefangen zu verwenden get_template_part
und locate_template
als Verwendung von in WordPress integriertem Zeug ist immer am besten.
Meine Frage ist, sollen Sie in der Lage sein, Variablen an die Ergebnisse von entweder get_template_part
oder weiterzuleiten locate_template
?
<?php
$var = get_option( 'my-custom-option' );
get_template_part( 'custom-template-part' );
?>
Im obigen Code wird das $var
in der benutzerdefinierten Vorlage gedruckt, aber die Variable scheint nicht zu funktionieren. Vermisse ich etwas oder ist dieses Verhalten zu erwarten?
Ich habe festgestellt, dass sie in der obigen Instanz oder bei Verwendung von locate_template nicht übergeben werden
<?php
locate_template( 'custom-template-part.php', true );
?>
quelle
locate_template()
ich mich aber: infact macht Inclusion, wenn der Parametertrue
wie in der Frage gesetzt ist. (Standard istfalse
, also fügen Sie die Fragen-Version nicht in die akzeptierte Antwort ein.) Sie können auch einfachset_query_var('var', $var);
Ihreget_template_part()
wie gewohnt verwenden. Dann haben Sie auch die Standard-Worpdress-Variablen in der Vorlagendatei, wie @MathSmath erwähnt.Eine saubere Lösung im Kodex
Wenn Sie sich also durch benutzerdefinierte Posts drehen, können Sie dies tun:
Und in dieser Vorlage selbst erhalten Sie automatisch eine
$my_post
.quelle
wc_get_template_part
WooCommerce, das ohne Zweifel das Standard-WP erweitert.Ich hatte auch Probleme damit (beim Versuch, eine benutzerdefinierte Abfrage für ein Vorlagenteil zu erstellen). Die kurze Antwort lautet: Nein, der Vorlagenteil erbt benutzerdefinierte Variablen nicht automatisch wie ein reguläres Include.
Sowohl get_template_part () als auch locate_template () verwenden schließlich die load_template () -Funktion, um die Datei tatsächlich zu laden (unter Verwendung einer Anforderung). Diese Funktion globalisiert die folgenden Variablen:
$ posts, $ post, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ comment, $ user_ID
Es scheinen jedoch keine anderen Variablen innerhalb des Vorlagenteils verfügbar zu sein. Ich vermute, da der tatsächliche Bedarf in eine Funktion eingebunden ist, ändert sich der Umfang oder so?
Jedenfalls würde ich versuchen, alle zusätzlichen Variablen zu globalisieren, die Sie übergeben müssen, und dann diese globalen Variablen aus Ihrem Vorlagenteil aufrufen.
quelle
Nur meine zwei Cent für zukünftige Verweise, ist eine Problemumgehung, zumindest in Wordpress 3.5, die Variable hinzuzufügen
$wp_query->query_vars
.Ich brauchte mein Global
_vk_errors
in einem Template-Teil und tat es kurz$wp_query->query_vars['_vk_errors'] = $_vk_errors;
vor dem Aufrufget_template_part()
.quelle
Es gibt meine einfache Funktion zur Lösung variabler Probleme. Es macht dasselbe wie Wordpress in
get_template_part()
Funktion. Einfach kopieren und einfügenfunction.php
Anwendungsbeispiel in Vorlage
In der
content-heighlight.php
ist zugreifbar Variable mit Name$utm_source
und Wertfooter
quelle
Sie können das get_template_part einfach umbrechen, ein Modellobjekt in einer globalen Variablen speichern und es später löschen. So haben wir es in unseren Projekten gemacht:
functions.php
Verwendung in der Hauptvorlage:
Zugriff auf das mitgelieferte Modell im Template-Teil:
Auf diese Weise müssen Sie die ursprüngliche Funktion get_template_part nicht kopieren und in Ihre eigene Funktion einfügen, falls die Implementierung später von WP-Entwicklern geändert wird.
quelle