Envío gratuito personalizado solo para el Reino Unido y un producto específico en Woocommerce 3

5 minutos de lectura

Envio gratuito personalizado solo para el Reino Unido y un
Özge Dogan

He intentado crear una opción de envío gratis para el producto promocional de un cliente que se enviará a todo el mundo, pero solo tendrá la opción de envío gratis para pedidos desde el Reino Unido. Así que cuando alguien haga un pedido desde EE. UU. o Hong Kong, se aplicará la tarifa habitual. Pero de alguna manera, no puedo excluir estos países de la clase de envío. (No estoy usando el método de envío gratuito porque cuando lo intento, se aplica a todos los productos, es por eso que creé una clase de envío para esto)

¿Puede alguien ayudarme con esto?

Muchas gracias

  • ¿Podrías compartir algún código? Si es posible, siga el ejemplo mínimo reproducible

    – Es esto Javascript

    4 de junio de 2018 a las 11:46

Envio gratuito personalizado solo para el Reino Unido y un
LoicTheAztec

No necesita usar métodos de envío en su producto específico para ese caso en particular. En cambio, esta función personalizada a continuación hará el truco, definiendo su identificación de producto específica en ella.

Cuando un cliente del Reino Unido agrega solo su producto específico al carrito, el código cambiará el nombre de su método de envío de tarifa plana a “Envío gratuito” y establecerá el costo en CERO.

Para probar ese código, primero debe habilitar el modo de depuración en la configuración de envío de Woocommerce en la pestaña “Opciones de envío”.

También tendrá que volver a configurar la configuración del método de envío de “tarifa plana” o eliminar la clase de envío de su producto específico.

El código:

add_filter( 'woocommerce_package_rates', 'disable_shipping_methods', 20, 2 );
function disable_shipping_methods( $rates, $package ) {
    // ==> HERE set your targeted product IDs in a coma separated array
    $products_ids = array(37);

    if( ! ( isset($package['destination']['country']) && isset($package['contents']) ) )
        return $rates; // If 'destination' country is not defined, we exit

    // Only for United kingdom customers
    if( $package['destination']['country'] != 'GB' )
        return $rates; // Non UK customers we exit.

    // Loop through cart items and checking if there is any other products than the targeted ones
    $found = false;
    foreach( $package['contents'] as $item ) {
        if( in_array( $item['data']->get_id(), $products_ids ) ){
            $found = true;
        } else {
            return $rates; // Other items found in cart, we exit.
        }
    }

    // When the customer is in UK and the target product is alone in cart we set the flat rate price to zero.
    foreach ( $rates as $rate_key => $rate ){
        // Targetting flat rate method
        if( $rate->method_id == 'flat_rate' && $found ){
            // We change the shipping label name
            $rates[$rate_key]->label = __("Free shipping", "woocommerce");

            // Set the rate cost to zero
            $rates[$rate_key]->cost = 0;

            // Taxes rate cost (if enabled)
            $taxes = array();
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $rates[$rate_key]->taxes[$key] > 0 ){
                    $taxes[$key] = 0;
                    $has_taxes = true;
                }
            }
            if( isset($has_taxes) && $has_taxes )
                $rates[$rate_key]->taxes = $taxes;
        }
    }
    return $rates;
}

El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y funciona.

Cliente del Reino Unido con este artículo único en el carrito – Envío gratis

ingrese la descripción de la imagen aquí

Formulario de cliente del Reino Unido con este artículo y otros en el carrito – Envío normal

ingrese la descripción de la imagen aquí

Cliente de otros países con este artículo único en el carrito – Envío normal

ingrese la descripción de la imagen aquí

Una vez que lo haga funcionar, no olvide desactivar el modo de depuración en la configuración de envío de Woocommerce en la pestaña “Opciones de envío”.

  • ¡Gracias! También lo intentaré, pero por ahora solo cambié la línea de código en functions.php y funcionó. if (in_array( $elemento[‘data’]->get_shipping_class(), $elegible) ) { if ( in_array( $customerfff, $eligible ) ) { // este artículo no tiene la clase correcta. devolver la disponibilidad predeterminada print(““); volver $is_disponible; (esta línea era: // nada fuera de lo común return true return true; )

    – Özge Dogan

    4 de junio de 2018 a las 15:26

1647555374 357 Envio gratuito personalizado solo para el Reino Unido y un
kozanostra1907

Clase de envío

Perdón por la captura de pantalla en alemán, pero ¿no es posible configurar zonas de envío y clases de envío? Puede configurar 2 zonas de envío: Reino Unido y el resto del mundo y agregar las clases de envío que desee para sus productos. Si intenta esto y aún no funciona, ¿podría adjuntar algunos ejemplos de código?

  • Hola, no, eso también crea una opción de envío gratis para otros productos. solo un producto debe tener la opción de envío gratuito y esta opción debe estar disponible solo para el Reino Unido. Es por eso que creé una clase de envío y escribí un código en functions.php, siempre que esa clase de envío esté habilitada para un producto, solo este producto tendrá esa opción. ahora también necesito excluir países. :((

    – Özge Dogan

    04/06/2018 a las 13:35

  • Si no tiene muchos productos en su base de datos, debe definir un método de envío para cada producto. Tal vez esto resolvería tu problema. ¿O simplemente intenta trabajar con este código de muestra? boopathirajan.com/…

    – kozanostra1907

    4 de junio de 2018 a las 13:44

  • Tengo como +30 productos, además el código que compartiste es para excluir países de la lista de envío, no del método de envío. 🙁 pero nuevamente gracias, intentaré modificar este código: stackoverflow.com/questions/19379757/… , si hay suerte, lo compartiré 🙂

    – Özge Dogan

    4 de junio de 2018 a las 14:15

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad