Importe mínimo de compra en Woocommerce

LucusHost, el mejor hosting

Las tiendas online que ofrecen productos con poco margen, productos pequeños o bien B2B en muchas ocasiones necesitan establecer un precio mínimo para que la venta les salga rentable. Es aquí donde entra la funcionalidad de establecer una compra mínima en WooCommerce para que el cliente pueda comprar.

Como siempre en la sección de snippets no usaremos ningún plugin para aplicar esto en nuestra tienda, tan solo un código.

Snippet para establecer un pedido mínimo

Añade este código a tu functions.php o a tu plugin de funcionalidades como explico aquí.

// Establecer un importe minimo en la compra
function woocommerce_importe_minimo() {
  $minimum = 20;  // Debes cambiar el 20 por el importe mínimo que quieras establecer en tu pedido
  if ( WC()->cart->total < $minimum ) {
    if( is_cart() ) {
      wc_print_notice(
      sprintf( ' Debes realizar un pedido mínimo de %s para finalizar su compra.' , // Pon aquí el texto que quieras que se muestre en el carrito de compra.
        wc_price( $minimum ),
        wc_price( WC()->cart->total )
      ), 'error'
      );
    } else {
      wc_add_notice(
      sprintf( 'No puedes finalizar tu compra. Debes realizar un pedido mínimo de %s para finalizar su compra.' , // Pon aquí el texto que quieras que se muestre en la página de finalizar compra.
        wc_price( $minimum ), 
        wc_price( WC()->cart->total )
      ), 'error'
      );
    }
  }
}
add_action( 'woocommerce_checkout_process', 'woocommerce_importe_minimo' );
add_action( 'woocommerce_before_cart' , 'woocommerce_importe_minimo' );

Con esto no solo sale un aviso en la página de carrito y de finalizar compra avisando que el pedido mínimo en este caso es 20€(lo puedes modificar).

establecer un importe minimo en woocommerce

Sino que también no te deja finalizar la compra hasta que no añadas dicho importe. Cumpliendo así su función principal.

importe minimo de compra en woocommerce sin plugin

Establecer un pedido mínimo en WooCommerce sin Impuestos

Aviso de que para que este snippet funcione debes tener bien configurada los impuestos en tu WooCommerce dependiendo de la ciudad. Este ejemplo es para un pedido mínimo de 60€ IVA no incluído:

// Establecer un importe minimo en la compra sin Impuestos
function woocommerce_importe_minimo() {
  $minimum = 60;  // Debes cambiar el 60 por el importe mínimo que quieras establecer en tu pedido
  if ( (WC()->cart->subtotal - WC()->cart->tax_total) < $minimum ) {
    if( is_cart() ) {
      wc_print_notice(
      sprintf( ' Debes realizar un pedido mínimo WooCommerce de %s sin IVA para finalizar su compra.' , // Pon aquí el texto que quieras que se muestre en el carrito de compra.
        wc_price( $minimum ),
        wc_price( (WC()->cart->subtotal - WC()->cart->tax_total) )
      ), 'error'
      );
    } else {
      wc_add_notice(
      sprintf( 'No puedes finalizar tu compra. Debes realizar un pedido mínimo WooCommerce de %s sin IVA para finalizar su compra.' , // Pon aquí el texto que quieras que se muestre en la página de finalizar compra.
        wc_price( $minimum ), 
        wc_price( (WC()->cart->subtotal - WC()->cart->tax_total) )
      ), 'error'
      );
    }
  }
}
add_action( 'woocommerce_checkout_process', 'woocommerce_importe_minimo' );
add_action( 'woocommerce_before_cart' , 'woocommerce_importe_minimo' );

Establecer un pedido mínimo o máximo de un producto

En este caso si hiciésemos un código para cada producto nos podríamos morir, así que vamos a crear un campo en la zona de Inventario dentro de cada producto para que nosotros o el cliente lo pueda modificar de forma sencilla.

add_action( 'woocommerce_product_options_inventory_product_data', 'dl_añadir_campo_minmax' );
function dl_añadir_campo_minmax() {

	echo '<div class="options_group">';
	woocommerce_wp_text_input( 
		array( 
			'id'          => '_wc_min_qty_product', 
			'label'       => __( 'Cantidad Mínima', 'woocommerce-max-quantity' ), 
			'placeholder' => '',
			'desc_tip'    => 'true',
			'description' => __( 'Opcional. Establece un límite de cantidad mínima permitida por pedido. Introduzca un número, 1 o más.', 'woocommerce-max-quantity' ) 
		)
	);
	echo '</div>';

	echo '<div class="options_group">';
	woocommerce_wp_text_input( 
		array( 
			'id'          => '_wc_max_qty_product', 
			'label'       => __( 'Cantidad Máxima', 'woocommerce-max-quantity' ), 
			'placeholder' => '',
			'desc_tip'    => 'true',
			'description' => __( 'Opcional. Establece un límite de cantidad máxima permitida por pedido. Introduzca un número, 1 o más.', 'woocommerce-max-quantity' ) 
		)
	);
	echo '</div>';	
}

add_action( 'woocommerce_process_product_meta', 'dl_guardar_minmax' );

function dl_guardar_minmax( $post_id ) {
	$val_min = trim( get_post_meta( $post_id, '_wc_min_qty_product', true ) );
	$new_min = sanitize_text_field( $_POST['_wc_min_qty_product'] );

	$val_max = trim( get_post_meta( $post_id, '_wc_max_qty_product', true ) );
	$new_max = sanitize_text_field( $_POST['_wc_max_qty_product'] );
	
	if ( $val_min != $new_min ) {
		update_post_meta( $post_id, '_wc_min_qty_product', $new_min );
	}

	if ( $val_max != $new_max ) {
		update_post_meta( $post_id, '_wc_max_qty_product', $new_max );
	}
}

Con esto nos queda un campo en cada producto desde el administrador de WooCommerce tal que así:

pedido minimo producto woocommerce
Campos de unidades máximas y mínimas en cada producto

Establecer pedido minimo en WooCommerce con Plugin

Me lo habéis pedido mucho en contacto que lo hiciese con un plugin para los que no sabéis de código, así que os dejo aquí algunos muy buenos:

Min/Max Quantities de WooCommerce: Es el oficial de WooCommerce y es bastante completo. Te permite establecer tanto en pedidos como en productos un importe mínimo y máximo de compra, permitiendo a su vez excluir productos y crear reglas condicionales.

Woocommerce Minimum and Maximum Quantity: Este es mas simple que el anterior y lo puedes encontrar gratis en el repositorio oficial.

Consejos de aplicación

Una vez que establezcas esta función sería conveniente informar a los visitantes de tu sitio web que solo podrán hacer el pedido si compran mas de X€. Para que una vez que lleguen al carrito no se encuentren con la sorpresa y cause rechazo.

Sería bueno anunciar en la página de inicio o en la zona de ventajas competitivas que explicaba aquí. Cualquier duda o aplicación de este código dejármela en comentarios o en contactar. Recuerda que tienes mis servicios de desarrollo de tiendas online.

¡Haz clic para puntuar esta entrada!
(Votos: 8 Promedio: 5)
mailerlite diegol

Especialista en Comercio electrónico con Woocommerce. Te ayudo a crear, gestionar y publicitar tu Ecommerce en función de tu sector y público objetivo. Puedes encontrarme en Diegol.top

¿Necesitas ayuda con este tutorial? Mándame un correo y te resuelvo todas las dudas!


Ver servicios Curso de WooCommerce

También puedes realizar una donacion para seguir apoyando la salida de nuevos tutoriales y actualizaciones

mailerlite diegol

Reader Interactions

comentarios

  1. Anders says

    Hola, gracias por el código, funciona en el carrito pero no en el checkout, pues no muestra el mensaje y el botón de pagar queda activo. Uso Woocommerce Versión 3.7.1

      • studiosoul.online says

        Me ocurre lo mismo! y tengo una plantilla premium y no está personalizada pero sin que haya agregado código. Probé las dos opciones de código, con iva y sin iva y me deja comprar por más que aparezca el cartel

  2. Gerardo says

    Hola Anders,

    El botón siempre te va a salir… pero cuando pulsas te sale el mensaje que hayas especificado en el código facilitado por Diego… es decir si que funciona sin problemas pero vengo a ver como se podría hacer sin que fuese muchas molestias.

    El código facilitado es para una cantidad especifica, pero habría posibilidad y por el tema del IVA , es decir si cuando llegue a la cantidad (No Incluido el 21% de IVA) debido a que los precios son sin IVA y no es lo mismo precio con iva que sin el iva.

    Gracias anticipadas.

    • Diegol says

      Hola Gerardo,

      Gracias por tu comentario. Sería modificar la variable WC()->cart->subtotalde por esta: (WC()->cart->subtotal – WC()->cart->tax_total). por supuesto tener bien configurados los impuestos para que se aplique bien, ya que va con los impuestos del propio WooCommerce.

      Igualmente te he dejado el código en el artículo sin IVA.

      Cualquier duda aquí estoy,

      Un saludo!

  3. Sergio says

    Excelente código, funciona genial, muchas gracias Diego.

    Duda, en mi tienda en línea tengo varios roles, pero solo quiero que uno tenga un mínimo de compra, los demás podrán comprar cualquier cantidad.

    ¿Qué se debería ajustar en el código para poder implementarlo?
    (no soy programador, así que tus explicaciones me ayudan mucho para hacer los ajustes necesarios en mi sitio.)

    ¡Gracias!

  4. Hugo Barrios says

    Muchas gracias me pareció genial, sabes si hay alguna forma de agregar un producto por ejemplo el mínimo es $20 y el cliente solo quiere algo de $15 pero esta dispuesta a pagar los $5 de más para que el envió se realize y el producto se llame algo así como gastos administrativos o si se puede poner alguna opción en el carrito para que el precio suba a $20 y se pueda procesar el pedido

    • Diegol says

      Hola Hugo,

      De momento no conozco nada. Podrías poner que los $5 sobrentes se queden en el saldo de su cuenta para gastarlos en futuras compras.

      Un saludo!

  5. Luis says

    Me he encontrado con algo que no se si se puede solventar
    Si pongo importe mínimo para la compra por ejemplo 10€, si escojo un producto de 8 euros, como después le suma los gastos de envío, por ejemplo 3€ sobrepasan los 10 y yo lo que querría es que la compra mínima fuera sin contar los gastos de envío
    Se podría hacer?

    • Diegol says

      Hola Luis,

      Se podría modificar el código para que fuese sin envío. Aunque en tu caso subiría el importe mínimo para que no tenga confusiones el cliente al darle falsas esperanzas y tenga que elegir más productos una vez llegue al checkout.

      Un saludo!

      • Luis says

        Es que lo que a mi me interesa realmente es que sea la suma total del pedido sin gastos de envío lo que cuente para el importe mínimo
        Imagínate una tienda que vende cosas de poco valor. Si yo quiero que el pedido mínimo sean por ejemplo esos 10€ que hemos hablado, podría darse el caso de que alguien comprara algo de 5€ y al sumarle el envío por mensajería 24h que ponle sean 6€ ya le estaría permitiendo comprar, pero no estoy consiguiendo mi objetivo de que me compre un mínimo de 10€
        Sabes como podría arreglarse?

        • Diegol says

          Hola de nuevo Luis,

          Para eso haría falta modificar el código o con el plugin que recomiendo en el post podría salir. Me lo apunto a ver si lo puedo hacer este mes!

          Un saludo!

  6. Antonio says

    Grande Diegol! Acabo de descubrir tu página y me parece genial. Estás haciendo un trabajo fantástico y te lo agradezco mucho.

    Yo estoy intentando que el mensaje se muestre en el checkout sin tener que pulsar el botón y no lo consigo. Es sencillo de modificar o se complica mucho la cosa?

    Muchas gracias y sigue así!

  7. Adrian says

    Gracias Diego funciono sin plugin pero igual que los colegas tambien seria genial si pudiera ayudarnos para que no contabilice el envió, suscrito a tu canal

  8. David says

    Hola Diego, estupenda web, enhorabuena llevo tiempo buscando una solución y contigo lo he conseguido, pero no consigo hacer lo que necesito.

    He probado el código y el Plugin y me pasa lo siguiente, tengo en la tienda dos tipos de productos, artículos individuales y sets de articulos

    Si pongo en el plugin que el pedido mínimo sean 10 artículos me funciona perfecto para los artículos individuales pero si entra en el carrito un set por ejemplo de 5 artículos lo cuenta como uno, por lo que si entra un set de 5 y 5 articulos individuales, no salta el pedido mínimo porque no encuentro la forma de decirle que un articulo tiene x articulos dentro.

    Si utilizo la opción de excluir de las reglas a los sets de articulos, si alguien quiere comprar un set de 10 articulos, lo puede comprar sin problema, pero si añade un articulo mas a l carrito, lo marca como que hay menos de 10.

    Se te ocurre algo?

  9. toni says

    Muchas gracias por el artículo y código pero tengo una duda. Si pongo importe mínimo 20€ pero creo un cupón promocional del 10%, entonces, si alguien compra algo por 20 con el cupón quedaría en 18€ pero no me deja comprar ya que tengo puesto un importe mínimo superior. ¿es posible que no contemple los descuentos de los cupones?

  10. Santi says

    Hola

    El código funciona de lujo. Muchas gracias.
    Tan solo una pregunta. Tengo habilitada que la compra no puede ser inferior a 70 € sin IVA.
    También damos a veces cupones a los clientes.
    El problema está que si hacen una compra superior a 70€ y después aplican el cupón, el importe baja y ya no deja hacer la compra.
    ¿Cómo podemos hacer para que tenga en cuenta el importe sin el cupón?

    Muchas gracias

  11. Sebastián Echeverri J says

    Diego, muchas gracias por tu post.

    Una pregunta que tengo por solicitud de un cliente.
    ¿Es posible exigir un mínimo de dinero dependiendo de una zona o código postal?

    Mil gracias

    Un saludo,

    Sebastián

  12. Jose Miguel says

    Hola, Diego gracias por la ayuda! Te hago una consulta, como se hace en el caso de que en mi web maneja dos monedas distintas? Porque me funciono bien pero el minimo de compra que coloco me aparece para ambas monedas, es decir: 20.000 pesos y 20.000 dolares y me gustaria que fuese: 20.000 pesos y 150 dolares, me explico?

Deja una respuesta

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