Sell by Measure
By Kavio Labs · Version 1.0.2Sell products by weight, length, area or volume with decimal quantities, unit prices, step/min/max and a live price on the product page.
- WooCommerce10.1 – 11.2
- WordPress6.7+
- HPOS and blocksYes
by Kavio Labs · for WooCommerce 10.1+ on WordPress 6.7+
Year/make/model parts search for WooCommerce: fitment table per product, CSV import, My Garage, fits / does not fit badge and vehicle-filtered shop and search pages.
Year/make/model parts search for WooCommerce: fitment table per product, CSV import, My Garage, fits / does not fit badge and vehicle-filtered shop and search pages.
WooCommerce 10.1 - 11.2, WordPress 6.7+
Year / make / model parts search for WooCommerce. Shoppers pick their vehicle and see only the parts that fit; every product page says whether the part fits the vehicle in their garage.
Requirements: WordPress 6.7+, WooCommerce 10.1+ (tested with 11.2), PHP 7.4-8.3. Works with block themes (Twenty Twenty-Five) and classic themes (Storefront), High-Performance Order Storage (HPOS) and the Cart and Checkout blocks.
{prefix}kv_vf_fitment, {prefix}kv_vf_vehicle).Upload the new zip the same way and confirm Replace current with uploaded. Fitment data and settings stay.
Deactivating keeps everything. Deleting the plugin keeps the fitment data unless Remove data on uninstall is on.
WooCommerce > Settings > Vehicle fitment
| Setting | Default | |
|---|---|---|
| Enable | on | Search, badge, fitment tab and the filtered catalogue on the storefront. Admin screens always work. |
| Fit badge | on | The badge above the add to cart button |
| Fitment tab | on | The "Vehicle fitment" product tab |
| Universal parts | on | Universal-fit products appear in every vehicle search |
| Search in category | on | On a category page the search shows results from that category |
| My Garage size | 5 | 1 to 10 vehicles |
| Remove data on uninstall | off | Deleting the plugin also drops the fitment tables and the settings |
KAVIO-XXXX-...). New installs have a 14-day start period. Without a valid licence the storefront features switch off; your data and the admin screens stay. The check runs once a day from the admin area only and sends the site address and the key, nothing else.Development sites (localhost, .test, .local, private IP addresses) always work.
Three ways to place it:
[kv_vehicle_search title="Find parts for your vehicle" layout="horizontal|vertical" garage="yes|no" button="Find parts" target=""]. target is a results URL; empty = the shop page; current = the current product category.Years are listed newest first. Make and model load as the shopper chooses (a small, cacheable REST call). Submodel and engine appear only when your data has values for the chosen vehicle; both are optional.
Find parts opens the shop page (or, with "Search in category" on, the current category) filtered by the vehicle.
With a vehicle in the URL (?kvf_y=2018&kvf_mk=Ford&kvf_md=F-150, plus kvf_s / kvf_e), the shop page, product categories, tags, attributes and the product search show only:
A banner names the vehicle with a Show all products link. Sorting, pagination and other filters keep working.
Above the add to cart button of products with fitment data:
Select vehicle / Change vehicle opens a compact selector in the badge; the answer updates without reloading. Shortcode for custom templates: [kv_vehicle_fit product="123"].
A Vehicle fitment (N) tab lists every vehicle (years, make, model, submodel, engine, notes). Lists with more than 10 vehicles get a filter box. Shortcode: [kv_vehicle_fitment_table product="123"].
The last vehicles a shopper searched (default 5, up to 10) appear as chips under the search; one click searches again, the x removes one. The garage is stored in the shopper's browser (localStorage): no account, no cookie, nothing on your server, and pages stay cacheable by full-page caches and CDNs.
A fitment row links one product to one vehicle line: a year or a year range, make, model and, when it matters, submodel and engine. An empty submodel or engine means "all submodels / engines". Notes (for example "Front axle") appear in the fit badge and the fitment table. A universal product fits every vehicle.
Fitment is stored on the parent product; variations share the fitment of their product.
Open a product, tab Vehicle fitment:
Products > Vehicle fitment > Import.
| Column | Required | Notes |
|---|---|---|
sku or product_id or product_slug | one of them | Variation SKUs and IDs map to the parent product |
year | yes (or year_from + year_to) | 2018 or 2015-2020 |
make, model | yes | |
submodel, engine | no | empty = all |
notes | no | up to 255 characters |
universal | no | yes / y / true / 1 / x marks a universal part (year, make and model can stay empty) |
Header names are case-insensitive and common aliases work (trim, part_number, start_year ...). Comma, semicolon, tab and pipe delimiters are detected. Example:
sku,year,make,model,submodel,engine,notes,universal
KVF-BRAKE-01,2015-2020,Ford,F-150,,,Front axle,
KVF-BRAKE-01,2021-2023,Ford,F-150,XLT,3.5L V6,Front axle,
KVF-MOUNT-01,,,,,,,yes
kv-vehicle-fitment). You can leave the page; the progress bar updates while it is open. The report lists up to 200 skipped rows with line numbers.Files up to 50 MB are accepted. Duplicate rows of a product are stored once.
Products > Vehicle fitment > Export > Download CSV writes every row with product_id, sku, product_slug, years, vehicle, notes and universal. The file imports back unchanged: edit it in a spreadsheet and import it with Replace. Cells that start with =, +, - or @ are prefixed with an apostrophe (spreadsheet formula guard).
No. You import the vehicles your parts fit, so the lists only contain vehicles you sell parts for.
Rows live in indexed database tables. Imports run in the background in chunks, so files with hundreds of thousands of rows work; the shop filter adds one indexed sub-query to the product query (no post meta queries).
Block themes (the Product Collection block that inherits the query from the template) and classic themes (the main product query and woocommerce_before_shop_loop). Tested with Twenty Twenty-Five and Storefront.
Yes. The page HTML never depends on cookies; the garage and the fit badge run in the browser, and the selector lists come from a cacheable REST endpoint (/wp-json/kv-vehicle-fitment/v1/options).
Yes: place the search on the category page (with "Search in category" on) or use the shortcode with target="current".
Fitment belongs to the product; all its variations share it. A variation SKU in the CSV maps to its product.
Settings and data stay unless "Remove data on uninstall" is on. Orders are never touched.
More for WooCommerce
Sell products by weight, length, area or volume with decimal quantities, unit prices, step/min/max and a live price on the product page.
EN 16931 e-invoices and credit notes from WooCommerce orders: XRechnung (CII/UBL), ZUGFeRD/Factur-X PDF/A-3 and Peppol BIS 3.0 UBL, gapless numbering, B2B checkout fields, validation, e-mail attachments, My Account downloads and ZIP export.
Text and monogram engraving with a live preview on the product image: 12 fonts, positions, fixed or per-character fees, offensive-word filter and a printable production sheet.