What is a Magento Custom Option?
Short answer Magento Custom Options are extra inputs you add to a single product: engraving text, gift wrap, a date, a file upload, radio buttons, checkboxes, a drop-down or a multi-select. They can add to the line price and the SKU without creating new product variants. You set them per product in the admin under Catalog → Products → Customizable Options. When a client only needs personalisation on one SKU, I reach for these before a Configurable Product.
Written by Kishan Savaliya, Adobe Certified Magento & Hyvä developer, 10+ years on the platform
- Add the option in admin under Customizable Options 01
- Pick one of 10 input types 02
- Add option values with label, price, sku and price_type 03
- Frontend renders inputs on the PDP and threads them into the cart 04
- Order item stores option JSON; invoice + PDF inherit it 05
Most common mistake Using Custom Options instead of Configurable Products
Five steps from admin config to order line
A custom option travels from the admin product page to the product page, into the cart and onto the order. None of it needs code.
-
01
Add the option in admin under Customizable Options
I open Catalog → Products, edit the product, expand the Customizable Options section and click Add Option. The option belongs to that one product. It is not an attribute, so it never shows up in layered navigation or search filters. You can add as many options as you need and drag them into order. If several products need the same option, Import Options copies them from another product.
-
02
Pick one of 10 input types
There are 10 input types in four groups: Text (Field, Area), File, Select (Drop-down, Radio Buttons, Checkbox, Multiple Select) and Date (Date, Date & Time, Time). I match the type to the data: Field for engraving text, File for "upload your artwork", Drop-down for gift-wrap colour, Date for a delivery or event date. Each type has its own settings, such as max characters for text and allowed extensions and image size for files.
-
03
Add option values with label, price, sku and price_type
Select-type options get one row per choice. Each value has a title ("Red ribbon"), a price, a price type of
fixedorpercent, an optional SKU ("-red") and a sort order. Text, File and Date options have a single price and SKU on the option itself. The options are stored incatalog_product_optionand the choices incatalog_product_option_type_value, with prices and titles in their own tables. -
04
Frontend renders inputs on the PDP and threads them into the cart
On the product page each option renders as the matching form control and is validated in the browser. On Add to Cart the choices are saved on the quote item. The mini-cart, cart and checkout summary list the chosen options under the product name, the line price includes the option prices, and the SKU on the order line has the option SKUs appended to the product SKU.
-
05
Order item stores option JSON; invoice + PDF inherit it
When the order is placed, the selections are saved as JSON in the
product_optionscolumn ofsales_order_item. The order email, invoice, shipment and credit memo PDFs read the option labels and values from there, so you don’t need to touch the sales templates. Refunds and partial shipments work as normal.
Four scenarios where Custom Options are the right tool
Custom options work best for personalising a single SKU. These are the four jobs I use them for most.
-
Engraving, monogram, or personalisation text
A Field option on jewellery, gifts or electronics is the most common case I set up. The customer types the engraving text on the product page, you add a flat fee with a
fixedprice type, and the text shows on the order line so the workshop knows exactly what to engrave. No extra SKUs, and stock stays on the one product. -
Gift wrap, rush delivery, or paid upsells
A Drop-down or Radio option lets the customer choose "Gift wrap" or "Rush delivery" right on the product page, with the extra charge added to the line. It is built in, works on mobile, and the add-on shows on the order. The catch is that options are per product, so for a whole catalogue I use Import Options or a small script. I try this before installing a separate upsell extension.
-
Print-on-demand "upload your artwork"
Print shops (business cards, banners, T-shirts) need the customer’s design file before they can produce anything. A File option with a short list of allowed extensions (jpg, png, pdf) takes the upload on the product page. The order stores the file reference and the production team downloads it from the admin order view. Keep the extension list tight: never allow exe, zip or svg.
-
Date-bookings for rentals, salons, catering
A Date or Date & Time option on a service product lets the customer tell you when. Party rentals ask for a delivery date, salons for an appointment, caterers for an event date. It only captures the date: there is no availability calendar and nothing stops two people booking the same slot. If you need real availability for rooms or classes, use a proper booking extension instead.
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_typeset to eitherfixed($5 flat) orpercent(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.
Where Custom Options sit in the wider Magento catalog model
Five neighbour concepts most readers want to look at next. Click through for the full deep-dive.
-
What is a Configurable Product
Real variant SKUs, size, colour, fabric, with per-variant stock, pricing, search facets, and URLs. The right tool when you need true variants, not just personalisation.
Read the definition -
What is a Magento Bundle Product
Kit-style product with option groups (pick 1 case + 1 charger + 1 cable). Bundles are option-driven like custom options, but each option points to a real child SKU.
Compare with bundles -
What is a Magento Attribute Set
Group of product attributes that defines a product type (shoes, books, electronics). Different concept from custom options, attributes are reusable, indexable, filterable.
See attribute sets -
Magento extension development
Custom modules that extend custom options, per-value inventory, tax rules per option, "share options across products", admin UI tweaks. Fixed-price builds.
See the service -
Hire a Magento developer
Need someone to wire up complex custom options, engraving workflows, file-upload security, multi-step bookings, without breaking inventory or tax? Adobe-Certified, 10+ years on the platform.
Hire me
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 Import Options 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 Allowed File Extensions 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 Maximum File Size to a sensible cap (10 MB for most use cases; 30 MB only for print-shop artwork). (3) On the server, confirm thatpub/media/custom_options/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.
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.