Introductie
Het toevoegen van een extra fee bij de check-out is een handige functie die kan worden gebruikt om bijvoorbeeld een statiegeld fee toe te voegen aan producten in een bepaalde categorie. In deze blogpost gaan we kijken naar een code snippet die dit mogelijk maakt. Ik leg de code stap voor stap uit vertel hoe het werkt.
Code snippet WooCommerce check-out
add_action( 'woocommerce_cart_calculate_fees', 'wpx_wc_add_cart_fees_by_product_category' );
if ( ! function_exists( 'wpx_wc_add_cart_fees_by_product_category' ) ) {
/**
* wpx_wc_add_cart_fees_by_product_category.
*/
function wpx_wc_add_cart_fees_by_product_category( $cart ) {
// You need to enter your fees here, in `category slug` => `fee amount` format
$fees = array(
'diepvries' => 10,
);
foreach ( $cart->get_cart() as $cart_item_key => $values ) {
$product_categories = get_the_terms( $values['product_id'], 'product_cat' );
if ( $product_categories && ! is_wp_error( $product_categories ) ) {
$product_categories = wp_list_pluck( $product_categories, 'slug' );
foreach ( $product_categories as $product_category ) {
if ( ! empty( $fees[ $product_category ] ) ) {
$name = 'Statiegeld thermo box:';
$amount = $fees[ $product_category ];
$taxable = false;
$tax_class = 'BTW 0';
// Calculate the fee based on the quantity of each product
$product_quantity = $values['quantity'];
$fee_amount = $amount * $product_quantity;
// Add the fee with a tax rate of 0%
$cart->add_fee( $name, $fee_amount, $taxable, $tax_class, 'zero_tax', $cart_item_key );
}
}
}
}
}
}
In de bovenstaande code snippet hebben we een functie genaamd wpx_wc_add_cart_fees_by_product_category
die wordt uitgevoerd wanneer de actie woocommerce_cart_calculate_fees
wordt aangeroepen. Deze functie voegt een extra fee toe aan de winkelwagen voor producten die behoren tot de categorie ‘diepvries’.
Om te beginnen definiëren we een array genaamd $fees
, waarin we de categorieën en bijbehorende kosten specificeren. In dit geval hebben we de categorie ‘diepvries’ met een kostenbedrag van 10 euro.
Vervolgens doorlopen we alle producten in de winkelwagen met behulp van de foreach
-lus. Voor elk product halen we de categorieën op met behulp van de functie get_the_terms
en controleren we of er geen fouten optreden.
Als er categorieën zijn gevonden, plukken we de categorie-slugs uit de resultaten en doorlopen we elke categorie met behulp van een nieuwe foreach
-lus. We controleren of de categorie voorkomt in de $fees
-array en of er een kostenbedrag aan gekoppeld is.
Als aan deze voorwaarden is voldaan, definiëren we een aantal variabelen zoals de naam van de fee, het kostenbedrag, of de fee belastbaar is en de BTW-klasse. Vervolgens berekenen we het totale bedrag van de fee op basis van de hoeveelheid van elk product in de winkelwagen.
Uiteindelijk voegen we de fee toe aan de winkelwagen met behulp van de add_fee
-functie, waarbij we een BTW-tarief van 0% gebruiken.
Conclusie
Met behulp van de bovenstaande code snippet kun je gemakkelijk een extra fee toevoegen aan de check-out voor een specifieke productcategorie. Pas de code aan naar jouw specifieke categorieën en kostenbedragen om het naar jouw wensen te laten werken.