In den front-top.php und front-main.php (die oben aufgerufen werden) muss ich auf numerische Variablen zugreifen (eine andere für jeden Abschnitt). Gibt es eine Möglichkeit, jedem der obigen Aufrufe eine Variable zu übergeben?
Vielen Dank
diezweipct
Mit WordPress 5.5+
Ab WordPress 5.5 gehört das Übergeben von Variablen über get_template_part dazu Ader.
Ab WordPress 5.5 ermöglichen die Funktionen zum Laden von Vorlagen jetzt, dass zusätzliche Argumente mithilfe eines neuen $args-Parameters an die übereinstimmende Vorlagendatei weitergegeben werden.
<?php
$newValue = get_query_var( 'my_var_name' );
if ( $newValue ) {
// do something
}
?>
Beachten Sie, dass die var in den Globals bleibt. Sie müssen set_query_var(‘my_var_name’, false); nach dem get_template_part-Aufruf, sonst sehen Sie beim nächsten Aufruf der Vorlage dieselben Variablen.
– Stavros
2. Juli 2020 um 21:28 Uhr
Leider die $args Parameter wird nicht durchlaufen extract() so müssen Sie tun echo $args['foo'] in der Vorlage statt nur echo $foo. Ich wünschte, es gäbe auch eine Option zum Extrahieren der Argumente.
– Powerboje
17. August 2020 um 9:30 Uhr
Hi. Ich bin neu in der WordPress-Codierung und habe versucht, eine Variable aus einer anderen Datei zu erhalten. Ich habe diese Variable $final_cat_url in /custom/last-category.php, die ich in customtemplate.php wiederverwenden möchte. Basierend auf dem, was Sie oben erklärt haben, habe ich versucht, den folgenden Code in customtemplate.php zu verwenden, aber es funktioniert nicht. get_template_part( 'custom/last-category', null, array('my_final_cat_url'=> $final_cat_url)); echo $args['my_final_cat_url']; Kannst du mir damit helfen? Danke vielmals.
– Jay
7. November 2021 um 14:43 Uhr
@Jay Sie sollten wirklich Ihre eigene Frage öffnen, aber versuchen Sie es mit print_r($args) um zu sehen, was die $args Variable bewegt sich zwischen Vorlagen.
– thetwopct
9. November 2021 um 5:49 Uhr
Die Funktion set_query_var funktioniert gut, erzeugt aber eine zusätzliche GET-Anforderung. Es wäre also leistungsmäßig besser, die Variable als dritten Parameter von zu übergeben get_template_part Funktion.
– Flori
29. August um 15:05 Uhr
Nathan Dawson
Der Kern get_template_part() Die Funktion unterstützt die Übergabe von Variablen nicht. Es akzeptiert nur zwei Parameter, Slug und Name. Obwohl es keine integrierte Lösung für dieses Problem gibt, besteht der beste Ansatz darin, eine Funktion zu erstellen, die genau nachahmt get_template_part() damit umzugehen.
Normalerweise würde ich eine Funktion erstellen, die nur den Namen der Vorlagendatei und die Variablen übernimmt, die ich als Array übergeben möchte. In Ihrem Beispiel verwenden Sie jedoch beide Argumente für get_template_part() bereits, was bedeutet, dass Sie eine etwas komplexere Funktion benötigen. Ich werde beide Versionen unten posten.
Vereinfachte Version – Name (Slug) und Daten
function wpse_get_partial($template_name, $data = []) {
$template = locate_template($template_name . '.php', false);
if (!$template) {
return;
}
if ($data) {
extract($data);
}
include($template);
}
Dies würde eine Datei mit dem Namen laden header-promotion.php mit $message darin verfügbar. Da der zweite Parameter ein Array ist, können Sie beliebig viele Variablen übergeben.
Kopie von get_template_part – Hinzufügen eines dritten Parameters
Wenn Sie beides nicht brauchen $slug und $name wenn du anrufst get_template_part(), möchten Sie wahrscheinlich die vereinfachte Version. Für diejenigen, die dies tun, ist hier die komplexere Option.
function wpse_get_template_part($slug, $name = null, $data = []) {
// here we're copying more of what get_template_part is doing.
$templates = [];
$name = (string) $name;
if ('' !== $name) {
$templates[] = "{$slug}-{$name}.php";
}
$templates[] = "{$slug}.php";
$template = locate_template($templates, false);
if (!$template) {
return;
}
if ($data) {
extract($data);
}
include($template);
}
Keine Funktion ist eine perfekte Kopie von get_template_part(). Ich habe alle zusätzlichen Filter, die die Kernfunktion verwendet, der Einfachheit halber übersprungen.
Was ist mit globalen oder Abfragevariablen
Globals sind in WordPress ziemlich alltäglich, werden aber im Allgemeinen am besten vermieden. Sie funktionieren, werden aber unordentlich, wenn Sie denselben Vorlagenteil mehr als einmal auf einer einzelnen Seite verwenden.
Abfragevariablen (get_query_var() / set_query_var()) sind dafür nicht gemacht. Es ist ein hackiger Workaround, der unbeabsichtigte Nebenwirkungen haben kann.
Sie können Daten über eine globale Variable an den Tempalte-Teil übergeben
dann in element-templates/front-top.php Holen Sie sich die Vars wie folgt:
[
'first' => $value_of_first,
'second' => $value_of_second,
'third' => $value_of_third,
] = $args;
echo 'I like to eat '.$value_of_first.' and '.$value_of_second.' and then drink '.$value_of_third.';
// will print "I like to eat pizza and hamburger and then drink milkshake"
Notiz: Die oben beschriebene Methode zum Abrufen der Variablen in der Vorlagendatei verwendet die assoziative Array-Umstrukturierung, die erst ab PHP 7.1 verfügbar ist. Sie können auch Folgendes tun:
echo 'I like to eat '.$args[value_of_first].' and ...
Eine schnelle und schmutzige Problemumgehung kann mit vorgenommen werden PHP-Konstanten:
Jetzt können Sie in der Vorlagendatei slug-name.php die A_CONSTANT_FOR_TEMPLATE_PART Konstante. Stellen Sie sicher, dass Sie Systemkonstanten nicht überschreiben, indem Sie ein benutzerdefiniertes Präfix für Ihren Konstantennamen verwenden.