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.
Índice
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).

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

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í:

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.
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
Hola Anders,
Tienes alguna personalización en el checkout que bloquee el contenido, o bien una plantilla muy personalizada?
Un saludo!
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
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.
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!
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!
Hola como estaS? De esto supiste algo?
Quiero hacer lo mismo. Alguien sabe cómo hacerlo?
Me salvaste el día! Saludos desde El Salvador
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
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!
Funciona perfecto.
Muchas gracias tío!!!
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?
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!
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?
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!
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í!
Hola Antonio,
La verdad es que se complica, igualmente para poner avisos en el checkout o el carrito tengo otros tutoriales como:
– Aviso al final del formulario de pago advirtiendo el pedido mínimo: https://diegol.top/woocommerce/anadir-un-mensaje-personalizado-al-final-del-formulario-de-envio/
– Mostrar aviso en el checkout arriba: https://diegol.top/woocommerce/snippets/anadir-un-mensaje-de-cuanto-queda-para-el-envio-gratis/
– Cómo debe de ser la página: https://diegol.top/ecommerce/finalizar-compra/
Debes cambiar los mensajes por el tuyo de pedido mínimo.
Gracias por tu comentario, seguiré a tope, espero que te ayude.
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
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?
Muchas gracias Diegol por el contenido, me resulto muy bien hermano y soluciono muchos inconvenientes. Saludos
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?
Muchas gracias por tu aporte!! era exactamente lo que estaba buscando.
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
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
Hola Sebastián,
Es posible, ya tendrías que buscar un plugin adecuado para ello, como el de YITH por ejemplo.
Un saludo!
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?
Gracias me sirvió
Genial, Diego funciono el que necesitaba un monto mínimo de compra, agradecido por tu trabajo, Saludos