Se abre en una pestaña nueva
8 Limita cantidad de unidades de producto comprar en WooCommerce

Limita cantidad de unidades de producto que un cliente puede comprar en un mismo pedido

Snippet que limita la cantidad de unidades de producto que un usuario puede comprar en un mismo producto en WooCommerce.

Después de añadir el código podrás definir la cantidad de producto permitidas desde la página de edición del producto, en “Datos del producto > Inventario > Máximo de unidades permitidas”.

Snippet que limita cantidad de unidades de producto que un cliente puede comprar en un mismo pedido de WooCommerce

// Limita el número máximo de unidades a nivel de producto que un cliente puede comprar en un mismo pedido
if ( in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins' ) ) ){
	
	add_action( 'woocommerce_product_options_inventory_product_data', 'enable_option_inventory_product_data_tab' );
	function enable_option_inventory_product_data_tab(){
	
		wp_nonce_field( plugin_basename(__FILE__), 'woocommerce_max_amount_nonce' );
		echo '<div class="options_group show_if_simple show_if_variable">';
	
		woocommerce_wp_text_input( array(
			'id'                => '_max_amount',
			'label'             => __( 'Máximo de unidades permitidas', 'woocommerce' ),
			'placeholder'	    => 0,
			'desc_tip'          => true,
			'description'       => __( 'Indica el número máximo de unidades permitidas que se pueden comprar de este producto en un mismo pedido. Usa el valor 0 para indicar que no hay límite de unidades.', 'woocommerce' ),
			'type'              => 'number',
			'custom_attributes' => array(
				'step' => 'any'
			)
		) );
	
		echo '</div>';
	}
	
	add_action( 'save_post', 'save_max_amount_meta_data', 99, 2 );
	function save_max_amount_meta_data( $post_id, $post ) {
	
		/* --- security verification --- */
		if ( 'product' !== $post->post_type ) {
		    		
		    	return $post_id;
		}

		if( !wp_verify_nonce( $_POST['woocommerce_max_amount_nonce'], plugin_basename(__FILE__) ) ) {
			return $post_id;
	    	}
	
	    	if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
	    		return $post_id;
	    	}
	
	    	if( 'product' == $_POST['post_type'] ) {
	    		
	    		if( !current_user_can('edit_page', $post_id) ) {
	    			return $post_id;
	      		}
		} else {
		
			if( !current_user_can( 'edit_page', $post_id ) ) {
				return $post_id;
	        	}
	    	}
	    	/* - end security verification - */
	
	    	if( isset( $_POST[ '_max_amount' ] ) ) {
		
	    		$max_amount = $_POST[ '_max_amount' ];
	    		update_post_meta( $post_id, '_max_amount', $max_amount );
	    	}
	}
	
	add_action( 'woocommerce_check_cart_items', 'max_products_units_allowed' );
	function max_products_units_allowed(){
		$cart_content = WC()->cart->get_cart();
		
		foreach ( $cart_content as $key => $product ) {
	
			$max_amount = get_post_meta( $product[ 'data' ]->id, '_max_amount', true );
	
			if ( !empty( $max_amount ) && ( $max_amount < $product[ 'quantity' ] ) ) {
				
				// Resetea el número de unidades del producto al máximo permitido
				WC()->cart->set_quantity( $key, $max_amount );
	
				// Muestra el mensaje de aviso de que ha superado el número máximo de uds permitida
				$message = 'Lo sentimos. Pero el número máximo de unidades del producto "'. $product[ 'data' ]->post->post_title .'" que puedes comprar en un mismo pedido es '. $max_amount .'.<br/><br/>';
	            		wc_add_notice( $message, 'error' );
			}
	
		}
	}
}

Suscríbete gratis y aprende a sacar más partido a tu presencia digital

Comparto estrategias, ideas, recursos y herramientas de marketing que puedes aplicar para mejorar tu visibilidad, atraer clientes y hacer crecer tu negocio online.