Después de integrar el código, podrás establecer el número máximo de unidades permitidas para un producto desde la página de edición del producto, en «Datos del producto > Inventario > Máximo de unidades permitidas».
// 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' ); } } } }