Customising a Shopify theme beyond the editor
The Shopify theme editor only shows the settings a theme’s developer chose to expose in each section’s {% schema %} file. Once a request falls outside that scope — conditional layout, section-specific behaviour — it means editing Liquid, JSON or CSS directly, outside the visual editor.
How I approach a customisation request
-
Check whether the setting already exists
Before writing any code, I check whether what’s wanted is already reachable in the editor on a recent Online Store 2.0 theme — a lot of requests turn out to be an existing setting nobody found.
-
Work out what’s actually blocking it
If nothing is exposed, I check whether the logic is achievable in plain Liquid (conditional display, section structure, content based on a metafield) or whether it depends on data Liquid can’t reach on its own.
-
Edit the theme locally
I work with the Shopify CLI locally or through the theme’s GitHub integration, not the online editor, to keep a change history and test before publishing.
-
Separate a theme edit from a mini-app
If the request depends on data Liquid can’t see — a customer’s order history, an external calculation — I say so before quoting: that’s no longer a theme edit, it’s an app calling the Admin API.
-
Test, then publish
I test on a duplicated theme, never the live one, then publish once the result is validated.
What I hear regularly
- I can’t find any setting in the editor to do what I want
- The theme keeps showing the same thing no matter what I change in the settings
- My previous developer edited the theme directly and I don’t know what’s safe to touch now
- I want a section to display differently depending on which customer is logged in
- The agency that built my theme says it’s “not possible”, without explaining why
Why the editor stops where it stops
An Online Store 2.0 Shopify theme is built from Liquid templates, JSON templates describing the sections and blocks of a page, and a {% schema %} file per section that declares which settings appear in the editor. Anything not declared there stays invisible in the customisation panel, even if the underlying logic exists in the theme’s code.
Liquid runs in a sandboxed environment: no direct database access, no arbitrary server-side code execution. That’s exactly why some requests that sound simple — “show different content based on a customer’s order history” — aren’t a theme edit at all: they need a small app calling Shopify’s Admin API and feeding the result back to the page.
Before quoting anything, I work out which side a request falls on: a self-contained Liquid, section-JSON or CSS/JS change limited to the theme; or a job that needs an app or a Shopify Function, which changes the tooling and the scope entirely.
Worth reading next
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.