Using Tiers
Tiers is a free WooCommerce volume pricing plugin. You set quantity breakpoints with a percentage discount each, for example 10 units at 10% off, and the cart applies the deepest band the quantity reaches. A pricing table on the product page shows every band and its unit price. It needs one saved tier and a priced product.
This walkthrough goes from a fresh install to a working pricing table and a verified cart discount, then covers manual placement and the developer filters.
1. Build the tier ladder
Section titled “1. Build the tier ladder”Open WooCommerce > Tiers and add bands in the Pricing tiers builder. There is no enable switch, saving at least one valid tier turns the discount on. Start with two or three breakpoints:
- 5 units > 5% off
- 10 units > 10% off
- 25 units > 15% off
As you type, the live preview lists each band the way a shopper reads it. On save, rows with a non-positive quantity or a percentage outside 0-100 are dropped and the rest sort by quantity ascending. The deepest matching band always wins at cart time.
2. Place the pricing table
Section titled “2. Place the pricing table”Pick a Table placement, product summary (default), before or after the add-to-cart form, the product meta area, or Only where I place it. Optionally set a Table heading and turn on the Savings column so the per-unit saving at each tier is spelled out.
3. Verify on the product page
Section titled “3. Verify on the product page”Open a simple product with a regular price. The table renders at your chosen placement showing each quantity range (5-9, 10-24, 25+), the discount, and the resulting per-unit price; the deepest-discount row carries a Best value badge. The markup is plain server-rendered HTML with a <caption> and <th scope>, present as the page loads, no AJAX, no layout shift.
4. Verify in the cart
Section titled “4. Verify in the cart”- Add the product below the first tier, the line uses the regular price.
- Raise the quantity to meet a tier, the line subtotal reflects that band’s discount off the regular price.
- Raise it to a higher tier, the deeper discount applies, not a stack of both.
The discount is taken off the regular price (the current price when no regular price is set). Tiers never raises a price: if the product’s sale price is already lower than the tier price, the sale price stays. Variations of one variable product count together: 3 red and 3 blue of one shirt reach a 5+ tier, and every line of that product gets the tier price.
If you turned on the Cart savings note, each discounted line shows You save {amount} beneath its subtotal. If totals look wrong, confirm the regular price is set and no other plugin is rewriting the line price for the same product.
Manual placement: shortcode and block
Section titled “Manual placement: shortcode and block”Set Table placement to Only where I place it, then drop the table where you want it. The shortcode is [tiers_table]; it takes one attribute, product_id:
[tiers_table][tiers_table product_id="123"]With no product_id (or 0), it uses the current product, so inside a product description or tab it renders that product’s table. Pass a product_id to show a specific product’s table anywhere, including a normal page or post.
In the block editor, insert the Volume pricing table block (category: WooCommerce). Its only control is a Product ID (0 = current product) field. The block is server-rendered, the editor shows a placeholder; the real table renders on the front end. Both paths share the same template, and both enqueue the table stylesheet on demand even outside single-product pages.
When a product has no valid tiers, the shortcode and block render nothing (empty string).
Extending tiers (developers)
Section titled “Extending tiers (developers)”To vary tiers by product, role, or anything else, filter tiers_product_tiers. It receives the global tiers and the WC_Product, and runs both when building the table and when discounting the cart:
add_filter( 'tiers_product_tiers', function ( array $tiers, WC_Product $product ): array { // Example: deeper tiers for a specific product. if ( 123 === $product->get_id() ) { return array( array( 'min_qty' => 3, 'discount_percent' => 10.0, 'label' => '' ), array( 'min_qty' => 6, 'discount_percent' => 20.0, 'label' => 'Wholesale' ), ); } return $tiers;}, 10, 2 );Each tier is an array of min_qty (int), discount_percent (float), label (string). This is the hook Tiers PRO uses for per-product and role-based pricing. See Configuration for the full hook list and the template override path.
Coupons, taxes and accessibility
Section titled “Coupons, taxes and accessibility”Tiers rewrites the line-item price on woocommerce_before_calculate_totals (priority 25), before WooCommerce computes totals, so coupons apply on top of the tiered price and taxes are calculated on the discounted price by WooCommerce’s own logic. The table uses <th scope> and a <caption>, so screen readers announce the quantities and prices correctly.
Shop price hint
Section titled “Shop price hint”With Shop price hint on (the default), product grids (the shop, category pages and other product loops) show “From X in bulk” under each price, where X is the price at the deepest tier. The line appears only when a tier makes the product cheaper. The single product price, the cart and the mini-cart are not changed.
In the Tujo quick-order table
Section titled “In the Tujo quick-order table”With Tujo active and Shop price hint on, each product in the quick-order table shows “From X in bulk” under its price, so a buyer ordering many lines at once sees the volume price before typing quantities.
Do two discount tiers stack?
Section titled “Do two discount tiers stack?”No. Only the deepest band the quantity reaches applies. At 25 units on the example ladder the line gets 15% off, not 5% plus 10% plus 15%.
Does the tier discount apply on top of a sale price?
Section titled “Does the tier discount apply on top of a sale price?”No. The tier percentage is taken off the regular price, and the line gets whichever is lower: that tier price or the sale price.
Do different variations count toward the same tier?
Section titled “Do different variations count toward the same tier?”Yes. Quantities are added up per parent product, so mixed sizes or colours of one product reach a tier together.
Why does the pricing table not appear?
Section titled “Why does the pricing table not appear?”Check that at least one valid tier is saved, that Show pricing table is on, that Table placement is not Only where I place it (in that case add [tiers_table] or the block), and that the product has a price.