Chat on WhatsApp
Magento glossary

What is a Magento Custom Option ?

Magento Custom Options are per-product extra inputs — engraving text, gift wrap, date picker, file upload, radio buttons, checkboxes, dropdown, multi-select — that adjust the cart-line price, SKU suffix, and weight without spawning new product variants. Set per product in admin under Catalog → Product → Customizable Options. The cheaper, lighter alternative to Configurable Products when you only need one-off personalisations on top of a single SKU.

How it works

Five steps from admin config to order line

Custom Options thread cleanly from the admin product page, through the storefront PDP, into the cart, and onto the final order — without writing any code.

  1. 01

    Add the option in admin under Customizable Options

    In the Magento admin, open Catalog → Products, edit a product, scroll to the Customizable Options tab, and click Add Option. Custom Options live on the product itself — they are not a site-wide attribute and they do not appear in catalog search filters. You can add as many options per product as you need, and reorder them with sort_order.

  2. 02

    Pick one of 11 input types

    Magento ships 11 input types grouped into four families: Text (Field, Area), File (File upload), Select (Drop-down, Radio Buttons, Checkbox, Multiple Select), and Date (Date, Date & Time, Time). Pick the right one for the data shape — e.g. Field for engraving, File for "upload your artwork", Drop-down for gift-wrap colour, Date for booking. Each type has its own validation rules (max length, allowed extensions, min/max date).

  3. 03

    Add option values with label, price, sku and price_type

    For Select-family inputs (drop-down, radio, checkbox, multi-select) you add a row of values per choice. Each value has a label ("Red ribbon"), a price delta ($3.00), a price_type of either fixed or percent, an optional sku suffix ("-red"), and a sort_order. Text/File/Date options carry a single price + sku on the option itself, not on values. Stored in catalog_product_option_value.

  4. 04

    Frontend renders inputs on the PDP and threads them into the cart

    The PDP template renders each option as the matching HTML control (input / textarea / file / select / date picker), validates client-side, and on Add-to-Cart serialises the chosen values into the quote item. The mini-cart, cart, and checkout summary show the option labels under the product name, the cart-line price reflects all option price deltas, and the final SKU on the order line concatenates the product SKU with each value sku suffix.

  5. 05

    Order item stores option JSON; invoice + PDF inherit it

    Once the order is placed, each line item persists the option selections as JSON in the product_options column on sales_order_item. The standard order confirmation email, invoice PDF, shipment PDF, and credit memo PDF all pull option labels + values from that JSON automatically — you do not customise the sales templates to support custom options. Refunds and partial shipments work unchanged. Compatible with B2B, multi-source inventory, and Hyvä storefronts.

When to use

Four scenarios where Custom Options are the right tool

Custom Options shine for personalisation on top of a single SKU. These four cases are the bread-and-butter wins.

  • Engraving, monogram, or personalisation text

    A Text Field option on a jewellery, gifts, or electronics product is the textbook use case. The customer types the engraving text on the PDP, you charge a flat $10 fee via price_type=fixed, and the engraving copy lands on the order line so your workshop sees exactly what to engrave. Cleaner than spawning 26 SKUs per letter, and inventory stays parent-level.

  • Gift wrap, rush delivery, or paid upsells

    A Drop-down or Radio option on each product (or via an extension that copies the option to every product) lets the customer tick "Gift wrap +$5" or "Rush delivery +$15" without leaving the PDP. Cheap, well-supported, mobile-friendly, and the upsell revenue flows straight into the order line. Use this before reaching for a heavier upsell extension — native custom options handle 80% of the use cases.

  • Print-on-demand "upload your artwork"

    Printing services (business cards, banners, T-shirts) need the customer to upload a design file before the order can be produced. A File Upload custom option, configured with a whitelist of safe extensions (jpg, png, pdf, ai, eps), captures the file at PDP-time. The order line stores the file path and your production team picks it up from the admin order view. Tighten the whitelist — do not allow .exe / .zip / .svg.

  • Date-bookings for rentals, salons, catering

    A Date or Date & Time option on a "product" representing a service slot lets you sell time. Party rentals pick a delivery date, salons pick an appointment slot, caterers pick an event date. Cheaper to wire up than a full booking extension if you only need basic date capture, no calendar availability, no double-booking prevention. For real calendar logic — rooms, classes, real bookings — reach for a dedicated bookings extension instead.

Common mistakes

Three traps that turn Custom Options into a support nightmare

Every "our stock counts are wrong" / "tax is off" / "we got hacked through uploads" support ticket I have triaged on Custom Options traces back to one of these three.

  • Using Custom Options instead of Configurable Products

    Custom Options modify the cart-line price + SKU suffix, but they do not create real variant SKUs in the catalog. If you sell a t-shirt in S/M/L/XL and you want per-size stock tracking, per-size search facets, per-size pricing rules, and per-size product URLs, you need Configurable Products. Custom Options are for one-off personalisation on top of a single SKU — not for managing real variants. Pick the wrong tool and your stock counts go wrong on day one.

  • Forgetting price_type=fixed vs percent

    Every option value has a price_type set to either fixed ($5 flat) or percent (5% of parent price). Get this wrong and the option misbehaves under cart rules and tax. Percent options compound against catalog discounts and recompute when the parent price changes — useful for premium fabric upgrades but surprising on flash sales. Fixed options stay constant. Always document each option's price_type in the option label or the spec sheet so QA tests the right scenarios.

  • Leaving file uploads with no extension whitelist

    A File Upload option that accepts any extension is a security incident waiting to happen — customers can upload .php / .phtml / .svg / .html files that, if your media folder is misconfigured, execute server-side. Always set the Allowed File Extensions admin field to a tight whitelist (jpg, png, pdf, ai, eps), set a sane max file size (10 MB is plenty), and double-check that pub/media/custom_options/ has no PHP execution. For high-risk stores, add antivirus scanning on the upload path.

FAQ

Magento Custom Options — frequently asked questions

  • Custom Options vs Configurable Products — when do I pick which?
    Pick Custom Options when the variation is a one-off personalisation on top of a single SKU — engraving text, gift wrap, file upload, rush delivery, date booking — and you do not need per-variant stock or search filters. Pick Configurable Products when you sell real variants (size, colour, fabric) with per-variant stock counts, per-variant pricing, per-variant URLs, and per-variant filtering on category pages. Rule of thumb: if your warehouse needs to track stock separately per variation, you need Configurable. If the workshop just adds a label/engraving/wrap to the same SKU before shipping, Custom Options is the right call.
  • Can I track inventory per custom option value?
    Not natively. Magento Custom Options only track inventory at the parent product level — the option values just modify the price, SKU suffix, and weight. If you sell "T-shirt + size dropdown" with custom options and you take a small-only order, Magento happily decrements the parent product stock without knowing you ran out of Small specifically. For per-value stock tracking you either (a) use Configurable Products with proper child SKUs, (b) install a paid "stock per option" extension, or (c) build a custom module that hooks the stock check observer. The right answer for ~95% of cases is option (a) — use Configurable Products.
  • Do custom options affect catalog search facets?
    No. Custom Options are not indexed by the catalog search engine (MySQL or OpenSearch) — they live on the product record but they do not contribute to layered navigation filters, search relevance, or facet counts. If you want the option to be filterable on category pages ("show me only Red items"), it needs to be a Product Attribute marked Filterable in admin, not a Custom Option. This is a frequent surprise during migration: stores using custom options for "colour" lose layered-nav filtering and have to refactor to attributes.
  • Can I share custom options across many products at once?
    Not directly out of the box. Each product carries its own copy of custom options in the database — there is no "global custom option set" concept. There are two workarounds: (1) Magento ships an <em>Import Options</em> button in the admin product edit screen that copies options from one product to another, which works fine for a handful of products but does not stay in sync after import. (2) Several free and paid extensions add "shared option templates" that stay linked, so editing the template propagates to every product using it. For 5+ products with the same options, install one of those extensions or build a small custom module.
  • How does Hyvä Themes handle Custom Options?
    Hyvä renders custom options natively — text inputs, drop-downs, radios, checkboxes, file upload, date pickers — using Tailwind + Alpine.js components. The PDP template ships with full custom-options support out of the box, including validation, price update on selection, and serialisation into the cart. Date / Date & Time options use Alpine-friendly native HTML date inputs by default, which is mobile-friendly and accessible. If you have a heavily customised Luma PDP for options, expect to port the styling but not the logic. The Compatibility Module covers any paid custom-option extensions you already run.
  • How do I make file uploads safe?
    Three layers. (1) In admin, set the <strong>Allowed File Extensions</strong> field on every File Upload option to a tight whitelist — typically jpg, png, pdf, ai, eps; never accept .php, .phtml, .html, .svg, .exe, .zip, .js. (2) Set <strong>Maximum File Size</strong> to a sensible cap (10 MB for most use cases; 30 MB only for print-shop artwork). (3) On the server, confirm that <code>pub/media/custom_options/</code> is configured in nginx/Apache to never execute PHP — files served as static binaries only. For high-risk stores (B2C with public uploads), add an antivirus scanner (ClamAV) on the upload directory and quarantine flagged files before they reach the order workflow.
Custom-options build

Need engraving, file-upload, or booking options wired up safely?

Send your product spec — I will reply with a written build plan, fixed-price quote, file-upload security review, and earliest start date. 24-business-hour turnaround.