As standard WooCommerce does not allow to use decimal values in the quantity field, so we can only add 1, 2, 3, ... and so on to the cart. We had a project, where we would change that, so we came up with a really simple fix.
The fix
In the functions.php theme file, we just added a few lines.
// Add min value to the quantity field (default = 1) add_filter('woocommerce_quantity_input_min', 'min_decimal'); function min_decimal($val) { return 0.1; } // Add step value to the quantity field (default = 1) add_filter('woocommerce_quantity_input_step', 'nsk_allow_decimal'); function nsk_allow_decimal($val) { return 0.1; } // Removes the WooCommerce filter, that is validating the quantity to be an int remove_filter('woocommerce_stock_amount', 'intval'); // Add a filter, that validates the quantity to be a float add_filter('woocommerce_stock_amount', 'floatval'); // Add unit price fix when showing the unit price on processed orders add_filter('woocommerce_order_amount_item_total', 'unit_price_fix', 10, 5); function unit_price_fix($price, $order, $item, $inc_tax = false, $round = true) { $qty = (!empty($item['qty']) && $item['qty'] != 0) ? $item['qty'] : 1; if($inc_tax) { $price = ($item['line_total'] + $item['line_tax']) / $qty; } else { $price = $item['line_total'] / $qty; } $price = $round ? round( $price, 2 ) : $price; return $price; }
This is a really simple solution.
Get it as plugin
We have created a plugin for WordPress and WooCommerce with this feature. With the plugin, you can control the quantity fields per product, per category or for the whole site.