Sometimes you want to provide rates but limit their availability based on the weight of the order – for example if your carrier only carries packages up to a certain weight.
The WooCommerce Pro Shipping plugin already lets you set up tiered rates by weight, or item quantity, but there’s no way to set a maximum weight for a particular rate. Fortunately there are filters in place that let you achieve that fairly easily.
The example below limits a specific rate to a maximum weight of “5” – the units are whatever your store base weight unit is set to, e.g. if your store is set up to use kilograms, this will block the specific rate (ID 1 in our example below) over 5kg.
function limit_rate_by_weight( $availability, $rate, $rate_id ) { global $woocommerce; // The limit must be specified in your base store weight units. $limit = 5; // The rate ID of the rate you want to block. $blocked_rate_id = 1; // Retrieve the cart weight $weight = $woocommerce->cart->cart_contents_weight; if ( $rate_id == $blocked_rate_id ) { if ($weight > $limit) { return false; } } return $availability; } add_filter( 'woo_ps_availability', 'limit_rate_by_weight', 10, 3 );