Der WP Codex sagt dazu:
// You wish to make $my_var available to the template part at `content-part.php`
set_query_var( 'my_var', $my_var );
get_template_part( 'content', 'part' );
Aber wie mache ich echo $my_var
das im Template Teil? get_query_var($my_var)
funktioniert bei mir nicht
Ich habe Tonnen von Empfehlungen für die Verwendung locate_template
stattdessen gesehen. Ist das der beste Weg?
variables
get-template-part
Florian
quelle
quelle
set_query_var
undget_query_var
, dies war jedoch für die Verwendung der Werte eines$args
Arrays, das an a übergeben wirdWP_Query
. Könnte für andere hilfreich sein, die anfangen, dies zu lernen.Antworten:
Wenn Posts ihre Daten über
the_post()
(bzw. übersetup_postdata()
) einrichten und daher über die API zugänglich sind (get_the_ID()
z. B.), nehmen wir an, dass wir eine Gruppe von Benutzern durchlaufen (indemsetup_userdata()
die globalen Variablen des aktuell angemeldeten Benutzers und von isn 'gefüllt werden). t nützlich für diese Aufgabe) und versuchen Sie, Metadaten pro Benutzer anzuzeigen:Dann
wpse-theme/template-parts/user-contact_methods.php
müssen wir in unserer Datei auf die Benutzer-ID zugreifen:Das ist es.
Die Erklärung liegt genau über dem Teil, den Sie in Ihrer Frage angegeben haben:
Die native PHP-
extract()
Funktion "extrahiert" die Variablen (dieglobal $wp_query->query_vars
Eigenschaft) und fügt jeden Teil in eine eigene Variable ein, die genau den gleichen Namen wie der Schlüssel hat. Mit anderen Worten:quelle
Die
hm_get_template_part
Funktion von Humanmade ist extrem gut und ich benutze es die ganze Zeit.Du rufst an
und dann verwenden Sie in Ihrer Vorlage
um den Wert zurückzugeben. Es macht Caching und alles, obwohl Sie das herausnehmen können, wenn Sie möchten.
Sie können die gerenderte Vorlage sogar als Zeichenfolge zurückgeben, indem Sie sie
'return' => true
an das Array key / value übergeben.quelle
Ich habe mich umgesehen und eine Vielzahl von Antworten gefunden. Es scheint auf einer nativen Ebene, Wordpress ermöglicht den Zugriff auf Variablen in Template-Teilen. Ich habe festgestellt, dass die Verwendung des Include in Verbindung mit locate_template den Zugriff auf den Gültigkeitsbereich der Variablen in der Datei ermöglicht.
quelle
include
wird den Test nicht bestehen .Ich empfehle, über die Funktion PHP Extract () zu lesen.
quelle
Ich bin auf dasselbe Problem bei einem Projekt gestoßen, an dem ich gerade arbeite. Ich habe mich dazu entschlossen, ein eigenes kleines Plugin zu erstellen, mit dem Sie Variablen mithilfe einer neuen Funktion expliziter an get_template_part übergeben können.
Für den Fall, dass Sie es nützlich finden, finden Sie hier die Seite auf GitHub: https://github.com/JolekPress/Get-Template-Part-With-Variables
Und hier ist ein Beispiel, wie es funktionieren würde:
quelle
Ich mag das Pods- Plugin und die Funktion pods_view . Es funktioniert ähnlich wie
hm_get_template_part
in der Antwort von djb. Ich verwende eine zusätzliche Funktion (findTemplate
im folgenden Code), um zuerst im aktuellen Design nach einer Vorlagendatei zu suchen. Wenn sie nicht gefunden wird, wird die gleichnamige Vorlage im/templates
Ordner meines Plugins zurückgegeben . Dies ist eine ungefähre Vorstellung davon, wie ichpods_view
mein Plugin verwende:pods_view
unterstützt auch Caching, aber ich brauchte das nicht für meine Zwecke. Weitere Informationen zu den Funktionsargumenten finden Sie auf den Pods-Dokumentationsseiten. Siehe die Seiten für pods_view und Partial Page Caching und Smart Template Parts with Pods .quelle
Basierend auf der Antwort von @djb unter Verwendung von Code von humanmade.
Dies ist eine kompakte Version von get_template_part, die Argumente akzeptieren kann. Auf diese Weise werden Variablen lokal auf diese Vorlage beschränkt. Keine Notwendigkeit zu haben
global
,get_query_var
,set_query_var
.Zum Beispiel in
cart.php
:In
apple.php
:quelle
Wie wäre es damit?
Mit
${$key}
können Sie die Variablen in den aktuellen Funktionsumfang aufnehmen. Funktioniert für mich schnell und einfach und es tritt nicht aus oder wird nicht im globalen Bereich gespeichert.quelle
Für diejenigen, die eine einfache Möglichkeit zur Übergabe von Variablen suchen, können Sie die Funktion folgendermaßen ändern:
Und dann können Sie alle Variablen verwenden, die definiert wurden, bevor Sie die Vorlage einbinden, ohne zusätzlich jede für die Vorlage zu übergeben.
Credits gehen an: https://mekshq.com/passing-variables-via-get_template_part-wordpress/
quelle
Dies ist eine exakte Lösung und es hat gut funktioniert. https://developer.wordpress.org/reference/functions/set_query_var/
quelle