Skip to content

Custom option

Custom option adds shopper-entered personalization to the Product purchase area. Each field travels with the item added to the cart. It does not change the product price, inventory, or SKU.

Nine input types are available: Single-line text, Multi-line text, Buttons, Checkboxes, Color picker, Date picker, Dropdown, File upload, and Swatches.

Choose Custom option when you need to position fields on a product template, collect separate values such as an engraving name and a gift message, require an answer, or collect choices and files as well. Use Single-line text or Multi-line text for written notes. Both types can also be optional.

For the same optional text note across products, especially when shoppers should enter it inside the quick-view dialog, use Theme settings → Product note. It shares one configuration between the full product page and quick view. It cannot appear only in quick view or require an answer.

ComparisonCustom option text content blockGlobal Product note
Configuration scopeThe product template’s Product settings; products using that template share its fieldsShared Theme settings, with per-product scope controlled through custom.product_note
Text fieldsSeveral fields with separate names, positions, help text, and required settingsOne optional note with a shared label, character limit, and single-line or multi-line setting, above the purchase buttons
Full product pageShows the current template’s fields. The Product content purchase card and mobile purchase bar submit the same inputsShows the same note according to the main switch and product scope
Quick view and direct quick-addDo not show these template fields. Set custom.pawly_customization to True so quick-purchase entries lead to the product pageOrdinary products can collect it in quick view. Direct quick-add has no note input and can skip it

The two product metafields are not interchangeable. custom.product_note controls only global note visibility. custom.pawly_customization sends personalized products from quick-purchase entries to the full product page. Adding Custom option still requires the latter flag; enabling a global note does not replace it.

Product notes in Product content is information provided by the merchant, not shopper-entered notes. The cart’s order note describes the whole order and is not tied to one item.

  1. In Shopify admin, open Online Store → Themes and open the theme editor for the theme you want to change.
  2. Select the product template, then open Product → Add block → Custom option.
  3. Move the content block near the variant picker and purchase buttons.
  4. Choose Option type, enter a unique Option name, and write a clear Option label.
  5. Configure the relevant limits, save, and complete the product-level setup below.

Use different product templates when different products need different fields. A field added to a shared template appears for products using that template.

  1. Choose Single-line text and set Option name to “Pet name.”
  2. Set Option label to “Name to engrave,” enable Make required, and set Maximum text length to 20.
  3. Create a product metafield definition with namespace and key custom.pawly_customization and type True or false.
  4. Set that field to True on every product requiring personalization, then save each product.
  5. On the storefront, check a product card and quick-purchase entry: they should lead to the full product page for that product.
  6. Enter a name, change a variant, add the item to the cart, and check that the name stays attached to the correct line.

To create the definition, open Settings → Metafields and metaobjects (shown as Custom data in some admin layouts), choose Products, and add a definition. Shopify explains creating custom definitions and setting product values.

SettingDefaultOptionsWhat it does
Option typeSingle-line textSingle-line text; Multi-line text; Buttons; Checkboxes; Color picker; Date picker; Dropdown; File upload; SwatchesChoose how shoppers provide this value. Only settings relevant to that input type affect it.
Option nameEmptyTextUse a unique name for the value shown with the cart item and order. Do not start with _. If empty, Option label is used. Square brackets are changed to parentheses.
Option labelPersonalizationTextWrite the customer-facing field label. Keep it distinct from other personalization and note fields.
Help textEmptyTextExplain what to enter, choose, or upload.
Make requiredOffOn / OffRequire a value in the theme’s purchase flow. Checkboxes require at least one selection; Color picker already has a default color.
ChoicesEmptyMultiple linesFor Buttons, Checkboxes, Dropdown, or Swatches, enter one choice per line. Swatches can use Label|#hex.
PlaceholderEmptyTextGive a short input hint for text fields. A hint is not submitted as the shopper’s answer.
Maximum text length20020–500; step 10Limit Single-line text and Multi-line text to this many characters.
Minimum selections0NumberSet the minimum number of checkboxes. Zero adds no minimum; Make required still requires at least one.
Maximum selections0NumberSet the maximum number of checkboxes. Zero means no maximum. Do not set it below the required minimum.
Earliest date: days from today0NumberSet the earliest date as the shopper’s local today plus this many days. Negative values are treated as zero.
Latest allowed dateEmptyTextOptionally set the latest date as YYYY-MM-DD. It must not be earlier than the earliest allowed date.
Accepted file types.jpg,.jpeg,.png,.pdfTextFor File upload, enter comma-separated file extensions or file types. Shopify still performs its own upload validation.
Maximum file size (MB)101–20; step 1Set the theme’s browser-side size limit for one file. This is not a guarantee of Shopify’s accepted upload size.
Upload stylePurplePurple; GrayFor File upload only. Purple uses the theme accent; Gray uses a neutral gray background and dark gray button. Set each upload block independently.
Default color#000000ColorSet the initial hex color for Color picker. This does not select a stock-managed product variant.
Swatch shapeCircleCircle; Square; RectangleChoose the shape of Swatches. It does not change the submitted choice.

For color swatches, put one choice on each line, such as Lavender|#cbbbe7 and Sage|#a9bda4. The choice label, rather than the hex value, is saved with the item.

For a material image, upload a PNG to Content → Files named product-option-option-name-choice.png, using lowercase words and hyphens. For Option name “Paper style” and choice “Lined,” use product-option-paper-style-lined.png. A square image of at least 120 × 120 px is recommended. The image takes priority over the color; a choice without either still has its text label.

For File upload, the file is sent when the shopper adds the product to the cart. Selecting a local file alone does not mean it has uploaded. Each upload content block accepts one file; add differently named content blocks for several files.

After a file is selected, its item shows the name and size. Images that can be previewed also show a thumbnail; other files and images that cannot be previewed keep the icon. Select the thumbnail, file name or Change to choose a replacement. Select the round close icon in the thumbnail’s top-right corner to clear the selection (its tooltip reads Remove file). The thumbnail confirms the selected photo; it does not change the sample finished artwork shown on the product page.

Selected image on a phone, with its thumbnail, name, size, Change and Remove file controls

To change the upload field’s style, return to its Custom option under Product and confirm Option type is File upload. Scroll to Upload style, select Purple or Gray, check the preview, then select Save. The default is Purple. This changes only that upload field, rather than other inputs or the store’s overall colors.

Accepted file types in the theme editor, with the Gray upload field

  • Set custom.pawly_customization to True for each personalized product. Adding a template field alone does not tell product cards or other quick-purchase entries that personalization is required. Clear the flag when a product no longer needs personalization.
  • Gift-card quick-purchase entries also lead to the full product page for the separate recipient form.
  • When Product has any Custom option content block, its dynamic checkout control is hidden. Shoppers complete personalization, add to cart, then check out normally.
  • Color picker and Swatches collect a preference. Use actual product variants for options that change stock, price, or fulfillment.
  • A quantity of three on one cart line means three items share the same personalization. For different names, add each separately. Different personalization can create separate lines for the same variant.
  • Both methods can collect different information. For example, use “Pet name” for the Custom option’s Option name and “Item note” for Product note’s Note label. If both collect the same message, keep one input. With global notes set to All products, set custom.product_note to False on that personalized product, or exclude it using Selected products (metafield).
  • Do not duplicate the global Note label in Option name on the same product. If Option name is empty, check its fallback Option label. If Note label is empty, check the default Note label in the actual storefront language. Duplicate names trigger a field conflict and block adding from the product page.
  • The Product content purchase card and mobile purchase bar use the main product form, including its chosen files. Variant changes preserve inputs; leaving or refreshing the page may clear them.
  • The cart does not provide an editor for these values. Remove the line and add it again to change personalization. Check order details and any notification templates you rely on; email display can depend on those templates.
  • Some checks, including checkbox counts, relative earliest dates, file-size checks, and duplicate-name checks, need browser scripting. These checks are not a server-enforced business rule.

Pet-name engraving: choose Single-line text, Option name “Pet name,” Maximum text length 20, and Make required on. Set the product customization flag to True. Any engraving charge must already be reflected in a real product or variant price.

Pet portrait upload: choose File upload, Option name “Pet portrait,” Accepted file types “.jpg,.jpeg,.png,.pdf,” Maximum file size (MB) 10, and Make required on. Set the product flag to True and test that the uploaded file link appears with the cart item.

Why can a quick button still skip the fields? Check the product’s customization flag, its assigned template, and the actual quick-purchase entry you are testing.

Do I need Custom option for one optional message? Not always. Use Product note for shared settings and entry inside quick view. Use a text Custom option for a field specific to a product template, a different position, or separate help text, and complete this guide’s quick-purchase setup.

Can shoppers complete Custom option inside quick view? Not currently. The note in quick view comes from global Product note, not from the template’s Custom option. With custom.pawly_customization correctly set, personalized products lead to the full product page. Do not clear the flag to restore quick view, as other personalization could be skipped.

Can a choice add a fee? No. These inputs do not alter the price. Use a correctly priced product or variant for paid options.

Why is the field not visible? Confirm the product uses the intended template and that choice-based fields have real choices.

How do shoppers change a chosen file? Use Change to select another file or the round close icon in the thumbnail’s top-right corner to clear it before adding to cart. Once added, remove the cart line and add it again with the replacement.