Verschiedene Produktlayouts für WooCommerce?

Das Problem:

Es wurde ein Shop für einen Kunden geplant. Der Einsatz von WooCommerce wurde dafür vorgesehen. Allerdings benötigen wir für eine bestimmte Shop Kategorie ein abweichendes Produktlayout als für die anderen Kategorien.

Standardmäßig kann man aber kein anderes Layout für eine bestimmte Kategorie verwenden.

Aus diesem Grund wurde also eine Lösung benötigt, die für eine vorher definierte Kategorie ein anderes Layout verwendet, als das Default.

Eigene Templatefiles benutzen

Bevor definiert werden kann, welches Template geladen werden soll, muss dieses auch erst mal vorhanden sein. Das Bearbeiten von Corefiles ist nicht update sicher, deswegen kopiert man das Template das man umschreiben möchte in seinen eigenen Themepfad und behält dabei die Filestruktur bei.

Beispiel:

Aus:

/wp-content/plugins/woocommerce/templates/single-product.php

wird:

/wp-content/themes/yourtheme/woocommerce/single-product.php

Nachdem alle benötigten Dateien update sicher in das eigene Template Verzeichnis kopiert worden sind. Kann man die single-product.php auch ohne größere Schäden zu verursachen bearbeiten.

Auszug aus der single-product.php Datei

Modifizieren der single-product.php

Standardmäßig findet sich folgender Codeschnipsel in der single-product.php in Zeile 35, wenn die Datei nicht weiter bearbeitet wurde:

		<?php while ( have_posts() ) : the_post(); ?>
		     <?php wc_get_template_part( 'content', 'single-product' ); ?>
		<?php endwhile; // end of the loop. ?>

Hier befindet sich die Anweisung den Template Part “single-product” auszugeben, solange Posts vorhanden sind. Alles klar soweit. Hier ist also auch genau der Punkt, an dem ich ansetze, um eine andere Template Datei zu laden.

if ( has_term( 'quads', 'product_cat' ) ) {
    woocommerce_get_template_part( 'content', 'single-product-quads' );
} else {
    woocommerce_get_template_part( 'content', 'single-product' );
}

Prüfen der Funktionalität

Wenn man jetzt prüft ob das oben genannte Vorgehen funktioniert, sieht man folgendes:

Leere Shopseite, weil das Template noch nicht eingebunden ist

Das Template wurde geladen, aber es wird nichts angezeigt. Der Grund, der dahinter steckt, ist relativ simpel.
Die Zeile woocommerce_get_template_part( ‘content’, ‘single-product-quads’ ); definiert, dass die Datei content-single-product-quads.php geladen werden soll. Die ist aber schlichtweg einfach noch nicht vorhanden.

Deswegen wird diese Datei als Erstes im Woocommerce Verzeichnis des eigenen Templates erstellt. Ich habe dazu die content-single-product.php kopiert und umbenannt, da ich auf dieser Struktur aufbauen möchte. Lädt man die Datei dann auf den Server, sieht die vorläufige Anzeige so aus:

Standard Single Product Ausgabe

Da die Verknüpfung jetzt klappt, kann man die Datei nach allen Vorlieben umändern und abarbeiten die einem so einfallen.

Schreibe einen Kommentar