WooCommerce sales overzichtspagina maken

Geplaatst op: 1 mei 2014 | Auteur: Niels Pilon | Categorie: WordPress

Tijdens de analyse van de Google Webmastertools van een WooCommerce webshop kwam ik iets vreemds tegen bij de crawlerfouten. In de rij van niet gevonden pagina’s stonden namelijk veel links van producten die in de sale waren geweest en waarvan de permalink niet meer bestond. Dit ontstond omdat de permalink door WooCommerce werd gewijzigd zodra een artikel in de sale ging. Tijd om hier iets aan te doen aangezien deze situatie verre van optimaal is.

De oude situatie

Om sales producten weer te geven op de webshop was er een product categorie ‘sales’ aangemaakt. Op deze manier konden de artikelen eenvoudig op een product categorie pagina van WooCommerce getoond worden. Zodra een artikel in de sale ging werd er een vinkje gezet bij de ‘sales’ categorie op de product pagina.

sales categorie
Het probleem met de categorieën
menu structuur
Zo werd de sales pagina getoond

Bij nader inzien zitter er echter twee nadelen aan deze oplossing:

  • de permalink van het product wat in de sale ging werd elke keer anders. Namelijk webshop.nl/winkel/sjaals/naam-product versus webshop.nl/winkel/sale/product-naam
  • de permalink van de salespagina was niet optimaal; webshop.nl/product-categorie/sale

De gewenste situatie

Om het probleem op te lossen moest de manier waarop we sales producten toonden op de WooCommerce webshop dus anders aangepakt worden. De permalink van het artikel moet hetzelfde blijven of het artikel nu in de sale was of niet. En ook de permalink van de salespagina moest veel netter worden.

De oplossing

Om het probleem op te lossen heb ik gebruik gemaakt van code snippet die ik op GitHub vond. De snippet zorgt ervoor dat er een nieuwe shortcode wordt aangemaakt die je op een pagina binnen de WooCommerce omgeving kan plaatsen. De shortcode werkt net zoals bijvoorbeeld de standaard ‘featured products’ shortcode die in WooCommerce aanwezig is.

<?php
add_shortcode( 'sale_products', 'sale_products' );
function sale_products( $atts ){
global $woocommerce_loop, $woocommerce;

extract( shortcode_atts( array(
'per_page' => '12',
'columns' => '4',
'orderby' => 'title',
'order' => 'asc'
), $atts ) );

// Get products on sale
$product_ids_on_sale = woocommerce_get_product_ids_on_sale();

$meta_query = array();
$meta_query[] = $woocommerce->query->visibility_meta_query();
$meta_query[] = $woocommerce->query->stock_status_meta_query();

$args = array(
'posts_per_page'=> $per_page,
'orderby' => $orderby,
'order' => $order,
'no_found_rows' => 1,
'post_status' => 'publish',
'post_type' => 'product',
'orderby' => 'date',
'order' => 'ASC',
'meta_query' => $meta_query,
'post__in' => $product_ids_on_sale
);

ob_start();

$products = new WP_Query( $args );

$woocommerce_loop['columns'] = $columns;

if ( $products->have_posts() ) : ?>

<?php woocommerce_product_loop_start(); ?>

<?php while ( $products->have_posts() ) : $products->the_post(); ?>

<?php woocommerce_get_template_part( 'content', 'product' ); ?>

<?php endwhile; // end of the loop. ?>

<?php woocommerce_product_loop_end(); ?>

<?php endif;

wp_reset_postdata();

return ob_get_clean();
}
?>

De snippet maakt achter de schermen een query aan die alle artikelen waarvan de prijs verlaagd is (de sale dus) oppakt en deze in een standaard loop plaatst.

De snippet kan je zelf naar wens verder aanpassen, dit zal voor de meesten voor zich spreken. Als er niets gewijzigd wordt dan worden er 12 artikelen getoond per pagina in 4 kollommen gesorteerd op de titels in aflopende volgorde.

Op deze manier hoeft er dus niet meer met categorieën gewerkt te worden waardoor de permalink van het product ongewijzigd wordt. Er kan daarnaast een pagina worden aangemaakt genaamd ‘sales’ waarop de shortcode [sale_products] geplaatst kan worden. Hiermee wordt ook gelijk het permalink probleem van de salespagina opgelost.

Meerdere oplossingen

Waarschijnlijk is dit vast niet de enige manier om sales artikelen te tonen op een pagina. En was de eerder gebruikte oplossing verre van handig. Ik ben dan ook benieuwd hoe anderen dit hebben opgelost of de situatie herkennen. Laat het weten door een reactie achter te laten.

Over Niels Pilon

Waanzinnige WordPress websites ontwikkelen. Dat doet Niels het liefst de hele dag. Jarenlange ervaring, een uitmuntend gevoel voor design en een enorme interesse in typografie zorgen voor een prachtig eindresultaat. Op het gebied van webdesign wordt hij graag uitgedaagd om verwachtingen te overtreffen.

Niels Pilon

Reageer

5 thoughts on “WooCommerce sales overzichtspagina maken

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *