Theme settings
Every settings group in config/settings_schema.json, which appears under the gear icon in the theme editor, and the code that reads it.
The theme editor writes setting values to config/settings_data.json. Do not edit that file by hand, because the theme
pull workflow overwrites it.
Read a setting in Liquid as settings.<id>.
Groups
| Group | Settings | Owner |
|---|---|---|
| SEO - Page Titles | 20 | Plug in SEO app |
| SEO - Meta Descriptions | 17 | Plug in SEO app |
| SEO - Exclusions | 1 | Plug in SEO app |
| SEO - Structured Data | 4 | Plug in SEO app |
| Brand | 4 | Prestige |
| Colors | 21 | Prestige |
| Typography | 6 | Prestige, plus medispa_fml |
| Animation | 4 | Prestige |
| Search | 1 | Prestige |
| Rewards Tiers | 36 | Custom |
| Products grid | 6 | Prestige |
| Products | 39 | Prestige, plus the purchase gift settings |
| Cart | 14 | Prestige, plus gift and sample thresholds |
| Social media | 11 | Prestige |
| 7 | Custom | |
| Favicon | 1 | Prestige |
| Development Mode | 1 | Legacy. See the warning below |
| GTM Tracking | 2 | Custom |
| Klaviyo | 12 | Custom |
| Medispa | 20 | Custom |
| Medispa - Terms & Conditions Popup | 2 | Custom |
| PDP - Two Up Section - General Settings | 2 | Custom |
| PDP - Two Up Section - First | 6 | Custom |
| PDP - Two Up Section - Second | 6 | Custom |
| Medispa Deposit | 6 | Custom |
| Medispa PDP - Meet our team | 2 | Custom |
| Popup Manager | 2 | Custom |
| Need Help Finding Something Popup | 15 | Custom |
| Authenticity Widgets | 8 | Custom, Hong Kong specific |
Leave Development Mode off
is_dev_mode, labelled "Access site through BrowserSync?", replaces the styles.css bundle with a script at
/dev/main.js:
{% if settings.is_dev_mode %}
<script type='text/javascript' src='/dev/main.js' defer></script>
{% else %}
{%- render 'vite-tag' with 'styles.css', preload_stylesheet: true -%}
{% endif %}That path belongs to a BrowserSync setup the project no longer uses. Turning the setting on removes the theme's stylesheet and loads a file that does not exist.
All three layouts read it, at about line 310 of each.
Rewards Tiers
The group has four tiers with the same eight settings each, plus four settings for the homepage section.
| Setting | Notes |
|---|---|
tier_N_price_threshold | Cart subtotal that unlocks the tier, in dollars |
tier_N_title | Title used outside the cart |
tier_N_cart_title | Title used inside the cart |
tier_N_image | Tier image |
tier_N_subtitle_desktop, tier_N_subtitle_mobile | Accept {threshold} and {threshold_money} |
tier_N_encouragement_message | Shown while below the threshold |
tier_N_cart_encouragement_message | The same message, inside the cart |
unlock_free_bonus_title, _description, _cta, _link | The homepage Unlock Free Bonus section |
layout/theme.liquid writes these values to window.theme.cartRewardBanner, and src/components/cart-reward-banner/
reads them.
Purchase gift, in the Products group
| Setting | Notes |
|---|---|
enable_product_gift | Master switch, off by default |
product_gift_product | Product list |
product_gift_collection | Collection the shopper chooses from |
product_gift_price_threshold | Dollars |
product_gift_quantity | Units added |
product_gift_explainer_label, _cta_label, _badge_label | Product page wording |
product_gift_modal_title, _modal_description, _skip_cta_label | Gift chooser wording |
layout/theme.liquid writes these values to window.theme.gift_product and
window.theme.labels.product_gift_skip_cta_label, and src/components/purchase-gift-manager/ reads them.
Cart thresholds
These settings are separate from Rewards Tiers and control different wording.
| Setting | Notes |
|---|---|
cart_show_free_shipping_threshold, cart_free_shipping_threshold | Free shipping message |
cart_show_free_sample_threshold, cart_free_sample_threshold, cart_free_sample_collection, cart_free_sample_description | Free samples |
cart_show_free_gift_threshold, cart_free_gift_threshold, cart_free_gift_collection | Free gifts |
cart_gift_message, cart_popup_message, global_popup_title | Wording |
cart_type, cart_enable_notes | Prestige settings |
Medispa
The group holds settings for three separate features.
Live booking availability is a social proof display. Its settings are show_booking_availability,
booking_availability_operating_mode, booking_availability_demo_tick_timer_secs_minimum and _maximum,
booking_timeframe_days, start_date_type, booking_availability_low_threshold, booking_availability_low_copy,
booking_availability_anon_name and booking_availability_user_name.
Booking toasts use show_booking_toasts, booking_toasts_lifespan_seconds,
booking_toasts_timestamp_interval_seconds, booking_toasts_visible_count, booking_toasts_just_now_label,
booking_toasts_copy and booking_toasts_custom_css.
Booking forms use medispa_booking_form_id, medispa_booking_form_id_mobile and medispa_zapier_webhook_url.
booking_availability_operating_mode has a demo mode, which uses the two tick timer settings to generate activity.
Check which mode is selected before you treat the displayed availability as real.
Medispa Deposit
| Setting | Notes |
|---|---|
medispa_deposit_amount | Fallback deposit, dollars |
medispa_pay_in_store_label_price | Fallback pay-in-clinic price, dollars |
medispa_deposit_message | Cart message against a deposit line |
medispa_remaining_amount_line_item_label | Default Remaining Amount |
medispa_remaining_amount_line_item_value_template | Accepts {remaining_amount} |
medispa_deposit_timezone | Asia/Hong_Kong |
layout/theme.liquid writes these values to window.theme.labels.medispa, and
snippets/medispa-calendar-config.liquid adds them to the calendar config. Product metafields override them for each
treatment.
Klaviyo
| Setting | Notes |
|---|---|
enable_offers_popup_pdp | Offers popup on product pages |
klaviyo_popup_id_desktop_pdp, klaviyo_popup_id_mobile_pdp | Form IDs per device |
enable_offers_popup_medispa | The same for Medispa pages |
offers_cta_label_medispa, offers_display_mode_medispa | Trigger wording and style |
klaviyo_popup_id_desktop_medispa, klaviyo_popup_id_mobile_medispa | Form IDs per device |
src/entrypoints/klaviyo-popup-trigger.ts reads these through window.offerPopupConfig. It does nothing unless both
the desktop and the mobile ID are set.
Popup Manager
| Setting | Notes |
|---|---|
enable_popup_manager | On by default. When off, snippets/popup-logic.liquid outputs nothing |
popup_manager_blacklist | One selector,type pair per line. Type is klaviyo or custom. Hides with CSS only |
Known schema problem
config/settings_schema.json contains one setting with an invalid type, which Theme Check reports as a ValidJSON
error:
{ "type": "image", "id": "pluginseo_structuredDataLogo.png", "label": "Logo" }image is not a valid setting type. The valid type is image_picker. The setting belongs to the Plug in SEO app's
structured data group. The theme works with it in place, but do not copy it, and expect Theme Check to keep reporting
it.
Related
- Metafields and metaobjects covers per-product overrides.
- JavaScript globals shows where these values end up in the browser.