WooCommerce snippets (code) in functions.php plaatsen
In WooCommerce is niet voor alles een instelling te vinden, maar soms wil je nou eenmaal bepaalde dingen bereiken.
Wil je bijvoorbeeld dat er niet 4 maar 3 producten naast elkaar staan? Wanneer je hier geen thema optie voor hebt zal je dit zelf moeten doen met een stukje code, ook wel snippet genoemd.
Deze snippet kun je dan vervolgens in het functions.php bestand van je thema plaatsen om ervoor te zorgen dat er maximaal 3 kolommen naast elkaar worden getoond.
In dit artikel kun je leren hoe je snippets in het functions.php kunt plaatsen en laat ik een mooie lijstje met snippets zien.
Hoe kun je snippets plaatsen?
Om een snippet te plaatsen om iets te bereiken met je WooCommerce website moet je naar het functions.php bestand van het thema waar je gebruik van maakt gaan.
Je kunt hier via FTP komen (zo ga ik er altijd heen), maar ook via Weergave -> Bewerker.
Eenmaal het bestand geopend zie je bovenaan <?php staan, dit is de openingstag. Helemaal onderaan het bestand zie je in sommige gevallen ?> staan, dit is de sluitingstag. Het is echter dus ook mogelijk dat je geen sluitingstag ziet staan, dit is dan ook geen probleem.
Alle snippets die je hieronder krijgt moet je altijd tussen de openings- en sluitingstag plaatsen. Dit is het belangrijkste wat je moet onthouden en weten.
WooCommerce snippets
Mocht je ergens geen instelling voor vinden en gaat het om een redelijk kleine wijziging, dan is er een grote kans dat je het met een snippet kunt oplossen.
Hieronder volgen diverse snippets waar je gebruik van kunt maken op je website. Al deze snippets zijn afkomstig van WooThemes. Het bedrijf dat WooCommerce gemaakt heeft.
Categorieafbeelding tonen op categoriepagina
Heeft je thema niet de mogelijkheid om een categorieafbeelding te laten zien? Plaats dit stukje code in het functions.php bestand en het is alsnog mogelijk.
add_action( 'woocommerce_archive_description', 'woocommerce_category_image', 2 ); | |
function woocommerce_category_image() { | |
if ( is_product_category() ){ | |
global $wp_query; | |
$cat = $wp_query->get_queried_object(); | |
$thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true ); | |
$image = wp_get_attachment_url( $thumbnail_id ); | |
if ( $image ) { | |
echo '<img src="' . $image . '" alt="' . $cat->name . '" />'; | |
} | |
} | |
} |
Automatisch bestellingen op afgerond zetten
Wil je om een bepaalde reden dat bestellingen altijd automatisch op afgerond worden gezet, dan kun je dit doen met behulp van onderstaande snippet.
/** | |
* Auto Complete all WooCommerce orders. | |
*/ | |
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' ); | |
function custom_woocommerce_auto_complete_order( $order_id ) { | |
if ( ! $order_id ) { | |
return; | |
} | |
$order = wc_get_order( $order_id ); | |
$order->update_status( 'completed' ); | |
} |
Tracking code op de bedanktpagina
Wil je de conversies bijhouden op je website? Met onderstaande snippet kun je de een tracking code toevoegen aan de bedanktpagina.
add_action( 'woocommerce_thankyou', 'my_custom_tracking' ); | |
function my_custom_tracking( $order_id ) { | |
// Lets grab the order | |
$order = wc_get_order( $order_id ); | |
/** | |
* Put your tracking code here | |
* You can get the order total etc e.g. $order->get_total(); | |
*/ | |
// This is the order total | |
$order->get_total(); | |
// This is how to grab line items from the order | |
$line_items = $order->get_items(); | |
// This loops over line items | |
foreach ( $line_items as $item ) { | |
// This will be a product | |
$product = $order->get_product_from_item( $item ); | |
// This is the products SKU | |
$sku = $product->get_sku(); | |
// This is the qty purchased | |
$qty = $item['qty']; | |
// Line item total cost including taxes and rounded | |
$total = $order->get_line_total( $item, true, true ); | |
// Line item subtotal (before discounts) | |
$subtotal = $order->get_line_subtotal( $item, true, true ); | |
} | |
} |
Specifieke categorie niet op de winkelpagina
Wil je de producten van een specifieke categorie niet op de winkelpagina laten zien? Onderstaande code kan je hiermee helpen. Uiteraard moet je nog wel even “knives” aanpassen naar de productcategorie waar je dit voor wilt instellen.
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' ); | |
function custom_pre_get_posts_query( $q ) { | |
if ( ! $q->is_main_query() ) return; | |
if ( ! $q->is_post_type_archive() ) return; | |
if ( ! is_admin() && is_shop() ) { | |
$q->set( 'tax_query', array(array( | |
'taxonomy' => 'product_cat', | |
'field' => 'slug', | |
'terms' => array( 'knives' ), // Don't display products in the knives category on the shop page | |
'operator' => 'NOT IN' | |
))); | |
} | |
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' ); | |
} |
Geef aan dat je WooCommerce ondersteunt
Heb je een thema dat eigenlijk niet gemaakt is voor WooCommerce, maar die je wel (zelf) goed werkend hebt gekregen? Dan ben je vroeg of laat vast de melding zat dat je thema geen ondersteuning biedt voor WooCommerce. Met onderstaande snippet laat je deze melding op magische wijze verdwijnen.
add_action( 'after_setup_theme', 'woocommerce_support' ); | |
function woocommerce_support() { | |
add_theme_support( 'woocommerce' ); | |
} |
Bepaal het aantal galerijafbeeldingen per rij
Ben je het niet eens met hoeveel afbeeldingen er naast elkaar staat in een productgalerij, dan is dit aan te passen met behulp van deze snippet. Je hoeft alleen even 4 aan te passen in een andere cijfer.
add_filter ( 'woocommerce_product_thumbnails_columns', 'xx_thumb_cols' ); | |
function xx_thumb_cols() { | |
return 4; // .last class applied to every 4th thumbnail | |
} |
Aantal producten per pagina
Het is fijn om zelf te bepalen hoeveel producten er per pagina worden weergegeven. Met deze snippet heb je deze keuze. Het enige wat je hoeft te doen is het aantal 24 aanpassen naar het aantal producten dat jij op de homepage wilt laten zien.
add_filter( 'loop_shop_per_page', 'new_loop_shop_per_page', 20 ); | |
function new_loop_shop_per_page( $cols ) { | |
// $cols contains the current number of products per page based on the value stored on Options -> Reading | |
// Return the number of products you wanna show per page. | |
$cols = 9; | |
return $cols; | |
} |
Pas het aantal producten per rij aan
Naast dat je het aantal producten per pagina wilt kunnen aanpassen heb je misschien ook de behoefte om het aantal producten per rij aan te passen. In onderstaande snippet hoef je alleen het aantal 3 aan te passen naar het gewenste aantal om dit te bereiken.
// Change number or products per row to 3 | |
add_filter('loop_shop_columns', 'loop_columns'); | |
if (!function_exists('loop_columns')) { | |
function loop_columns() { | |
return 3; // 3 products per row | |
} | |
} |
Verplicht minimum bestelbedrag
Wanneer je klanten alleen de mogelijkheid wilt geven om iets te bestellen vanaf een minimum bestelbedrag, dan is onderstaande snippet je redding. Pas het aantal 50 aan naar het door jou gewenste minimum bestelbedrag.
add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' ); | |
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' ); | |
function wc_minimum_order_amount() { | |
// Set this variable to specify a minimum order value | |
$minimum = 50; | |
if ( WC()->cart->total < $minimum ) { | |
if( is_cart() ) { | |
wc_print_notice( | |
sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' , | |
wc_price( $minimum ), | |
wc_price( WC()->cart->total ) | |
), 'error' | |
); | |
} else { | |
wc_add_notice( | |
sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' , | |
wc_price( $minimum ), | |
wc_price( WC()->cart->total ) | |
), 'error' | |
); | |
} | |
} | |
} |
Verzendmethoden verbergen bij gratis verzenden
WooCommerce laat standaard alle beschikbare verzendmethoden zien bij een bestelling. Wanneer je gratis verzendkosten hebt vanaf een bepaald minimum bedrag, dan zal het normale tarief ook nog altijd zichtbaar zijn als gratis verzenden bereikt is.
Je klant zal hier natuurlijk nooit voor kiezen en het staat wat slordig om dit nog wel te laten zien. Onderstaande snippet lost dit voor je op en verbergt alle andere verzendmethoden wanneer een bestelling gratis verzonden kan worden.
/** | |
* woocommerce_package_rates is a 2.1+ hook | |
*/ | |
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 ); | |
/** | |
* Hide shipping rates when free shipping is available | |
* | |
* @param array $rates Array of rates found for the package | |
* @param array $package The package array/object being shipped | |
* @return array of modified rates | |
*/ | |
function hide_shipping_when_free_is_available( $rates, $package ) { | |
// Only modify rates if free_shipping is present | |
if ( isset( $rates['free_shipping'] ) ) { | |
// To unset a single rate/method, do the following. This example unsets flat_rate shipping | |
unset( $rates['flat_rate'] ); | |
// To unset all methods except for free_shipping, do the following | |
$free_shipping = $rates['free_shipping']; | |
$rates = array(); | |
$rates['free_shipping'] = $free_shipping; | |
} | |
return $rates; | |
} |
Tot zover een mooi lijstje met handige snippets die je kunt gebruiken op je WooCommerce website. Ik hoop dat je er wat aan hebt gehad en dat je begrijpt hoe je er gebruik van kunt maken op je website.
Het is binnen Woocommerse niet mogelijk een E Book aan te bieden. Wel kan je een E Book in een RAR of ZIP bestand stoppen. Is er een snippet waarmee je wel een epub of mobi bestand kunt aanbieden?
zie: https://support.woothemes.com/hc/en-us/community/posts/202318456-Add-E-pub-and-Mobi-Ebook-Products
Hoi, ik zie hier de mogelijkheid uitgelegd om ipv 4 producten 3 op een rij te krijgen. Wat ik eigenlijk zou willen is soms 4 / soms 3 op een rij, maar dan wel op de zelfde pagina.
Waarom? Ik heb verschillende spijkerbroek stoffen die per washing bij elkaar horen. Dat zijn er meestal 4, maar soms ook 3. Ik wil ze wel graag op 1 pagina presenteren, maar liefst naast elkaar laten staan.
Is dat mogelijk?
Zou mogelijk kunnen zijn als je zelf goed kan programmeren en coderen, maar het lijkt me niet helemaal logisch.
Wat je zou kunnen doen is een categorie pagina met al die spijkerbroeken tonen en aan de rechterkant een filter waar je bijv de wassing kunt kiezen.
Je kunt de wassing dan als tag meegeven aan een spijkerbroek.
Is het mogelijk om met snippets een product-pagina als homepage in te stellen?
Dan zou je de snippet op de homepagina van je WP installatie kunnen plakken.
Weet jij wat je er dan precies zou kunnen neerzetten? Ik kan er verder nergens informatie over vinden.. Hoop dat je me kan helpen!
Hoe kan ik de knop ‘Bestelling plaatsen’ wijzigen op de afreken pagina?
ik heb de snippet van de Verzendmethoden verbergen bij gratis verzenden ingevoerd in mijn function php maar werkt niet (: