Importe mínimo de compra en Woocommerce

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 mínimo 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: 2 Promedio: 5)

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 Contactar

También puedes suscribirte a mi newsletter para no perderte ninguna novedad

Interacciones del lector

Comentarios

  1. Anders dice

    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

  2. Gerardo dice

    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 dice

      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 dice

    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!

Deja un comentario

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