WordPress Blog und Shop – Was ist zu beachten?

Ein Blog ist eines der besten Marketingtools für einen Webshop. Mit WordPress haben wir eine hervorragende Software für beide Anwendungen. Es sind allerdings einige Details zu beachten, wenn Blog und Shop auf einer Instanz laufen. Wenn das Modul Produktartikel verwendet wird, legt wpShopGermany für jedes Produkt einen WordPress Artikel als Custom Post Type an.

Normalerweise sollte dieser Post Type im Loop nicht berücksichtigt werden. Leider werden die Produkte im Shop aber im Blog, in den Suchergebnissen und im RSS Feed angezeigt. Weil regulär keine Exzerpte für Custom Post Types angelegt werden können, ist die Darstellung oftmals nicht akzeptabel und nutzlos für die Besucher der Seite oder Abonnenten des Feed.

Hier ist leider Handarbeit gefragt. Wir müssen wohl oder übel die functions.php des Theme modifizieren. Zunächst legen wir eine Kategorie an, die wir nur für die Artikel im Shop verwenden. Diese Kategorie exkludieren wir von der Suche, indem wir folgenden Code in die functions.php schreiben:

function exclude-cat($query) { 
if ($query->is_feed) {
$query->set('cat','-5');
}
return $query;
}
add_filter('pre_get_posts','exclude-cat');

Die ID der Kategorie passen wir natürlich an. Anschließend registrieren wir den Custom Post Typ Produkte und exkludieren diesen von der Suche. Über diese Funktion können wir, wenn gewünscht, diesen Custom Post Type auch im Dashboard von WordPress anzeigen lassen. Später lässt sich etwa das Datum ändern, so dass wir die Reihenfolge beeinflussen können, in der die Produkte im Online Shop dargestellt werden. Wir schreiben in die functions.php:

function produkte_menu() { 
register_post_type( 'produkte',
array(
'labels' => array(
'name' => 'Produkte' ),
'public' => true,
'menu_position' => 4,
'add_new' => '',
'supports' => array( 'title', 'editor', 'excerpt' ),
'taxonomies' => array( '' ),
'has_archive' => false,
'exclude_from_search' => true,
)
);
}
add_action( 'init', 'produkte_menu' );
function toggle_custom_menu_order(){
return true;

Screenshot Custom Post Type

Leider erscheinen die Custom Post Types aber immer noch im Blog, wo wir sie am wenigsten haben wollen. Die Exkludierung lässt sich leicht über einen angepassten Loop realisieren. Nicht so einfach ist es allerdings, wenn wir das empfehlenswerte Plugin WP-PageNavi verwenden wollen, das auch auf dieser Seite für die Paginierung zuständig ist.

  Screenshot Pagination

Dafür müssen wir den Loop ändern. Meistens ist die index.php zu ändern. Das hängt aber vom Theme ab und lässt sich nicht verallgemeinern. Für diese Seite heißt der modifizierte Loop:

<?php /* Start the Loop */ ?> 
<?php $exclude = new WP_Query('cat=-5&paged=' . $paged);
while ($exclude->have_posts()) : $wplover_home->the_post(); ?>
<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; // end of the loop. ?>
<?php if(function_exists('wp_pagenavi')) : wp_pagenavi( array(
'query' =>$exclude 
)); else: ?>
<?php baylys_content_nav( 'nav-below' ); ?>
<?php endif; ?>
</div>

Die Kategorie mit der ID wird exkludiert. Dennoch bleibt die Funktionalität von PageNavi voll erhalten.

Schreibe einen Kommentar