En un proyecto en el cual estuve trabajando recientemente el cliente planteaba la necesidad de poder aplicar dos tipos de descuentos con un mismo cupón en WooCommerce.
Se tenía que hacer un descuento del 30% a determinados productos y otro del 50% a otros productos. Pero como la campaña se haría con un cupón de descuento, se planteaba el problema de cómo hacerlo. No era lo ideal darle al cliente final de la web dos cupones, por lo tanto aplicamos la siguiente metodología.
En primer lugar hemos creado dos categoría nuevas, una para los productos que irían al 30% (cat30) y otra para los que irían al 50% (cat50).
Luego hemos puesto en cada una de estas categorías los productos correspondientes.
Finalmente creamos dos cupones de descuento diferentes. Uno al 30% (firstcoupon) y otro al 50% (secondcoupon). Estos cupones hacen el descuento sobre el precio del producto, ya que no se quería aplicar el descuento también al envío. En las limitaciones del cupón hemos asignado el uso a la categoría correspondiente.
Hasta aquí ya tenemos toda la estructura planteada, pero seguimos sin poder aplicar los dos descuentos con un mismo cupón. Para ello se ha utilizado el siguiente snippet.
/**
* Chain two Coupons
*/
add_action( 'woocommerce_applied_coupon', 'tgt_chain_a_coupon' );
function tgt_chain_a_coupon( $coupon_code ) {
$first_coupon = 'firstcoupon';
$chained_coupon = 'secondcoupon';
if ( $first_coupon == $coupon_code ) {
WC()->cart->add_discount( $chained_coupon );
}
}
Con esto ya lo tenemos funcionando, ahora lo que queremos es ocultar estas dos nuevas categoría del meta de los productos, para lo cual hemos aplicado lo siguiente:
/**
* Hide categories cat30 & cat50 from product Meta
*/
add_filter( 'get_terms', 'tgt_hide_categories', 10, 1 );
function tgt_hide_categories( $terms ) {
$new_terms = array();
foreach ( $terms as $term ) {
if ( $term->slug !== 'cat30' && $term->slug !== 'cat50' ) {
$new_terms[] = $term;
} else if ( $term->taxonomy !== 'product_cat' || is_admin() ) {
$new_terms[] = $term;
}
}
return $new_terms;
}
Deja una respuesta