Create custom product options
By the end you'll have an option set on one product: custom fields the customer fills in on the product page, with their answers carried through to the cart, the checkout and the order as text details. The price doesn't change, and any theme can display it.
This is the mode to pick when you want engraving text, a delivery date, a logo upload or a "leave a note" field. It's called Text on order, and it's a setting on the option itself. You choose it while you're creating the option, in step 5 below. There's no product-wide switch to find afterwards, and nothing to uncheck.
Build the option set
- Open Optionfier from your Shopify admin and click New option set.
- Fill in Name. This is for you, not your customers, so name it after the product or the job it does.
- In the Product card, click the Connected product field (it reads Select a product until you pick one) and choose Select. Shopify's product picker opens. Pick the product these options belong to. One product per option set, and if that product already belongs to another option set, Optionfier tells you which one.
- In the Options card, click Add option. A picker opens right there: "What kind of option is this?" There's a Search option types box, and the types are grouped into Choice lists (customers pick from choices you define), Customer input (customers type or attach their own value) and Layout & content (headings, paragraphs, dividers and spacers, which collect nothing). Pick Text input and click Continue.

- Step 2 of 2 asks "How should this option appear on the order?" Pick Text on order, which reads "The customer's entry appears as text on the order and never changes the price. Link a product and Optionfier tracks its inventory." The other tile, Pick product…, links the field to a real product so it rides as a priced bundle component, which isn't what you're building here. This is the step that sets the mode, so it's the only one that matters for getting text on the order.
- Fill in Label. That's the name that shows up in the cart and on the order, and it has to be unique inside this option set. Expand Option settings for the rest: Label on product if you want a friendlier name on the storefront, Required to block add-to-cart until it's filled in, Hide option from customers, and Add custom CSS class if you style it yourself.
- Check the option's header reads "Appears as: Text on order". Step 5 already set it, so this is confirmation rather than another switch to flip. If it doesn't, the Appears as dropdown there changes it, and About this mode beside it spells out what each choice means.

- In Sold Out Settings, decide whether to check Apply sold out to the entire option set. Turn it on when every option is a required component and a sold-out one should block the whole product. Leave it off when an option is a nice-to-have.
- The Storefront preview card shows an approximate render of what you've built. It's neutral styling, not your theme's, so treat it as a sanity check on the shape of the form rather than a pixel preview.
- Scroll back up to the Status card, which sits right under Name, and toggle it to Published. Then hit Save in the title bar.
Tracking inventory anyway
Here's the part people don't expect: choosing Text on order doesn't mean giving up inventory tracking.
If your option has choices (a dropdown, radio buttons, pill buttons, a product grid, checkboxes, color or image swatches), each choice row has a Link product button. Link a choice to a real variant and Optionfier watches that variant's stock in the background. The choice goes disabled and reads "Sold out" on its own when the variant hits zero, comes back when you restock, and the variant's inventory gets deducted when the order is fulfilled. Refund the parent line with Restock items checked and the stock comes back.
Single-value options get the same thing in a different shape. A text field, number, date, time or file upload carries one Link product box under the field instead of a per-choice button, so an engraving field can still deduct the blank you're actually consuming.
Linking is optional either way. Two limits: per-choice price overrides aren't available here, so the variant's own Shopify price is used as-is and a linked product shows only its Quantity field. And variants stocked at a third-party fulfillment service can't be linked in this mode, because Optionfier's background inventory tracking needs merchant-managed locations.
This still applies to a hidden option (Hide option from customers). If a hidden option's linked variant sells out, Shopify can refuse the whole checkout instead of naming that one field, since the customer never sees it to be warned.
What the customer sees
The option fields render on the product page wherever you placed the theme block. The customer fills them in, adds to cart, and their answers show up as plain text lines under the product name in the cart, at checkout, and on the order you fulfill. "Engraving Text: Happy Birthday". Nothing indented, nothing extra in the cart, no price movement.
That's the trade. You get a simpler cart that works on every theme without any bundle support, and inventory still stays honest behind the scenes for every choice you linked.

Once saved, Translate in the header opens translation mode for any language your store has.
Go deeper
- Creating Your First Option Set
- Option Types, every input type and what it's for
- Options shown as Text on order and what appears as bundle items vs. text on order
- Conditional Visibility, for options that only appear when another answer calls for them
- Connecting a Product to a Choice
- Refunds for Text on order