¿Cómo añadir un descuento a los gastos de envío en función del total?

  • WooCommerce - Blog

¿Cómo añadir un descuento a los gastos de envío en función del total?

Hace unas semanas un cliente nos solicitó que le añadiéramos un porcentaje de descuento en todos los gastos de envío de su tienda virtual bajo WooCommerce en función del importe total del pedido. Concretamente nos pidió que le aplicáramos un 6% de descuento al importe de los gastos de envío a partir de 180,00 € de gasto total en el pedido del cliente.

Manos a la obra

Para conseguirlo lo que hicimos fue añadir una función PHP en el archivo functions.php de su tema hijo, aunque también la podéis añadir al tema padre si no disponéis de tema hijo, cosa, por otro lado, muy poco recomendable.

Esta es la función PHP que creamos:

function apg_descuento_pedido( $rates ) {
	global $woocommerce;
    
	if ( isset( WC()->cart) && WC()->cart->cart_contents_total >= 180 ) {
		foreach ( $rates as $rate ) {
			$rate->cost = $rate->cost / 1.06;
		}
	}
	
	return $rates;
}
add_filter( 'woocommerce_package_rates', 'apg_descuento_pedido', 10 );

En la función PHP lo primero que hacemos es comprobar si existe un pedido y leer el importe total del mismo para poder comprobar si es igual o superior a los 180,00 €. En caso de que así sea recorre todos los gastos de envío que se tengan configurados y activos en WooCommerce para aplicarles un descuento del 6%.

Como siempre esperamos que os resulte útil esta función y que le podáis sacar provecho en vuestras tiendas virtuales.

2017-03-27T18:08:39+02:00 viernes, 29 de enero de 2016|Categorías: Art Project Group|Etiquetas: , , , , |6 comentarios

6 Comentarios

  1. César viernes, 12 de febrero de 2016 en 14:30- Responder

    Buenas, despues de añadir la función deja de verse la web, no da error de página, se queda en blanco. Sabes que puede ser?

    Un saludo y gracias

    • Art Project Group viernes, 12 de febrero de 2016 en 15:07- Responder

      En principio el código es correcto, y está funcionando sin problema alguno en el sitio web del cliente.

      Comprueba que lo has copiado íntegramente, sin obviar ningún carácter, y que la personalización que hayas realizado sea correcta.

      Un saludo.

  2. César viernes, 12 de febrero de 2016 en 17:28- Responder

    Buenas tardes,

    es correcto gracias. Una pregunta, si solo quiero aplicarlo a un método de envío? Por que variable debo preguntar?

    Un saludo y gracias anticicipadas.

  3. César martes, 16 de febrero de 2016 en 16:00- Responder

    Asi?

    if ( $rates == ‘España Peninsula’ ){
    $rate->cost = 3;
    }

    Un saludo y gracias de antemano.

    • Art Project Group martes, 16 de febrero de 2016 en 21:25- Responder

      Eso tiene toda la pinta de no funcionar 🙂

      Revisa la estructura del objeto $rates.

      Un saludo.

Deje un comentario

Comparte esto con un amigo