Woocommerce – Alternative für woocommerce_locate_template
Lesezeit: 5 Minuten
Ich entwickle ein Plugin basierend auf WooCommerce und als Teil davon musste ich den Standardspeicherort der Vorlagendatei von WooCommerce überschreiben. Ich meine, ich suche nach einer benutzerdefinierten Woocommerce-Vorlage, die von meinem Plugin geladen wird.
Um dies zu tun, habe ich auf dieser Grundlage in woocommerce über woocommerce_locate_template gelesen Artikelaber mir ist aufgefallen, dass dieselbe Funktion als veraltet markiert wurde Verknüpfung. Jetzt frage ich mich, was eine alternative Funktion dafür sein könnte.
Meine ganze Absicht war es, den Standard-Ladeort für Woocommerce-Vorlagen in meinen Plugin-Ordner zu ändern. Irgendwelche Hilfe bei der Lösung dieses Problems? Danke im Voraus.
Lorenzo Zottar
Die Funktion woocommerce_locate_template ist zugunsten von wc_locate_template veraltet: Sie können den Code lesen hier.
Wenn Sie jedoch nach dem suchen Filteres ist immer noch woocommerce_locate_template und nimmt drei Argumente:
$Vorlage das ist das Ergebnis der wp-Core-Funktion locate_template
$Vorlagenname das ist nur der Dateiname
$template_path Das ist der WooCommerce-Pfad für Vorlagen
Sie können also überprüfen, ob $template_name das ist, was Sie abfangen möchten, und den Pfad ändern, wenn er wahr ist, wie folgt
function intercept_wc_template($template, $template_name, $template_path) {
if ($template_name == 'that_template.php') {
$template="the/path/of/your/plugin/template.php";
}
return $template;
}
add_filter('woocommerce_locate_template', 'intercept_wc_template', 20, 3);
Ich habe es nicht getestet, also entschuldigen Sie mögliche Syntaxfehler 🙂
Ich hoffe es hilft!
— Update 1: Ich habe ein Semikolon vergessen 😛 — — Update 2: Ich habe einen Fehler gemacht! —
Danke für deine Antwort Lorenzo Zottar. Ich habe Ihren Code ausprobiert und unten ist der Code, aber ich sehe, dass keine Änderungen an der Produktvorlage vorgenommen werden.
– krishna89
7. September 2015 um 22:40 Uhr
Hier ist der Code, den ich versucht habe function intercept_wc_template($template, $template_name, $template_path) { if ($template_name == 'content-single-product.php') { //um_product_path is the plugin path $template = locate_template(um_product_path.'woocommerce/single-product/content-single-product.php'); } return $template; } add_filter('woocommerce_locate_template', 'intercept_wc_template', 20, 3);
– krishna89
7. September 2015 um 22:41 Uhr
Versuchen Sie hinzuzufügen var_dump($template); vor dem return $template um zu debuggen, ob der Pfad korrekt ist und ob die if-Anweisungen funktionieren. Die Zeichenfolge wird oben auf Ihrer Seite angezeigt, wenn Sie eine Woocommerce-Seite aufrufen. Der Filter funktioniert, also könnte es ein Problem mit Ihrem Pfad oder ein Problem in der if-Anweisung sein 🙂
– Lorenzo Zottar
7. September 2015 um 22:54 Uhr
Ich habe gerade den var_dump auf der Produktseite überprüft. Beachten Sie, dass sich die var_dump-Zeichenfolge auf den ursprünglichen Woocommerce-Vorlagenordner oder meinen Themen-Woocommerce-Ordner bezieht, aber nicht auf meinen Plugin-Ordner.
– krishna89
7. September 2015 um 23:00 Uhr
Das Problem liegt also in der if-Anweisung: ändern Sie die var_dump in var_dump($template_name); und gehen Sie zu der Seite, die Sie abfangen möchten, und überprüfen Sie den genauen Namen der Vorlage. Allerdings habe ich einen Fehler gemacht, Sie müssen nicht locate_template verwenden, sondern einfach die Variable $template überschreiben: Ich habe es gerade auf meinem lokalen Rechner getestet. Ich werde meine Antwort bearbeiten.
– Lorenzo Zottar
7. September 2015 um 23:22 Uhr
Ich musste den obigen Code ändern, damit er korrekt mit der von mir benötigten Vorlagendatei übereinstimmt, die in meinem Fall “variable.php” war.
$template_name muss der vollständige Woocommerce-Root-Pfad sein, siehe unten:
Siehe den geänderten Code unten:
function intercept_wc_template($template, $template_name, $template_path) {
if ($template_name == 'single-product/add-to-cart/variable.php') {
$template="wp-content/themes/theme-name/woocommerce/single-product/add-to-cart/variable.php";
}
return $template;
}
add_filter('woocommerce_locate_template', 'intercept_wc_template', 20, 3);
Jonas Lundman
Wenn jemand ab 2021 damit zu kämpfen hat, sollte erwähnt werden, dass die Filter'woocommerce_locate_template'filtert nicht alle Vorlagen im WooCommerce-Ordner. Stattdessen müssen Sie zwei andere Funktionen filtern:
Dies wird aus der PHP-Klasse herausgerissen und hier eingefügt, also ist der Code hoffentlich nicht beschädigt.
Wir empfehlen, die Vorlagen für eine sauberere Leistung zu registrieren, wenn Sie nur wenige verwenden, und so etwas früh in den Funktionen hinzuzufügen: