Octolize shipping plugins for every scenario

Shipping illustration Explore plugins

Comprehensive Shipping Setup for Desks, Mats, Chairs, and Heaters: A Step-by-Step Configuration Guide

Toa Heftiba FV3GConVSss Unsplash
Author Grzegorz Rola
Updated:
2025-02-28
Reading time:
4 minutes read

Setting up a flexible and accurate shipping setup in WooCommerce can be a challenge – especially when dealing with large, varied products like desks, chairs, and heaters. If you’re selling bulky or multi-category items, the default shipping options may fall short.

This guide walks you through a complete solution for configuring WooCommerce shipping for desks and other heavy or quantity-sensitive products using a rule-based method. Whether you’re shipping a single mat or ten heaters, we’ll show you how to set up detailed, reliable shipping charges tailored to your store’s unique needs.

Shipping Desks & Complex Products: Flexible WooCommerce Setup

Shipping Scenario Provided by the Store Owner

The primary products are:

  • Desks
  • Mats
  • Chairs
  • Heaters

Each will have a delivery period for a single item and then add-ons for additional items as follows:

Mats
Quantity ordered / Delivery price:
1. £6.95
2. £9.95
3/4. £12.95
5/6/7. £15.95
8/9/10. £18.95
11+ FREE

Desks
Quantity ordered / Delivery price:
1. £55
2/3. £95
4+ FREE

Chairs
Quantity ordered / Delivery price:
1. £55
2/3. £95
4+ FREE

Heaters
Quantity ordered / Delivery price:
1. £19.95
2/3. £38.95
4/5/6. £49.95
7/8/9. £69.95
10+ FREE

Analysis of the Shipping Scenario Setup

This scenario defines four distinct product types (Mats, Desks, Chairs, and Heaters), each with its own quantity-based shipping cost table. The shipping cost for each product type is calculated independently based on how many units of that product type are in the order, and then summed together for a final shipping cost.

Key points and edge cases:

  • Mats become free to ship at quantity 11 or more.
  • Desks become free to ship at quantity 4 or more.
  • Chairs become free to ship at quantity 4 or more.
  • Heaters become free to ship at quantity 10 or more.
  • Shipping costs for each category do not stop the calculation for other product types—costs from each category are added together if an order contains multiple product types.
  • If no items of a given type are in an order, that product type’s rules simply do not apply.

Example Edge Cases

  • Ordering 1 mat only: Shipping = £6.95.
  • Ordering 11 mats only: Shipping = £0.00 for mats.
  • Ordering 1 desk only: Shipping = £55.
  • Ordering 4 desks only: Shipping = £0.00 for desks.
  • Ordering 10 heaters only: Shipping = £0.00 for heaters.
  • Ordering 2 mats and 1 desk in the same order: Shipping = £9.95 (mats) + £55 (desk) = £64.95 total.
  • Ordering 3 chairs and 2 heaters: Shipping = £95 (chairs) + £38.95 (heaters) = £133.95 total.

Below is the proposed order of rules. Each set of rules applies exclusively to one product category, checking how many items of that category are present. Exactly one rule from each category will match a specific quantity range, so you only pay the correct bracket for that product type. Because we do not stop processing after matching one bracket (i.e., we do not use a “stop” action in these rules), any other product category’s rules will also apply as needed.

Final JSON Configuration for Shipping Desks Scenario

Below is the JSON rules table configuration that implements this scenario. It satisfies the required schema by including an array of rules (each rule with conditions, cost_per_order, additional_costs, and special_action). Present this as a single configuration file:

{
  "rules_table": {
    "rules": [
      
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["mats"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "1",
            "max": "1"
          }
        ],
        "cost_per_order": "6.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["mats"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "2",
            "max": "2"
          }
        ],
        "cost_per_order": "9.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["mats"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "3",
            "max": "4"
          }
        ],
        "cost_per_order": "12.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["mats"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "5",
            "max": "7"
          }
        ],
        "cost_per_order": "15.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["mats"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "8",
            "max": "10"
          }
        ],
        "cost_per_order": "18.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["mats"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "11",
            "max": ""
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [],
        "special_action": "none"
      },

      
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["desks"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "1",
            "max": "1"
          }
        ],
        "cost_per_order": "55",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["desks"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "2",
            "max": "3"
          }
        ],
        "cost_per_order": "95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["desks"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "4",
            "max": ""
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [],
        "special_action": "none"
      },

      
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["chairs"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "1",
            "max": "1"
          }
        ],
        "cost_per_order": "55",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["chairs"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "2",
            "max": "3"
          }
        ],
        "cost_per_order": "95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["chairs"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "4",
            "max": ""
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [],
        "special_action": "none"
      },

      
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["heaters"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "1",
            "max": "1"
          }
        ],
        "cost_per_order": "19.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["heaters"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "2",
            "max": "3"
          }
        ],
        "cost_per_order": "38.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["heaters"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "4",
            "max": "6"
          }
        ],
        "cost_per_order": "49.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["heaters"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "7",
            "max": "9"
          }
        ],
        "cost_per_order": "69.95",
        "additional_costs": [],
        "special_action": "none"
      },
      {
        "conditions": [
          {
            "condition_id": "product_category",
            "operator": "any",
            "product_category": ["heaters"]
          },
          {
            "condition_id": "item",
            "operator": "is",
            "min": "10",
            "max": ""
          }
        ],
        "cost_per_order": "0",
        "additional_costs": [],
        "special_action": "none"
      }
    ]
  }
}

To use this configuration: Copy the entire JSON code shown above and paste it into your Flexible Shipping PRO rules table using the “Paste” button.

Verification of Edge Cases

Let’s revisit a few test scenarios to confirm the rules produce the correct costs:

  • 11 Mats only:
    • The mats rules check quantity = 11; it matches the last mat rule (min=11, max empty). Shipping cost from that rule = £0. No other category has items, so total shipping = £0.
  • 1 Desk and 2 Mats:
    • For desks: 1 item → cost = £55 (the rule with min=1, max=1 for desks).
    • For mats: 2 items → cost = £9.95 (the rule with min=2, max=2 for mats).
    • Summed shipping = £55 + £9.95 = £64.95.
  • 4 Chairs only:
    • The chairs rule with min=4, max empty sets cost = £0. Total shipping = £0.
  • 10 Heaters only:
    • The rule for heaters with min=10, max empty sets cost = £0. Total shipping = £0.
  • 3 Chairs and 3 Desks:
    • Chairs (3): cost = £95 (the rule with min=2, max=3 for chairs).
    • Desks (3): cost = £95 (the rule with min=2, max=3 for desks).
    • Total shipping = £190.

All these outcomes reflect the shipping charges specified in the original description. Therefore, the rules table above is both valid per the schema and accurate to the store owner’s quantity-based shipping costs.

Shipping setup with Flexible Shipping PRO

Setting up a complex shipping structure in WooCommerce doesn’t have to be overwhelming. With the right strategy and the power of Flexible Shipping PRO, you can implement even advanced quantity-based shipping rules for different product categories like desks, chairs, mats, and heaters.

By combining specific conditions per product type, you ensure fair and accurate delivery pricing while maintaining a great user experience. Use the provided JSON configuration to save time and eliminate guesswork. Ready to simplify your shipping setup? Start optimizing with Flexible Shipping today!

Flexible Shipping PRO WooCommerce

The best and the most powerful Table Rate shipping plugin for WooCommerce. Define the shipping rules based on numerous conditions and configure even the most complex shipping scenarios with ease.

View Details or Install plugin
100,000+ Active Installations
30-day money back guarantee
Last Updated: 2025-05-11
Works with WooCommerce 9.5 - 9.9.x

PHP Developer at Octolize

Grzegorz Rola is a seasoned software developer with over 25 years of experience in building and optimizing web-based solutions. Since 2015, he has been a core member of the Octolize development team, where he works on creating reliable and scalable WooCommerce plugins for the global e-commerce market. His strong engineering background is complemented by several years of professional focus on search engine optimization.

Grzegorz holds a degree in engineering from Wrocław University of Science and Technology. Before joining Octolize, he gained extensive experience as both a developer and an SEO specialist, giving him a rare ability to combine clean, efficient code with an understanding of how websites perform in search engines.