Product Insurance for WooCommerce lets you offer optional insurance packages on your product pages. This guide walks you through setting up your packages, choosing which products offer them, and what your customers see when they shop.
Overview
↑ Back to topProduct Insurance for WooCommerce adds a list of insurance packages above the add to cart button on single product pages. Each package has a name, a fixed or percentage cost, and an optional description. When a customer picks a package, its cost is added to the price of that product in the cart, and the package name is saved on the order.
You create a default set of packages that applies across your store, and you can limit each one to a product category, tag, or product type. On any product you can switch to a custom set of packages instead, or turn insurance off for that product.
Requirements
↑ Back to top- WordPress 6.4 or higher.
- WooCommerce 9.0 or higher. WooCommerce must be installed and active.
- PHP 7.4 or higher.
Optional:
- WordPress 6.9 or higher if you want AI clients to manage insurance through the WordPress Abilities API. See the Developer documentation section.
Product Insurance for WooCommerce is compatible with High Performance Order Storage (HPOS). It also works with WooCommerce Bookings, the CURCY multi-currency plugin, and Polylang.
Installation
↑ Back to topTo start using a product from WooCommerce.com, you can use the โAdd to storeโ functionality on the order confirmation page or the My subscriptions section in your account.
- Navigate to My subscriptions.
- Find the Add to store button next to the product youโre planning to install.
- Follow the instructions on the screen, and the product will be automatically added to your store.
Alternative options and more information at:
Managing WooCommerce.com subscriptions.
There are no extra setup steps after activation. No license key or account connection is needed.
When you activate the extension for the first time, it creates three sample packages for you: Basic, Standard, and Premium. These are switched off by default, so nothing appears on your store until you enable at least one package.
Usage
↑ Back to topYou manage insurance in two places. The settings screen holds your default packages, which apply across your store. The Insurance tab on each product lets you change what that one product offers.
Product Insurance settings
↑ Back to topGo to WooCommerce > Settings > Products > Product Insurance. You can also get there from the Settings link under the extension name on the Plugins screen.

Only users who can manage WooCommerce settings can open and save this screen. That includes administrators and shop managers.
Insurance terms page
Pick the page on your site that holds your insurance terms and conditions. A link reading “Read the insurance terms and conditions” then appears below the insurance options on every product page that offers insurance. This gives customers one place to read the full cover details before they choose a package.
The link only shows when the page is published. Leave the field empty if you do not have a terms page, and no link appears. If you use Polylang, customers are sent to the translation of the page in their language when one exists.
Insurance packages table
The table lists your default packages. Each row shows:
- Package Name: the name and short description of the package.
- Restrictions: any category, tag, or product type limit on the package. A dash means the package has no restrictions.
- Enabled: a toggle that turns the package on or off. Only enabled packages appear on product pages.
- Cost: the amount, with a currency symbol for a fixed fee or a percent sign for a percentage fee.
- Actions: Edit and Delete links.
You can drag rows by the handle on the left to change the order. Packages appear on product pages in the same order.
To add a package, click Add Insurance. A new row called “New Package” appears, switched off. Click Edit to fill in its details, then turn on the Enabled toggle.
To remove a package, click Delete and confirm.
Changes in the table, including new packages, edits, toggles, and the new order, are only stored when you click Save changes at the bottom of the screen.

Edit insurance package window
↑ Back to topClicking Edit on any package opens the Edit insurance package window. Clicking Save in the window updates the row in the table. You still need to click Save changes on the screen behind it to store your changes. Cancel closes the window without changing the row.

General details
- Package name: the name your customers see on the product page, in the cart, and on their order. Keep it short and clear, for example “Accidental damage, 1 year”.
- Description: a short note of up to 120 characters for your own reference. It shows under the package name in the packages table and is never shown to customers.
- Full Description: a longer description with basic formatting, lists, and links. When you fill this in, an info icon appears next to the package on the product page. Clicking the icon opens a popup with this text. This is the only package description your customers see, so use it to explain what the package covers and for how long.
Insurance package cost
- Fee type: choose Fixed to charge a set amount, or Percentage to charge a percentage of the product price.
- Cost: the amount to charge. For a fixed fee, enter an amount in your store currency. For a percentage fee, enter a number such as
10for 10 percent.
The fee is charged per item. If a customer buys three of a product with a 5.00 fixed package, the insurance adds 15.00. A percentage fee is worked out from the price of that product, not from the cart total.
Package restrictions
This section only appears for default packages on the settings screen. Custom packages on a product do not have restrictions, because they only apply to that product.
- Product Category Restriction: offer the package only on products in one category. Products in a subcategory of that category also qualify. The default is All Categories.
- Product Tag Restriction: offer the package only on products with one tag. The default is All Tags.
- Product Type Restriction: offer the package only on one product type, such as simple or variable products. The default is All Product Types.
You can set one value for each restriction. When you set more than one, a product must match all of them to see the package. For variations, the extension checks the parent product’s categories, tags, and type.
Insurance tab on a product
↑ Back to topEach product has an Insurance tab in its Product data panel. Go to Products > All Products, edit a product, and scroll to Product data.
The tab is available for simple and variable products, and for bookable products when WooCommerce Bookings is active. Grouped and external products do not offer insurance, so the tab does not appear for them.

Product Insurance
Choose which packages this product offers:
- Use default packages: the product shows the enabled default packages from the settings screen that match its category, tag, and type. This is what every product uses until you change it.
- Use custom packages: the product ignores the default packages and shows its own set instead. A packages table appears below the dropdown when you pick this option.
- No insurance packages: the product shows no insurance options.
Custom packages table
This table works like the one on the settings screen, without the Restrictions column. Click Add Insurance to add a package, Edit to set its name, descriptions, fee type, and cost, and turn on the Enabled toggle. Drag rows to reorder them.
Click Update on the product to save. Packages without a name are not saved.

What your customers see
↑ Back to topOn the product page, an Add Insurance section appears above the add to cart button. It lists each available package with its name and cost, and a No insurance option, which is selected by default.
- A fixed fee shows as an added amount, for example “(+5.00)”.
- A percentage fee shows as the amount it works out to for that product.
- Both amounts update when the customer changes the quantity.
- The product price shown on the page updates to include the selected package. This works in both classic and block themes.
- An info icon next to a package opens its full description in a popup, when the package has one.
- A link to your insurance terms page appears below the options, when you have chosen one.
On a variable product, a percentage fee shows its amount once the customer picks a variation, and it is worked out from that variation’s price. The price that updates is the variation’s own price, shown just above the add to cart button. The price range at the top of the page stays as it is.


When the customer adds the product to the cart, the insurance cost is added to that product’s line price. The cart and checkout show an Insurance line under the product with the package name and cost, or “No insurance” if they did not pick one. Each insurance choice creates its own cart line, so the same product with two different packages shows as two lines.
On the order, each product line stores an Insurance entry with the package name. Your order emails and the order screen in WP Admin show it.

Use cases
↑ Back to topOffer one store-wide protection plan
↑ Back to topYou sell home goods and want every product to offer a single accidental damage plan for a flat fee.
- Go to WooCommerce > Settings > Products > Product Insurance.
- Delete the sample packages you will not use, or leave them switched off.
- Edit one package. Set Package name to “Accidental damage cover”, Fee type to Fixed, and Cost to
9.99. Leave all restrictions on their “All” options. - Turn on the Enabled toggle and click Save changes.
Every simple, variable, and bookable product now offers the plan, because products use the default packages unless you change them.
Charge a percentage on electronics only
↑ Back to topYou want electronics to carry a 12 percent warranty extension, and nothing else in the store to show it.
- Add a default package called “Extended warranty”.
- Set Fee type to Percentage and Cost to
12. - Set Product Category Restriction to your Electronics category. Products in its subcategories, such as Phones or Laptops, also get the package.
- Enable it and save.
A 400.00 laptop shows “(+48.00)” next to the package.
Give premium products their own tiers
↑ Back to topMost of your products use the default packages, but your high-end watches need their own pricing.
- Edit a watch and open the Insurance tab.
- Set Product Insurance to Use custom packages.
- Add packages such as “Theft and loss, 1 year” at 5 percent and “Theft and loss, 3 years” at 12 percent. Use Full Description to set out what each covers.
- Enable both and click Update.
The watch shows only these two packages. The rest of your store keeps the defaults.
Keep insurance off items where it does not fit
↑ Back to topGift cards, digital downloads, and sale clearance items should not offer insurance.
- For a few products, open each one’s Insurance tab and choose No insurance packages.
- For a whole group, work the other way round. Restrictions choose which products get a package, and there is no way to exclude products. So restrict your default packages to the categories, tags, or product type that should offer insurance. For example, give every insurable product an “insurable” tag and set Product Tag Restriction to that tag.
Insure rentals or bookings
↑ Back to topYou rent out equipment with WooCommerce Bookings and want a damage waiver on each booking.
- Add a default package called “Damage waiver” with a fixed fee.
- Set Product Type Restriction to the bookable product type so it only shows on bookings.
- Enable it and save.
The insurance options appear on the booking form, and the fee is added to the booking’s cart line.
Working with other W7S extensions
↑ Back to topProduct Insurance for WooCommerce looks after one thing: optional cover on the items your customers buy. The W7S extensions below handle what sits around that cover. They can protect the delivery as well as the item, keep a record of what customers agreed to, decide what happens to insurance on a refund, and let you manage packages from an AI assistant.
Cover the delivery as well as the item. Shipping Insurance Manager offers insurance on the shipment at checkout, as one fee per order. Product Insurance for WooCommerce charges per item, inside the product’s line price. The two work side by side, so a customer can insure a laptop against accidental damage and also insure the parcel it ships in. Shipping insurance appears as its own “Shipping Insurance” fee line, and product insurance appears under each product. Give your packages names that make the difference clear, such as “Accidental damage, 2 years” and “Lost or damaged in transit”.
Keep a record of the terms customers agreed to. The terms link from the Insurance terms page setting lets customers read your cover details on the product page, but it does not record that they did. Terms & Conditions Tracker adds consent checkboxes to the classic and block checkout, including custom ones, and stores a consent record on each order. Add a checkbox for your insurance terms, and every insured order carries proof of agreement you can view on the order screen or export as CSV.
Decide what happens to insurance on a refund. The insurance fee is part of the product’s line price. When Self-Service Refunds refunds an item, the amount covers the selected items and their tax, so the insurance paid on those items goes back to the customer too. If your policy is that cover is not refundable once an item has shipped, send refund requests for your insured product categories to manual review. You then check each one before any money moves.
Retire an insured product without losing its setup. Discontinued Products Manager marks a product as discontinued instead of deleting it. With its default settings, the product can no longer be added to the cart, so no new insurance is sold on it. The product page stays online with suggested alternatives, and the product keeps its Insurance tab settings. If you bring the product back later, its custom packages are still there.
Show honest reference prices. Insurance is added to the price in the cart and never changes a product’s stored regular or sale price. That means Price History Manager keeps tracking your real product prices, and the lowest price from the last 30 days that it shows for the EU Omnibus Directive is not inflated by insurance fees.
Manage your packages from an AI assistant. On WordPress 6.9 or higher, Product Insurance for WooCommerce registers six tools with the WordPress Abilities API. The extension does not talk to an assistant itself. MCP (Model Context Protocol) for WooCommerce is the connector that makes these tools available to Claude, ChatGPT, and other MCP clients. Once it is set up, you can ask in plain language:
- “Show me my insurance packages and the terms page.” The assistant reads your default packages, their fees, restrictions, and whether each one is switched on.
- “Which products don’t use the default insurance?” The assistant lists products set to custom packages or no insurance.
- “What insurance can customers pick on the Oak Desk?” The assistant shows the packages that product actually offers, after restrictions.
- “How much would Premium cover cost on two Oak Desks?” The assistant works out the fee the same way the cart does, in your store currency before tax.
- “Turn off insurance on the gift card.” The assistant changes that product’s setting to no insurance.
- “Add a 15 percent Extended warranty package for the Electronics category.” The assistant updates your default packages.
The tools that make changes replace the whole package list they work on, so the assistant reads your current packages first and sends back every package you want to keep. Changing default settings needs a user who can manage WooCommerce, the same as the settings screen. The assistant acts with the permissions of the WooCommerce API key you give it, so a read-only key lets it look but not change anything.

FAQ
↑ Back to topWhy can’t I see insurance on my product pages?
↑ Back to topCheck four things. At least one package must be enabled, and the sample packages created on activation are switched off. The product must be a simple, variable, or bookable product. The product’s Insurance tab must not be set to No insurance packages. If the product uses default packages, it must match each package’s category, tag, and type restrictions.
Can a customer choose more than one package for a product?
↑ Back to topNo. The customer picks one package or No insurance for each product they add to the cart.
Is insurance charged per item or per order?
↑ Back to topPer item. The fee is added to each unit of the product. A fixed fee is multiplied by the quantity, and a percentage fee is worked out from the unit price.
Does the insurance fee show as a separate fee in the cart?
↑ Back to topNo. The fee is added to the product’s line price, and an Insurance line under the product shows which package was chosen and what it cost. Because the fee is part of the product price, the product’s tax class and any percentage coupons on that product apply to it too.
Do restrictions work on custom packages?
↑ Back to topNo. Restrictions only apply to default packages on the settings screen. Custom packages on a product apply to that product only.
What happens to past orders if I edit or delete a package?
↑ Back to topExisting orders keep the package name saved at checkout. Changing or deleting a package does not alter past orders.
Can reordering or deleting packages affect carts that are already open?
↑ Back to topIt can. A customer’s cart remembers the position of the package they chose. If you reorder or delete packages while someone has insured items in their cart, their item may pick up a different package, or lose its insurance, the next time the cart totals are worked out. Make larger package changes at a quiet time.
Does it work with variable products?
↑ Back to topYes. Insurance is set on the parent product and applies to all its variations. Percentage fees are based on the price of the variation the customer picks, both on the product page and in the cart. Until a variation is picked, percentage packages show no amount.
Does it work with grouped and external products?
↑ Back to topNo. External products are bought on another site, so there is no way to charge a fee. For a grouped product, customers can insure each item on that item’s own product page. Insurance options do not appear on grouped or external product pages, even if those products use your default packages.
Does it work with multi-currency plugins?
↑ Back to topYes, with CURCY. Fixed fees are converted to the customer’s active currency, and amounts show the right currency symbol. Percentage fees follow the converted product price.
Can I translate the customer-facing text?
↑ Back to topYes. The extension ships with translations for over 20 languages. If you use Polylang, all of the extension’s text is also available under Languages > String translations in the “Product Insurance” group, so you can change the wording for each language. That includes the “Add Insurance” heading, the “No insurance” option, the “Insurance” label in the cart, and the terms and conditions link.
Package names and full descriptions are your own content, so they are not translated automatically.
Who can change insurance settings?
↑ Back to topAdministrators and shop managers, or any user who can manage WooCommerce settings.
What is removed if I delete the extension?
↑ Back to topDeleting the extension from the Plugins screen removes its settings, your default packages, and the insurance settings on every product. Orders keep their insurance details. Deactivating the extension without deleting it keeps everything.
Developer documentation
↑ Back to topData storage
↑ Back to top| Key | Type | Description |
|---|---|---|
product_insurance_packages | Option | Array of default packages. Each package: name, description, full_description, enabled (yes/no), type (fixed/percentage), amount, product_category, product_tag, product_type (term ID, type slug, or all). |
product_insurance_terms_page | Option | Page ID of the insurance terms page, stored as a string. Output as a link below the package list when the page (or its Polylang translation via pll_get_post()) is a published page. |
_product_insurance_option | Product meta | sitewide, override, or none. Empty is treated as sitewide. |
_product_insurance_packages | Product meta | Array of custom packages for the product. Same shape as default packages, without restriction keys. amount is stored as a float. |
Supported product types
↑ Back to topInsurance is offered on simple, variable, and booking products. Product_Insurance_Public::UNSUPPORTED_PRODUCT_TYPES (grouped, external) short-circuits get_insurance_packages() to an empty array, so those types never render the selector or carry a fee, whatever their stored meta says. The Insurance product data tab is hidden for them.
Pricing logic
↑ Back to topThe fee is applied on woocommerce_before_calculate_totals by calling set_price() on the cart item’s product:
- Fixed:
base + amount - Percentage:
base * ( 1 + amount / 100 )
The base is read with get_price( 'edit' ), which bypasses woocommerce_product_get_price view filters. This lets multi-currency plugins convert the combined price once on read. Insurance amounts are stored in the store base currency.
On the product page, the price preview targets the Product Price block in block themes (.wp-block-woocommerce-product-price[data-is-descendent-of-single-product-template]) and .single-product .price in classic themes. On variable products it listens to the found_variation, show_variation, and reset_data events on form.variations_form, uses variation.display_price as the base, and writes to .single_variation .woocommerce-variation-price.
Restriction matching for default packages is in Product_Insurance_Public::product_meets_restrictions( $product, $package ). Variations are resolved to their parent. Category matching includes ancestors via get_ancestors().
Action hooks
↑ Back to topThe extension does not expose any action hooks of its own.
Filter hooks
↑ Back to topwoocommerce_get_settings_product_insurance
Filters the settings array for the Product Insurance section before it is output and saved. Uses the standard WooCommerce woocommerce_get_settings_{id} pattern.
add_filter( 'woocommerce_get_settings_product_insurance', function ( $settings ) {
// Add, remove, or change WC_Settings_API style field definitions.
return $settings;
} );
product_insurance_polylang_register_all_strings
Whether to register every string from languages/product-insurance.pot with Polylang. Default true. Only runs when pll_register_string() exists. The parsed POT strings are cached in the product_insurance_pll_pot_strings transient for one day, keyed on the POT file’s modification time.
add_filter( 'product_insurance_polylang_register_all_strings', '__return_false' );
product_insurance_polylang_strings
Filters the final list of strings registered with Polylang under the “Product Insurance” group. Storefront strings passed to Product_Insurance_Polylang::translate() (“Add Insurance”, “Insurance”, “No insurance”, “Read the insurance terms and conditions”) are listed in the private translatable_strings() method so they reach the POT file. Add any new string passed to translate() there.
| Argument | Type | Description |
|---|---|---|
$strings | string[] | Strings to register. |
product_insurance_abilities_mcp_public
Whether the abilities are flagged meta.mcp.public, which exposes them as MCP tools through an MCP adapter. Default true.
add_filter( 'product_insurance_abilities_mcp_public', '__return_false' );
WooCommerce hooks used
↑ Back to top| Hook | Purpose |
|---|---|
woocommerce_get_sections_products | Adds the insurance section to the Products settings tab. |
woocommerce_get_settings_products | Returns the section’s settings. |
woocommerce_settings_save_products | Saves settings and the packages table. |
woocommerce_admin_field_product_insurance_table | Renders the custom packages table field. |
woocommerce_product_data_tabs, woocommerce_product_data_panels, woocommerce_process_product_meta | Insurance product tab. |
woocommerce_before_add_to_cart_button, woocommerce_before_booking_form | Render the package selector. It renders once per product per request. |
woocommerce_add_cart_item_data | Stores the selection. Adds a random unique_key so each add to cart creates its own line. |
woocommerce_before_calculate_totals | Applies the fee. |
woocommerce_get_item_data | Shows the Insurance line in cart and checkout. |
woocommerce_checkout_create_order_line_item | Saves the Insurance order item meta. |
Abilities API
↑ Back to topOn WordPress 6.9 and higher, the extension registers abilities in the product-insurance category. All are exposed in REST (show_in_rest) and, by default, as MCP tools. On older WordPress versions nothing is registered.
| Ability | Purpose | Capability |
|---|---|---|
w7s-product-insurance/get-settings | Returns the terms page and all default packages. | manage_woocommerce |
w7s-product-insurance/update-settings | Replaces the full default package list and/or sets terms_page_id (0 clears). | manage_woocommerce |
w7s-product-insurance/get-product-insurance | Returns a product’s mode, custom packages, and effective packages with their cart keys. | edit_post on the product |
w7s-product-insurance/update-product-insurance | Sets a product’s mode and/or replaces its custom packages. | manage_woocommerce and edit_post |
w7s-product-insurance/list-products | Lists products by mode: customised (default), override, none, or sitewide. Paginated, up to 100 per page. | edit_products |
w7s-product-insurance/calculate-fee | Calculates the fee for a product or variation, package key, and quantity, in base currency before tax. Accepts an optional custom unit price. | edit_products |
The update abilities replace package lists in full. Read first, then send every package you want to keep. Input is run through the same sanitization as the admin forms. For variations, insurance is configured on the parent, so pass the parent ID to the product abilities.
REST routes and WP-CLI
↑ Back to topThe extension registers no custom REST routes and no WP-CLI commands. The abilities above are available through the core Abilities API REST endpoints.
Logging
↑ Back to topThe extension does not write to the WooCommerce logger, so nothing from it appears under WooCommerce > Status > Logs.
Capabilities
↑ Back to topSaving the settings screen and the product Insurance tab both require manage_woocommerce. Package data is sanitized with sanitize_text_field(), except full_description, which goes through wp_kses_post() on save and again on output.
Uninstall
↑ Back to topuninstall.php deletes product_insurance_packages and product_insurance_terms_page, plus four legacy options from earlier versions (product_insurance_debug_mode, product_insurance_api_key, product_insurance_webhook_secret, product_insurance_store_address), the Polylang transient, and the _product_insurance_option and _product_insurance_packages meta on every product, then invalidates the WooCommerce products cache group. Order item meta is kept.
