Buenas compañer@s,
Estoy un poco atascado con un problema en mi tienda Woocommerce, os comento que intención tengo y que pasos he hecho hasta ahora.
¿QUÉ QUIERO HACER?
Quiero que Woocommerce deje de mostrar en la página de carrito la opción de pagar por el envío (precio fijo) si la opción de envío gratuito está disponible. El envío gratuito en mi web está disponible a partir de los 150€.
¿QUÉ HE HECHO?
He usado un código en el archivo functions.php para solucionar esto. Desactiva todas las opciones de envío si la de envío gratuito está disponible, hasta ahora cumplía con mis necesidades. Os lo dejo por aquí:
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );
¿QUÉ PROBLEMA ME HA SURGIDO?
Resulta que tenemos unas camillas que si o si tenemos que cobrar el envío debido a sus dimensiones, si no, el margen de beneficio es nulo o casi negativo.
Probé a establecer una clase de envío Woocommerce específica para esas camillas, pero debido al código anteriormente mencionado, sólo me sale la opción de envío gratuito (ya que superan el valor de los 150€).
¿EN QUÉ PUNTO ESTOY AHORA?
Ahora he eliminado ese trocito de código que os comentaba antes y he conseguido que me aparezca el envío como quería, pero volviendo al estado del principio (me aparece la opción de envío gratuito cuando no debería de aparecer y viceversa).
¿DONDE NECESITO AYUDA?
Me gustaría que las opciones de envío tuvieran el comportamiento que se espera de ellas.
- Envío gratis cuando se superan los 150€. Sin que aparezca la opción de precio fijo.
- Respetar mis clases de envío y saltarse la regla del envío gratis por encima de 150€ si mi clase de envío lo requiere.
- Que el coste de envío se sume para cada producto. Ej: 1 camilla 50€ de envío, 2 camillas 100€ de envío.
Gracias de antemano.
Contenido solo visible a usuarios registrados
He vuelto a activar este código:
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );
Preferimos tener al menos esto funcionando por ahora. Ya que nos va a suponer más problemas el no tenerlo. Sigue sin aparecer el coste de envío especifico para las camillas.
He probado el siguiente plugin para establecer el envío en las camillas: https://es.wordpress.org/plugins/innozilla-per-product-shipping-woocommerce/
Funciona pero el código anterior lo deshabilita. Me faltaría sólo establecer una regla para que se respete la política de envío que establece el plugin.
Hola Jose Carlos.
Para excluir un producto de los gastos de envío gratuitos puedes utilizar el siguiente plugin:
-> https://wordpress.org/plugins/pw-woocommerce-exclude-free-shipping
El plugin no tiene configuración, una vez actualizado si editas el producto, verás que en las opciones de envío tienes checkbox para excluir los gastos de envío gratuitos:
Que el coste de envío se sume para cada producto
Podrias crear una clase de envio para ese producto y configura los envíos por peso:
-> Configurar los portes de envío por peso en WooCommerce
Un Saludo
Muchas gracias Pepe,
Con tu ayuda he podido configurar finalmente los envíos como quería. Dejo constancia de los pasos que he seguido por si alguien más afronta un problema como el mío.
Para ello:
1. He creado una clase de envío que suma 50€ por cada producto añadido. En la configuración de precio fijo aplico la fórmula: [qty] * 50.00 (Adjunto captura).
2. He instalado el plugin.
3. He editado los productos para que se excluya el envío gratuito de los mismos.
Finalmente he podido desinstalar el otro plugin que estaba probando, ya que no me es necesario. El código que he estado usando en el archivo functions.php se mantiene.
Ahora los envíos tienen el comportamiento que queríamos y es más sencillo configurar otro tipo de reglas.
De nuevo, gracias.
Hola Jose Carlos.
Genial !!! Me alegra que lo solucionaras, Gracias por informar y aportar toda la solución 😀
Cualquier consulta que tengas no dudes en comunicarlo.
Un Saludo y de nuevo agradecerte que aportes soluciones al Foro.