You can deny checkout based on cart weight in WooCommerce by validating WC()->cart->cart_contents_weight during checkout processing and blocking the order with an error notice if it exceeds your chosen limit. This runs at the point of order submission, not live on the cart page, so shoppers only see the block when they attempt to check out.
Why Cap Orders by Weight
- Courier or freight limits that make certain order weights impossible to ship
- Avoiding underpriced shipping on unusually heavy bulk orders
- Enforcing manual-quote-only handling above a certain weight threshold
Step 1: Add the Checkout Weight Validation
/** Block checkout if the cart's total weight exceeds a set limit */
add_action( 'woocommerce_after_checkout_validation', 'block_checkout_over_weight_limit' );
function block_checkout_over_weight_limit( $posted_data ) {
$weight_limit = 75;
if ( WC()->cart->cart_contents_weight > $weight_limit ) {
$notice = 'Sorry, your order exceeds our maximum shipping weight of ' . $weight_limit . get_option( 'woocommerce_weight_unit' ) . '. Please contact us for a freight quote.';
wc_add_notice( $notice, 'error' );
}
}

Adjust $weight_limit to match your carrier’s actual cutoff.
Troubleshooting
Limit Doesn’t Seem to Apply on the Cart Page
woocommerce_after_checkout_validation only fires when the customer submits the checkout form — it intentionally doesn’t run on the cart page, so test by proceeding to checkout rather than watching the cart totals update live.
Customers Report the Rule “Stopped Working”
Confirm no recent product edits removed weight values — if enough products in the catalog are missing a weight, the calculated total can quietly drop below the threshold even for large orders.
Need a Live Warning Before Checkout
Pair this validation with the total-weight display snippet on the cart page so shoppers see the number rising and understand the limit before they even reach checkout.
Frequently Asked Questions
Can I block checkout by weight for only certain shipping zones?
Yes — check WC()->customer->get_shipping_country() or the chosen shipping method inside the same function and only apply the limit conditionally.
Does this affect the cart page or only checkout?
Only checkout submission — the cart page remains browsable and editable regardless of weight; the block happens when the order is placed.
Can I set different limits for different user roles?
Yes — wrap the check in a role condition using current_user_can() so wholesale accounts, for example, get a higher threshold.
Conclusion
Denying checkout based on cart weight in WooCommerce is a short validation hook that stops overweight orders before they’re placed. Combine it with a visible weight total on the cart page so the restriction never feels like a surprise at the last step.
See also How to Display Total Cart Weight in WooCommerce. Then read How to Set Up Shipping by Weight in WooCommerce Without a Plugin.
Prefer no code? All-in-One Utilities Woo Add-on adds over 50 WooCommerce features, so you can switch them on without code.