Soluciones, Wordpress

Cómo configurar en Wocommerce gastos de envío con precio único y peso según provincia o zona

Calculando gastos de envío en WooCommerce

¿Tienes un WordPress con WooCommerce y no existe solución para configurar gastos de envío por zonas? Aquí te traigo la solución.

Cuando se trata de vender, no soy muy partidario de este plugin para wordpress, WooCommerce. Por experiencia propia, si queremos vender productos, lo ideal es montar un Prestashop. En cualquier caso, si hay pocos productos o si la web estaba montada en WordPress antes de que aparezca la necesidad de vender, Woccomerce puede ser una buena solución. Claro está que se trata de un plugin y que ni de lejos, tiene los mismos recursos que Prestashop.

Recientemente y para un proyecto de un tercero, me las he tenido que ver con este plugin. Es del todo funcional, además de que su administración es sencilla. Añadir productos, métodos de pago, descuentos, etc. El problema es que WooCommerce solo permite configurar gastos de envíos como precio único y a partir de según qué importe, gratuitos.

Otro profesional que estaba desarrollando un portal para venta de jamones, se puso en contacto conmigo para intentar dar solución a un problema que le surgía. Había que usar WooCommerce o cualquier otro, pero basado en WordPress y configurar un pago único para la península Ibérica, 20 euros. A partir de 200 euros que los gastos de envío fueran gratuitos, pero un rango de precios por peso para Baleares, Ceuta, Melilla y Canarias.

La primera parte, conseguí solventarla con un plugin llamado APG Weight and Postcode/State/Country Shipping.

Junto con WooCommerce, este añadido, desde el panel de administración de nuestro WordPress podremos añadir rangos de peso y zonas, para ello debemos ir a “WooCommerce > Ajustes > Envío > Gastos de envío APG“.

Una vez dentro observaremos dos secciones importantes que son la clave. En primer lugar, Tarifas de envío. En este campo, deberemos indicar los rangos de pesos y su precio.

Tarifas de envio en AGP

Tal como se indica en la imagen, deberemos separar cada valor con el caracter «|». Siguiendo la primera fila, «10|20|S1» quiere decir que para envíos de 10 kilos máximo costará 20 euros en la zona S1.

Un poco más abajo nos encontramos con el otro campo clave, Grupos de provincia o zonas, donde podremos añadir todos los grupos que queramos.

Grupos de envío según peso para APG Weight and Postcode/State/Country Shipping

De esta forma, una vez ya configurados los rangos de precios para el paso y las zonas que nos interesaban, para Baleares, Ceuta, Mellilla y Canarias se mostrará el, precio por peso.

El inconveniente ahora reside en que, a pesar de que los gastos de envío por peso solo aparecerán en las zonas seleccionadas, si hemos configurado pago único, o pago gratuito en Wocommerce, también aparecerán en estas provincias. Para solventarlo, he escrito una función que ocultará el resto de pagos, cuando el envío se haga a las zonas seleccionadas.

Os comparto el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
add_filter( 'woocommerce_package_rates', 'ocultar_envio_por_zonas', 10, 2 );

/* Oculta la opción de gasto de envío gratuito o pago único para las regiones de Canarias y Baleares, Ceuta y melilla */
function ocultar_envio_por_zonas( $rates, $package ) {

global $woocommerce;

$customer_state = $woocommerce->customer->get_shipping_state();

// Sólo se modifica si está habilitado el gasto de envío gratuito o el precio único
if ( isset( $rates['free_shipping'] ) || isset( $rates['flat_rate'] ) ) {

if( $woocommerce->customer->get_shipping_country() === "ES" ){

// Comprueba si el destino es Canariasl, Baleares, Ceuta y Melilla
if(( $customer_state === "GC" ) || ( $customer_state === "TF" ) || ( $customer_state === "PM") || ( $customer_state === "CE") || ( $customer_state === "ML" )){

// Deshabilita la opción de envío grauito si procede o bien el precio único
unset( $rates['free_shipping'] ); unset( $rates['flat_rate'] );
}else{

if ( isset( $rates['free_shipping'] ) ){
// Sólo muestra la opción de envío gratuito
$free_shipping = $rates['free_shipping'];
$rates = array();
$rates['free_shipping'] = $free_shipping;
}else{
// Sólo muestra la opción de pago único
$free_shipping = $rates['flat_rate'];
$rates = array();
$rates['flat_rate'] = $free_shipping;

}}}}

return $rates;}

 

Solo tendréis que pegar este trozo de código en el archivo functions.php (localizado en la carpeta de tu tema instalado) y funcionará perfectamente.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *