Configuration
Tiers is configured on one screen: WooCommerce → Tiers. All settings are stored in a single tiers_settings option (an array), there are no custom tables. The fields below list the key each setting is saved under.
There is no master enable switch
Section titled “There is no master enable switch”Tiers applies discounts whenever you have at least one valid tier saved. There is no global on/off toggle. To stop discounting, remove your tiers; to stop showing the table while keeping the discount, turn Show pricing table off (below).
Pricing tiers (tiers)
Section titled “Pricing tiers (tiers)”The core of the page. Each tier is three values:
- Min. quantity (
min_qty, integer), the cart-line quantity at which the band unlocks. - Discount % (
discount_percent, float), taken off the product’s regular price. Stored to two decimals. - Label (
label, optional text), copy the merchant can show; not required.
The builder adds and removes rows in place with a live, shopper-facing preview. On save, the sanitize callback drops any row whose min_qty is not positive or whose discount_percent is <= 0 or > 100, then sorts the survivors by quantity ascending. Tiers are global in the free edition, the same ladder applies to every product.
Show pricing table (show_table)
Section titled “Show pricing table (show_table)”On by default. Controls whether the volume pricing table renders on single product pages. Turning it off does not affect the cart discount, the band still applies when a shopper carts enough units; only the on-page table disappears. Useful for a quiet discount, or when you place the table manually and don’t want a duplicate.
Table placement (placement)
Section titled “Table placement (placement)”Where the table is auto-inserted on the product page. The stored key maps to a WooCommerce hook:
| Choice | Stored value | Hook (priority) |
|---|---|---|
| Product summary (below price) | summary | woocommerce_single_product_summary (26) |
| Before the add-to-cart form | before_cart | woocommerce_before_add_to_cart_form (10) |
| After the add-to-cart form | after_cart | woocommerce_after_add_to_cart_form (10) |
| Product meta area | product_meta | woocommerce_product_meta_start (5) |
| Only where I place it | shortcode | (no auto-placement) |
summary is the default. Choosing Only where I place it suppresses automatic placement so the table renders only via the [tiers_table] shortcode or the Volume pricing table block.
Table heading (table_heading)
Section titled “Table heading (table_heading)”Optional text rendered above the table, for example Buy more, save more. Leave it blank to show just the table. The heading also becomes the table’s screen-reader <caption>; when blank, the caption falls back to Volume pricing tiers.
Savings column (show_savings)
Section titled “Savings column (show_savings)”Off by default. When on, the table gains a fourth You save column showing the cash saved per unit at each tier, next to the Quantity, Discount and Price columns.
Cart savings note (cart_savings_note)
Section titled “Cart savings note (cart_savings_note)”Off by default. When on, each discounted cart line gets a short You save {amount} note appended to its subtotal, the amount being the saving across that line’s full quantity. This is display-only: it hooks woocommerce_cart_item_subtotal and prints text; the discount itself is applied separately in the cart.
What the table shows
Section titled “What the table shows”The table always has Quantity, Discount and Price columns (plus You save when enabled). Quantities render as ranges derived from the next tier, 5, 9, then 10+ for the top band. When there is more than one tier, the row with the deepest discount is flagged with a Best value badge and an is-best-tier class for styling.
Template override
Section titled “Template override”To change the table markup, copy the bundled template into your theme at:
yourtheme/tiers/single-product/pricing-table.phpThe loader checks the active theme first (locate_template), then falls back to the plugin’s templates/, so your override survives updates. Inside the template the variables are prefixed with tiers_, $tiers_product, $tiers_tiers, $tiers_heading, $tiers_show_savings.
Developer filters and actions
Section titled “Developer filters and actions”All hooks below are merchant/developer-facing and stable.
// Swap in per-product or role-based tiers (this is what Tiers PRO builds on).add_filter( 'tiers_product_tiers', function ( array $tiers, WC_Product $product ): array { return $tiers;}, 10, 2 );
// Add a parameter to each active tier row as it is read (e.g. allowed_roles).add_filter( 'tiers_active_tier', function ( array $tier, array $raw ): array { return $tier;}, 10, 2 );
// Add the same parameter as a tier row is sanitised on save.add_filter( 'tiers_sanitize_tier', function ( array $tier, array $raw ): array { return $tier;}, 10, 2 );
// Inject a column into the admin tier builder table.add_action( 'tiers_admin_settings_table_header', function (): void { /* <th> */ } );add_action( 'tiers_admin_settings_table_row', function ( array $tier, int $index ): void { /* <td> */ }, 10, 2 );
// Adjust template variables / resolved template path.add_filter( 'tiers/template/args', function ( array $args, string $template ): array { return $args;}, 10, 2 );add_filter( 'tiers/template/path', function ( string $path, string $template ): string { return $path;}, 10, 2 );The cart filter tiers_product_tiers runs on every product on every cart recalculation, so keep it cheap.
Clean uninstall
Section titled “Clean uninstall”Tiers creates no custom database tables. Deleting the plugin runs uninstall.php, which removes the single tiers_settings option, leaving the database as it was. Deactivating (rather than deleting) stops the discount and hides the table but keeps your settings.