Habilitar envío gratis en WooCommerce por productos específicos

14 mar 2013, 15:15:18
Vistas: 24.1K
Votos: 9

Me gustaría saber si es posible habilitar el envío gratuito con WooCommerce solo si ciertos productos (o productos de ciertas categorías/clases de envío) están incluidos en el carrito.

La opción de Envío Gratuito solo se activa según el valor del carrito o mediante un código de cupón, así que investigué el envío de Tarifa Plana y descubrí que prioriza la clase de envío más cara sobre las más baratas. Esto significa que la clase de envío gratuito que creé nunca anula el cargo predeterminado.

Entiendo la lógica detrás de esto, pero es lo opuesto a lo que necesito, ya que la idea es incentivar las compras de productos con mayor margen de ganancia eliminando los cargos de envío cuando se incluyen en un pedido.

No sé si lo que estoy tratando de lograr simplemente no es posible dentro de WooCommerce. Un cupón que solo se aplica a ciertos productos/categorías parece ser lo más cercano que puedo conseguir, pero preferiría no obligar a los usuarios a ingresar un código en el checkout.

¿Alguien sabe si hay formas más simples de ofrecer envío gratuito a los usuarios que compran ciertos productos?

3
Comentarios

¿Cómo demonios esta pregunta relacionada con un plugin de WordPress, votada positivamente 8 veces y marcada como favorita 3 veces por desarrolladores de WordPress, fue cerrada como "fuera de tema"? O.o

Ben Ben
23 abr 2015 07:18:42

@Ben porque es un plugin de WooCommerce, y no una pregunta específica de WordPress (como se indica en el centro de ayuda)

Alexander Holsgrove Alexander Holsgrove
31 oct 2019 12:54:11

Esta pregunta es donde terminé al intentar buscar este problema. Por lo tanto, me gustaría compartir un enlace más reciente para los visitantes. Esto es de la propia documentación de WooCommerce y no tiene 7 años. Responde la pregunta con un fragmento de código que se coloca en el functions.php https://woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/

Peter Højlund Andersen Peter Højlund Andersen
16 dic 2021 14:06:56
Todas las respuestas a la pregunta 6
4

¿Alguien sabe si hay formas más sencillas de ofrecer envío gratis a los usuarios que compran ciertos productos?

En realidad, al crear un producto puedes marcarlo como Producto virtual directamente en el editor de productos y eso excluirá por completo el envío para ese artículo.

9 may 2013 19:06:00
Comentarios

Esto funciona para productos simples, pero no para otros tipos de productos, como los variables, por ejemplo. Buen intento de todos modos. Esto probablemente funcionará para algunas personas.

Alexander Lee Williams Alexander Lee Williams
6 sept 2013 23:45:47

¿Por qué no funciona esto para productos variables? Puedes marcar cada variación como virtual.

BFTrick BFTrick
17 sept 2013 22:37:42

Estoy de acuerdo @BFTrick

Nathan Nathan
18 sept 2013 21:09:28

Esto también es malo porque el sistema no accederá a la dirección de ENVÍO del cliente, lo cual es bastante importante ;)

Kane Kane
14 abr 2015 01:37:08
0

Aquí hay un fragmento recopilado de algunos Gists de una discusión de problemas en GitHub vinculada por @Ewout en otra respuesta. He añadido un var_dump(), para que puedas descomentar y comprobar qué es exactamente lo que deseas eliminar.

$available_methods es un array de:

$available_methods as $method_id => $method

Compara contra $method_id si necesitas verificaciones más específicas.

// Ocultar la opción de envío estándar cuando el envío gratuito está disponible
add_filter( 'woocommerce_available_shipping_methods', 'wpse90835_hide_standard_shipping_when_free_is_available' );
/**
 *  Oculta la opción de Envío Estándar cuando el envío gratuito está disponible
 * 
 * @param array $available_methods
 */
function wpse90835_hide_standard_shipping_when_free_is_available( $available_methods )
{
    // ¡Para desarrolladores!: Haz un volcado de esto para ver qué puedes eliminar
    # var_dump( $available_methods );

    // eliminar la opción de envío estándar
    if ( 
        isset( $available_methods['free_shipping'] ) 
        AND isset( $available_methods['flat_rate'] )
    )
        unset( $available_methods['flat_rate'] );


    return $available_methods;
}
6 sept 2013 23:58:27
0

He creado un plugin de WooCommerce que permite a los usuarios configurar ajustes avanzados para el envío gratuito. En el plugin es posible seleccionar ciertos productos para el envío gratuito.

Puedes encontrar el plugin gratis en wordpress.org llamado WooCommerce Advanced Free Shipping

Espero que esto ayude.

4 may 2014 18:47:35
2

Quizás esto no responda completamente a tu pregunta, pero el plugin de envío por tabla de tarifas te da la opción de establecer una prioridad para una tarifa en particular. Además, esta discusión ofrece muchas pistas sobre dónde podrías buscar soluciones

15 mar 2013 10:36:05
Comentarios

Gracias. Según la documentación de Table Rate Shipping, parece que hará lo que necesito. Si mi empleador acepta la licencia, actualizaré si resulta útil.

James O'Neill James O'Neill
15 mar 2013 13:00:04

Por favor, no publiques enlaces a recursos externos. Mejor menciona la información aquí y usa el enlace como referencia. Si el enlace deja de funcionar, la respuesta se vuelve inútil y estamos luchando mucho para evitar la pérdida de enlaces. -1

kaiser kaiser
6 sept 2013 23:48:56
0

Basado en el código de kaiser (arriba), he creado el siguiente código:

    /**
 *  Oculta la opción de envío gratuito cuando el envío estándar está disponible
 * 
 * @param array $available_methods
 */
function mwe_hide_free_shipping_when_standard_shipping_is_available($available_methods) {

    // elimina la opción de envío estándar
    if (isset($available_methods['free_shipping']) AND isset( $available_methods['flat_rate'])) {
        unset($available_methods['free_shipping']);
    }

    return $available_methods;
}
add_filter('woocommerce_available_shipping_methods', 'mwe_hide_free_shipping_when_standard_shipping_is_available');

En términos de configuración de WooCommerce, tengo habilitados tanto el Envío Gratuito como la Tarifa Plana en las Opciones de Envío de Woo. Luego simplemente configuro una Clase de Envío, especifico su costo (por ejemplo, £7.95) en la página de opciones de Tarifa Plana, y luego agrego esa clase de envío a los productos a los que quiero cobrar £7.95 por gastos de envío.

11 ene 2014 15:16:09
0

La opción "virtual" eliminará todos los costos de envío, pero también elimina la opción de enviar a una dirección diferente a la de facturación del cliente. Esto no es un problema si el cliente compra otros productos no virtuales también, pero sí lo es si es lo único que compra.

7 may 2014 21:44:00