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+
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 (HPOS + Cart/Checkout blocks).
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 (HPOS + Cart/Checkout blocks).
WooCommerce 10.1 - 11.2, WordPress 6.7+
Plugin: kv-product-personalizer · Version: 1.0.0 · Compatibility: WordPress 6.7+, WooCommerce 10.1+ (tested 11.2.1), PHP 7.4+, HPOS, Cart and Checkout blocks, block and classic themes
Customers type a name, a date or their initials, pick a font and a position and see the result on the product image before they add the item to the cart. You set the rules once in a template: which fields, how many characters, which fonts, what it costs. Every value is checked again on the server, the fee is added to the item price, and the personalization follows the item to the cart, the checkout, the order, the e-mails and the production sheet.
| Page | Contents |
|---|---|
| Installation | Requirements, installing, licence, updating, uninstalling |
| Configuration | Settings, templates and fields, prices, products and categories |
| Usage | Shopper flow, cart and orders, production sheet |
| FAQ | Fonts, taxes, themes, other plugins |
| Developers | Store API, hooks, data |
WordPress 6.7 or later, WooCommerce 10.1 or later (tested up to 11.2.1), PHP 7.4 or later.
kv-product-personalizer-kv.zip (from My licenses) and click Install Now, then Activate.Upload the new zip the same way and choose "Replace current with uploaded". Templates, settings and orders are kept.
Deactivate and delete the plugin. Orders always keep their personalization texts. Templates, settings and the template choices of products and categories are removed only when Remove data on uninstall is on (WooCommerce > Settings > Product Personalizer).
WooCommerce > Settings > Product Personalizer.
| Setting | Effect |
|---|---|
| Enable | Shows the form on product pages. Carts and orders that already hold a personalization keep it. |
| Fees | Off = every personalization is free. |
| Live preview | Draws the text on the main product image while customers type. |
| Offensive words: use the built-in English list | Applies to templates with "Block offensive words". |
| Your own blocked words | One word or phrase per line. Matched as whole words, also with look-alike characters (0/o, 1/i, 3/e, 4/a, 5/s, $, @), repeated letters, plurals and spaced-out letters. |
| Button text in product lists | Replaces "Add to cart" on products that must be personalized first (default "Personalize"). |
| Remove data on uninstall | Deletes templates and settings when the plugin is deleted. Orders are never changed. |
Products > Personalization. A template is the form customers fill in. Template options: name (admin only), title on the product page, optional (customers tick the title to open the form; otherwise the form is always open), block offensive words, live preview, active. Use Copy to start a new template from an existing one.
Field options:
| Option | Text field | Monogram |
|---|---|---|
| Label, placeholder, help text | yes | yes |
| Maximum characters (1-200), lines (1-4) | yes | 1-3 letters by style |
| Allowed characters: letters/numbers/symbols, basic punctuation, letters only, numbers only | yes | letters |
| Capital letters only | optional | always |
| Fonts (customers choose; the first is the default) | yes | yes |
| Monogram styles: Classic (first, LAST, middle), Block, Circle, Single letter | - | yes |
| Positions on the image: center, top, bottom, upper third, lower third | yes | yes |
| Finish (preview colour): engraved dark/light, gold, silver, black ink | yes | yes |
| Text size 50-150 % | yes | yes |
| Price: free, fixed, per character (with free characters) | yes | yes |
| Required | yes | yes |
The positions are areas of the product image (center: the middle 56 % x 20 %; top and bottom: the upper and lower bands; upper and lower third). Use product photos where the engraving area sits in one of them.
Amounts are entered like product prices (with or without tax, as in WooCommerce > Settings > Tax). The fee of one item is added to the product price after sale prices and taxed with the product's tax class. Spaces and line breaks are never charged. Example: per character $0.50 with 3 free characters, "Happy Birthday" = 13 characters - 3 = 10 x $0.50 = $5.00. Products with measured quantities (decimal quantities such as 2.5 m) pay the fee once per cart line.
kv_pp_product_types for more). Category templates never apply to virtual products; choose a template on the product to personalize one.The cart (block and classic), mini cart and checkout show each field ("Engraving: Happy Birthday (Great Vibes, Top)") and the fee per item; the line price includes the fee. Quantities can be changed in the cart. The order confirmation, My Account, the order e-mails and the admin order screen show the same rows (order item meta). "Order again" keeps the personalization.
WooCommerce > Personalization sheet lists the personalized lines of open orders (Processing, On hold) with the full specification: text in its font, monogram as engraved and as typed, font, style, position and finish.
The order screen has a Personalization box with the same data and a link to the sheet of that order.
kv_pp_templates. Product choice: product meta _kv_pp_template (empty = category, none, or a template id). Category template: term meta kv_pp_template.kv_pp = set_id, set (template snapshot), values (field id => t, fo, st, p), fee (one item), hash._kv_pp (same structure as the cart line plus per_line) and _kv_pp_done (timestamp). Order meta _kv_pp_has = yes. All through the order CRUD (HPOS).Each cart item has extensions["kv-product-personalizer"]: personalized, template, fields (id, label, text, font, style, position), fee, fee_per_line. Add a personalized item:
POST /wp-json/wc/store/v1/cart/add-item
{ "id": 123, "quantity": 1,
"kv_product_personalizer": { "on": true, "values": { "name": { "t": "Robin", "fo": "playfair", "p": 0 } } } }
Field ids come from the template; fo = font key, st = monogram style key, p = position index. A product with a required template is refused (HTTP 400) without this data.
| Hook | Type | Use |
|---|---|---|
kv_pp_product_template | filter | Change the template of a product (array( id, set, active ) or null). |
kv_pp_product_types | filter | Product types that can be personalized (default simple, variable). |
kv_pp_fee_per_line | filter | Charge the fee once per line (default: measured quantities). |
kv_pp_sheet_open_statuses | filter | Order statuses listed as open on the production sheet. |
No. The fee is computed on the server from the template and the text; every add to cart (product form, AJAX, Store API) is checked again.
Playfair Display, Cormorant Garamond, Cinzel, Montserrat, Great Vibes, Alex Brush, Pinyon Script and Dancing Script (SIL Open Font License 1.1; files and licences in assets/fonts), plus Georgia, Times New Roman, Arial and Courier New. Fonts download only on products that use them.
Coupons apply to the whole line price, which includes the fee. Sale prices apply to the product price only; the fee is added afterwards.
Carts and orders keep the template as it was when the item was added.
It is tested with Twenty Twenty-Five (block theme) and the classic shortcode cart and checkout. Any theme that uses the WooCommerce add-to-cart form and product gallery works.
No. Nothing changes in the checkout form.
Yes. A measured line (for example 2.5 m) carries the personalization and pays the fee once per line.
They are never accepted, so no markup can reach e-mails or documents.
The form disappears and products are sold without personalization. Lines already in carts keep their personalization and fee; orders are never changed.
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.
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.
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.