He encontrado
Cupón con 2 porcentajes de descuento diferentes según la categoría del producto en Woocommerce
Que muestra cómo alterar el % de descuento para categorías establecidas. Quiero implementar un código de descuento de verano en mi tienda que ofrece un descuento de £ 20 en una selección de productos.
El código de cupón summer21 está configurado para aplicar un descuento de producto fijo solo en las siguientes ID de producto permitidas
En 3 de los 4 se debe aplicar un descuento de £ 20
Pero si el ID del producto = 119886, entonces solo se deben descontar £ 10
Intenté modificar el código a lo siguiente, pero desafortunadamente sin el resultado deseado. ¿Qué me estoy perdiendo?
add_filter( 'woocommerce_coupon_get_discount_amount', 'alter_shop_coupon_data', 20, 5 ); function alter_shop_coupon_data( $round, $discounting_amount, $cart_item, $single, $coupon ){ ## ---- Your settings ---- ## // Related coupons codes to be defined in this array (you can set many) $coupon_codes = array('Summer21'); // Product categories for only £10 discount (IDs, Slugs or Names) $product_category10 = array('119886'); // for £10 discount $second_discount = 10; // £10 ## ---- The code: Changing the discount to £10 for specific products ---- ## if ( $coupon->is_type('fixed_product') && in_array( $coupon->get_code(), $coupon_codes ) ) { if( has_term( $product_category10, 'product_cat', $cart_item['product_id'] ) ){ $discount = $discounting_amount - $second_discount; $round = round( min( $discount, $discounting_amount ), wc_get_rounding_precision() ); } } return $round; }Este código también solo cambia el precio del carrito, pero no muestra los precios de visualización correctos en las páginas del producto.
Su código contiene varios errores.
has_term() no es aplicable, estamos usando in_array() en su lugarPara que esta respuesta funcione, aplicamos algunos pasos
Primer paso, configuración de cupones:
Segundo paso, configuración dentro de la función de código:
Entonces obtienes:
function filter_woocommerce_coupon_get_discount_amount( $round, $discounting_amount, $cart_item, $single, $coupon ) { // Related coupons codes to be defined in this array $coupon_codes = array( 'summer21' ); // Product IDs, for second discount $product_ids = array( 119886 ); // Second discount $second_discount = 10; // Changing the discount for specific product Ids if ( $coupon->is_type('fixed_product') && in_array( $coupon->get_code(), $coupon_codes ) ) { // Search for product ID in array product IDs if ( in_array( $cart_item['product_id'], $product_ids ) ) { // Get cart item quantity $cart_item_qty = is_null( $cart_item ) ? 1 : $cart_item['quantity']; // Discount $discount = $coupon->get_amount() - $second_discount; $discount = $single ? $discount : $discount * $cart_item_qty; $round = round( min( $discount, $discounting_amount ), wc_get_rounding_precision() ); } } return $round; } add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );