Ein Theme mit WordPress/ Jigoshop erstellen – Teil 3

4. November 2012 - jigoshop, wordpress

3. Produktdarstellung

Verantwortlich für die Anzeige des Shops bzw. in meinem Fall der einzelnen Produkte in ihren Kategorien ist die Datei …plugins/jigoshop/templates/loop-shop.php

Sie wird über den entsprechenden Shortcode auf den WordPress-Produktseiten (z.B.

[ jigoshop_category slug="weissweine” ]

aufgerufen.

In loop-shop.php sind bereits einige action-hooks enthalten. Diese Hooks werden über

…. plugins/jigoshop/template_actions.php  und

…. plugins/jigoshop/template_functions.php  bedient.

Alles in allem ist das etwas unübersichtlich, weil template_actions.php und  template_functions.php selbst wieder neue action-hooks erzeugen und bedienen.

Der Demo-Shop im Theme twentyeleven lässt sich damit perfekt erzeugen, aber eine Änderung der Produktanzeige nur über die Hooks ist entsetzlich mühselig.

Ich habe daher auf all diese Hooks verzichtet, in meinem Theme einen Ordner jigoshop erstellt, die loop-shop.php dort hinein kopiert und modifiziert. Ähnlich wie WordPress mit den Childthemes verfährt, greift Jigoshop auf diese Datei zu, wenn loop-shop.php geladen werden soll.

Meine loop-shop.php sieht jetzt so aus:

global $columns, $per_page;
$nf_flag=is_shop('Weinshop');
if (!$nf_flag) do_action('jigoshop_before_shop_loop');

$loop = 0;
ob_start();

if (have_posts()) : while (have_posts()) : the_post(); $_product = new jigoshop_product( $post->ID ); $loop++;

nf_product_display($post,$_product,$loop,$nf_flag);

endwhile; endif;

if ($loop==0) :

if ($nf_flag) echo '';
else echo '<p class="info">'.__('No products found which match your selection.', 'jigoshop').'</p>';

else :

$found_posts = ob_get_clean();

if ($nf_flag) {echo $found_posts;}

else {echo '<div id="product_wrapper">' . $found_posts . '</div><div class="clear"></div>';}

endif;

In der Funktion nf_product_display (…), die in der functions.php steht, wird das Produkt so wie in der Werbeagentur-Vorlage grafisch vorgegeben aus den vielen Einzelteilen über get_post_meta( $post->ID, …. ) zusammen gebaut und direkt ausgegeben.

Wenn man genau hingesehen hat, sind zwei Loops notwendig für die Produktausgabe.

Über loop-shop.php werden alle in Frage kommenden Produkte gesammelt und formatiert und über die zweite Loop in dem WordPress-Seiten-Template dann in einem Satz ausgegeben.

Für einige Funktionen wie „Preis ausgeben“ und „in den Warenkorb legen“ habe ich mich noch an Methoden der wichtigen Produktklasse plugins/jigoshop/classes/ jigoshop_product.class.php, die in der Loop für jedes Produkt neu instanziiert wird, bedient ($_product->get_price_html() bzw. $_product->add_to_cart_url())

Man sollte noch daran denken, in der Nähe des Preises den Hinweis „inkl. MwSt. zzgl. Versand“ anzufügen.