Crear temas

Referencia de temas

Generada a partir de las propias reglas del validador, así que no puede apartarse de lo que aceptamos. Apunte su editor a el JSON Schema y tiene todo esto mientras escribe.

Las tablas de abajo se quedan en inglés. Nombran los identificadores que usted escribe, y se generan desde las mismas reglas que validan su tema.

Nodos

Lo que puede dibujar. El `render` de una sección es una lista de estos.

boxA container. Becomes a div, or any layout or landmark tag you name.
textA line of text, in the tag you name: a heading, a paragraph, a label.
richRichtext a merchant wrote, sanitised every time it is drawn.
imgA picture, drawn at the width its role says it will be drawn at: `role` is "main" (the default), "small" for a card or grid, "thumbnail" or "swatch". `mobileSrc` is a different picture for phones, a crop that works on a narrow screen. `priority: true` loads it at once, for the picture at the top of the page; in a repetition only the first one.
linkAn anchor around anything.
eachRepeats its children over a list, under a limit it does not choose.
ifDraws one set of children or another, on a condition.
slotRepeats its children once per repeatable block, with `block` in scope.
iconOne of the storefront's own icons.
moneyAn amount, formatted in the shop's display currency.
componentOne of the components below. The only interactive thing a theme can place.

Componentes

Las partes interactivas. Usted las coloca y las posiciona; no puede escribir una. Las marcadas con slots toman su disposición de su tema.

product-cardThe ready-made card: picture, sale label, title and price; `showPrice: false` hides the price, `showVendor: true` shows the maker. Built from nodes over the product; build your own from `item.url`, `item.image`, `item.price` and the parts above for a quick add, swatches or a quick view.
add-to-cartThe button, with a quantity field in front of it. Inside a product-form it adds whatever is chosen; elsewhere pass `variantId`. Pass `quantity: false` for a one-press add, `size: "small"` for a compact button beside a row, and `label` to change the words.
variant-pickerThe options, one group per axis (Size, Colour), with what cannot be bought greyed out. Inside a product-form. `style: "select"` makes each axis a dropdown; `option` narrows it to one axis. Buttons are radio inputs, so style the chosen one with `input:checked + span`.
custom-optionsThe product's fill-in fields: an engraving, a date, a file, gift wrap, whatever the merchant asked for, each with its extra price. Nothing on a product that asks for none. Any add-to-cart on the page reads it, so it need not sit inside a product-form.
variant-imageA variant's own picture as a small button, for a layout that lists variants as rows; pass `variantId`. Pressed, the product-gallery shows that picture; pressed again, or when another is pressed, the gallery goes back. Inside a product-form the picker does this on its own. Nothing when the variant has no picture.
search-boxThe search field and its suggestions, which appear as the shopper types. `layout` is "header" (an icon that opens a bar, the default), "panel" (a sheet under the header) or "page" (a plain field); `focus: true` puts the cursor in it.
newsletter-formEmail capture, with the shop's own consent wording.
cart-drawerThe ready-made basket: a sheet from the right, opened by the basket icon and by adding something. Its width is the cartWidth token in theme.json. Built from the pieces below; build your own from them for anything else.
paginationNext and previous, for a listing that runs past one page.
priceAn amount with its compare-at and its currency handled.
account-menuSign in, or the customer's own links when they are.
accordionRows that open. You lay out the title and the body; a merchant adds the rows. Slots: title (per block), body (per block).
image-carouselSlides the shopper can move through. You lay out one slide. Slots: item (per block).
popup-panelSomething that opens when pressed. You lay out the button and the panel. `openOn: "hover"` opens it on hover as a menu dropdown does; `span: "full"` hangs it across the whole header, for a mega menu; `plain: true` drops its own border and padding so your content is the panel. Slots: trigger, content.
shop-logoThe shop's own logo, at the size it was uploaded. Pass `src` (a theme setting of type image, say) to place a different one, a white version on a dark bar.
shop-menuThe ready-made menu: dropdowns on hover, or with `layout: "panel"` a button opening a full-width sheet with your `foot` slot under the columns. `trigger: "icon"` drops the word beside the hamburger and sets the button in the same square your other tools use. Built from popup-panel over `shop.menu`; build your own menus from the same, and a phone menu from a sheet with an accordion. Slots: foot.
cart-linkThe basket, and how many things are in it, as a link to the cart page.
product-formHolds which options are picked, for the parts inside it. Pass `product` (the page's `product`, or a list item). Lay out the page, a card or a quick view in its `content`. Slots: content.
product-galleryThe product's pictures, one large with thumbnails under it and a full-screen view. Pass `images` (product.images) and `title`. It moves to the chosen variant's picture (`variant.image`) and back when the choice is cleared. For your own layout, an each over product.images with img nodes.
product-priceThe chosen variant's price, and what it was when it is on sale (an `s`). Inside a product-form.
stock-statusSold out, on backorder, or only a few left, for the chosen variant. Nothing when it is simply in stock.
sheetSomething that opens over the page: `side` is "right" (the default), "left", "bottom" or "center" for a popup. `openOnAdd: true` opens it when something is added to the basket; `label` names it for screen readers. You lay out the `trigger` and the `content`, and style the content's outer box for its width. Slots: trigger, content.
sheet-closeCloses the sheet it sits in. Draws the close icon, or your own `content`. Slots: content.
cart-iconThe basket icon with its count, for a sheet's trigger.
cart-quantityFewer and more for one line. Pass `line: { get: "line.id" }` and `quantity: { get: "line.quantity" }`.
cart-removeTakes one line out of the basket. Pass `line: { get: "line.id" }`; `label` overrides the wording, `style: "icon"` makes it the bin.
cart-clearEmpties the basket, after asking once.
discount-formThe discount code field and Apply, with why a code did not apply under it.
checkout-buttonGoes to this shop's checkout, whichever kind it runs. `label` overrides the wording.
search-formA plain search field that sends what is typed to a page as `q`. Pass `action` (a path on the shop, the blog's search say), `value`, `placeholder` and `label`.
login-formSigning in with a six-digit code sent by email. On the login template.
register-formCreating an account: name, email, and the marketing question. On the register template.
google-buttonContinue with Google, when the shop offers it (draws nothing otherwise). `label` overrides the wording.
currency-switcherThe currencies this shop actually sells in, as a ready-made control. For your own, place currency-button over `shop.currencies`.
language-linkThis page in another language. Pass `code` (a `shop.languages` item's code) and lay out what the shopper presses in `content`: the name, a flag. Slots: content.
currency-buttonShows the shop's prices in another currency. Pass `code` (from `shop.currencies`) and lay out what is pressed in `content`. Slots: content.
noticeA message screen readers announce: `tone` is "info" (the default) or "alert" for something that went wrong. Lay out the message in `content`. Slots: content.
language-switcherThe languages this shop is published in, as a ready-made control. For your own, place language-link over `shop.languages`.
social-linksThe shop's own accounts, as icons.
blog-post-listThe ready-made list of posts, with its paging, built from nodes over `plugin.list`. `columns` is posts to a row, "1" (the default, each post across the width) to "3". On the blog's list template only.
blog-sidebarThe blog's sidebar: search, categories, recent posts, as the merchant set it up.
blog-post-bodyThe post itself: breadcrumbs, title, meta line, cover, body, gallery, tags and share links. On the post template only.
blog-post-navPrevious and next post.
blog-related-postsPosts related to this one. `heading` overrides the wording.
blog-related-productsProducts the post is about. `heading` overrides the wording.

Cabecera y pie

En la cabecera y el pie, el menú, los idiomas y las monedas del comerciante están en ámbito bajo `shop`. Disponga un menú con nodos normales y popup-panel (al pasar el ratón, a lo ancho de la cabecera, o simple para que su caja sea el panel), un menú de móvil con un sheet y un accordion, y la elección de idioma o moneda con language-link y currency-button. shop-menu es el menú ya hecho, construido exactamente con estos.

shop.menuThe main menu the merchant built, for an `each`. Every item has label, url (empty for a heading), hasChildren, hasPanel, children (the same shape, up to three levels down when an entry shows its subcategories), mega (true when the merchant asked for a mega menu: draw each child as a column) and panel (image, link, html) when the merchant added a promo.
shop.languagesThe languages the shop publishes: code, name (in its own language), current. For language-link.
shop.currenciesThe currencies the shop sells in: code, current. For currency-button.
shop.labels.menu, shop.labels.seeAllThe words a menu needs, in the shopper's language.

Productos

En la página de producto `product` está en ámbito, y cada lista de productos que pide una sección (novedades, una categoría, relacionados) tiene la misma forma. Disponga una página o una tarjeta con nodos normales; envuelva lo que cambia con la talla o el color elegidos en un product-form, con variant-picker, product-price, stock-status y add-to-cart dentro. product-card es la tarjeta ya hecha, construida con nodos sobre estos campos.

title, handle, vendorAs the merchant entered them.
urlThe product's address, for a link.
imageThe first picture, for an img. `images` is all of them, for an each or a carousel.
price, compareAtThe lowest price, and what it was; draw them with `money`.
onSale, soldOutTrue or false, for an `if`: a sale label, a sold-out badge.
optionsThe option axes, each a name and its values: Size S M L. What variant-picker draws.
variants[].imageThe combination's own picture, when the merchant gave it one; the gallery shows it while that variant is chosen.
specsOn the product page: the attributes the shop lists there, each a code, label, values and filterable. Empty when the shop lists none.
variantsEvery variant: id, title, options, price, sku, available, stock (sold_out, backorder, low, in_stock) and, on the product page, lowText ("Only 3 left" in the shopper's language).
single, multi, relatedOn the product page: the lone variant when there is only one, whether there are several, and the related products as list items.
descriptionHtml, shortDescriptionHtmlThe descriptions, for a `rich` node. On the product page.
shop.labelsThe storefront's words in the shopper's language, everywhere: addToCart, soldOut, sale, backordered, options, quantity, viewProduct, noImage, close.

El blog

En las plantillas del blog el plugin pone su página en ámbito como `plugin`: la lista o la entrada, la barra lateral, las opciones de visualización del comerciante y las palabras. Disponga el blog encima con nodos normales y search-form para su búsqueda. Los componentes blog-* son sus piezas ya hechas, construidas exactamente con esto.

plugin.list.postsOn the list page: the posts, for an each. Each has title, url, cover, excerpt, categories (name, url, sep), meta (text, url, sep: the author, date and reading time the merchant chose to show) and hasMeta, hasCategories.
plugin.list.has, plugin.list.emptyWhether there are posts, and what to say when a search or a category has none.
plugin.list.paged, plugin.list.newerUrl, plugin.list.olderUrl, plugin.list.pageTextPaging: whether there is more than one page, the neighbouring pages, and "Page 2 of 5".
plugin.postOn the post page: the same fields as a list post, and html (the body, for a rich node), gallery, tags, share (name, url), trail (the breadcrumbs), previous and next (title, url), related (posts) and products (product-list items, for product-card or your own card), isDraft.
plugin.sidebarsearch (whether to offer it), searchUrl and query for search-form; recent (title, url); categories (name, url, count, indent); tags (name, url); any.
plugin.settings, plugin.labelsThe merchant's display choices (showBreadcrumbs, showPrevNext, showShareButtons, readMoreText) and the blog's words in the shopper's language.

Iniciar sesión

Las páginas de inicio de sesión y de crear cuenta son las plantillas `login` y `register`, con `account` en ámbito. login-form, register-form y google-button son de la tienda, porque manejan quién es alguien; disponga todo lo demás alrededor. Las secciones propias de esas páginas están construidas exactamente con estos.

account.google, account.googleErrorWhether the shop offers Google sign-in, and why the last attempt did not finish, to show when not empty.
account.loginUrl, account.registerUrlThe two pages, each keeping where the shopper was going.
account.labelsThe pages' words in the shopper's language: signIn, whySignIn, codeIntro, firstTime, createAccount, registerIntro, haveAccount, continueWithGoogle, or.

Resultados de búsqueda

La página de resultados es la plantilla `search`, con la consulta y sus resultados en ámbito como `search`. Coloque search-box con layout page para el campo, product-card o su propia tarjeta sobre search.results, y las categorías para cuando no coincida nada. La sección propia de la página está construida exactamente con estos.

search.query, search.hasQueryWhat was searched for, and whether anything was.
search.results, search.foundThe products that matched, for an each (the same shape as any product list, so product-card or your own card), and whether there were any.
search.heading, search.countText"Results for …" or "Search", and "12 products matching …" or "Nothing matched …", in the shopper's language.
search.collectionsThe shop's categories (title, url), somewhere to go when nothing matched.
search.prompt, search.noMatchHelp, search.browseHeadingThe sentences around them: before a search, after one that found nothing, and over the categories.

El carrito

En una cabecera o un pie, y en la página del carrito (la plantilla `cart`), el carrito del visitante está en ámbito como `cart`. Dispóngalo con nodos normales y coloque sheet, cart-icon, cart-quantity, cart-remove, cart-clear, discount-form y checkout-button para lo que hace: un cajón por cualquiera de los lados, una bandeja desde abajo, un popup en medio, o una página de carrito entera. cart-drawer y la sección propia de la página del carrito son los ya hechos, construidos exactamente con estas partes.

cart.itemCountHow many things are in the basket, counting quantities.
cart.emptyTrue when there is nothing in it. For an `if`.
cart.subtotalThe lines added up, before shipping; draw it with a `money` node.
cart.linesThe lines, for an `each`. Each has id, title, variant (or empty), image, url, quantity, unitPrice and total.
cart.discount, cart.discounts, cart.hasDiscountWhat was taken off: the total, and one entry per promotion (name, amount, free) so a shopper can check each.
cart.shipping, cart.freeShipping, cart.needsDeliveryDelivery, and whether there is anything to deliver at all.
cart.tax, cart.taxIncluded, cart.totalTax (included in prices or on top), and what it all comes to.
cart.code, cart.codeErrorThe discount code entered, and why it did not apply.
cart.conversionNote, cart.demoNote, cart.stockNotice, cart.paymentFailedSentences to show when they are not empty: prices shown in another currency, a demo shop, stock that changed, a payment that did not start.
cart.labelsThe cart's words in the shopper's language: title, empty, startShopping, summary, product, quantity, each, subtotal, discount, discountCode, apply, shipping, free, freeOffer, tax, total, checkout, paymentFailed, viewCart, emptyCart, remove, close.

Datos

Una sección declara lo que necesita y la página lo busca antes de dibujar nada, así que dos secciones que pidan la misma lista cuestan una consulta. Un tema no puede escribir una consulta propia.

newest-productsThe most recently added products in the shop.
collection-productsProducts in a category, or the newest if none is chosen.
collectionsThe shop's categories.
product-variantsThe variants of the product on this page.
product-imagesThe pictures of the product on this page.
related-productsProducts that go with the one on this page.
metaobjectsEntries of a custom content type your theme defines.
cart-linesEmpty on purpose: pages are drawn once for every visitor. The basket is in scope as `cart` in the header and footer, which are drawn per visitor.
menuA named menu the merchant built.
blog-postsThe blog's public posts, newest first; `category`, `tag` (handles) and `featured` narrow them. Empty without the blog plugin.
blog-categoriesThe blog's categories, as name, handle and url.

Design tokens

Su theme.json fija los valores por defecto; el comerciante puede cambiar cualquiera. Léalos en CSS como la propiedad personalizada que aparece junto a cada uno.

colorBgPage background. CSS: var(--shop-bg). Default: #ffffff
colorFgText. CSS: var(--shop-fg). Default: #0f1115
colorAccentAccent. CSS: var(--shop-accent). Default: #0b0f19
colorMutedMuted text. CSS: var(--shop-muted). Default: #6b7280
fontHeadingHeading font. CSS: var(--shop-font-heading). Default: "Inter", system-ui, sans-serif
fontBodyBody font. CSS: var(--shop-font-body). Default: "Inter", system-ui, sans-serif
fontSizeBodyBody text size. CSS: var(--shop-font-size-body). Default: 16px
fontSizeHeadingLargest heading size. CSS: var(--shop-font-size-heading). Default: 60px
radiusCorner radius. CSS: var(--shop-radius). Default: 0
maxWidthContent width. CSS: var(--shop-max-width). Default: 1200px
cartWidthCart drawer width. CSS: var(--shop-cart-width). Default: 30rem
controlRadiusButton and field radius. CSS: var(--shop-control-radius). Default: 0
btnBgButton background. CSS: var(--shop-btn-bg). Default: #000
btnFgButton text. CSS: var(--shop-btn-fg). Default: #fff
btnBorderButton border. CSS: var(--shop-btn-border). Default: #000
imageMainMain image, desktop. CSS: var(--shop-img-main). Default: 50vw
imageMainMobileMain image, mobile. CSS: var(--shop-img-main-mobile). Default: 100vw
imageSmallGrid image, desktop. CSS: var(--shop-img-small). Default: 25vw
imageSmallMobileGrid image, mobile. CSS: var(--shop-img-small-mobile). Default: 50vw
imageThumbnailThumbnail, desktop. CSS: var(--shop-img-thumbnail). Default: 96px
imageThumbnailMobileThumbnail, mobile. CSS: var(--shop-img-thumbnail-mobile). Default: 72px
imageSwatchSwatch, desktop. CSS: var(--shop-img-swatch). Default: 48px
imageSwatchMobileSwatch, mobile. CSS: var(--shop-img-swatch-mobile). Default: 40px
checkoutSummarySideOrder summary on the. CSS: var(--shop-checkout-direction). Default: row
checkoutSummaryBgSummary background. CSS: var(--shop-checkout-summary-bg). Default: #FFFFFF
checkoutSummaryFgSummary text. CSS: var(--shop-checkout-summary-fg). Default: #000000
checkoutFontHeadingCheckout heading font. CSS: var(--shop-checkout-font-heading). Default: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
checkoutHeadingSizeCheckout heading size. CSS: var(--shop-checkout-heading-size). Default: 24px

Raíces de expresión

Dónde puede empezar una ruta `get`. Cuáles de estas están en ámbito depende de dónde esté: `block` dentro de un slot, `item` (o como lo haya llamado) dentro de un each.

settings · theme · block · shop · page · product · collection · cart · search · account · plugin · customer · data

Etiquetas

En qué se pueden convertir una caja y un nodo de texto.

box

div · section · header · footer · nav · main · aside · article · ul · ol · li · figure · figcaption

text

p · h1 · h2 · h3 · h4 · h5 · h6 · span · strong · em · small · blockquote · label

Iconos

El conjunto propio de la tienda. Un nodo icon nombra uno de estos.

search · account · bag · bin · menu · close · chevron · clock · trend · folder · delivery · guarantee · returns · instagram · facebook · x · tiktok · youtube · pinterest · linkedin

Límites

Techos, todos ellos aburridos. Un paquete se lee en cada petición, así que su tamaño es tanto un presupuesto de velocidad como de seguridad.

sectionsPerBundle60
fieldsPerSection40
blocksPerSection12
fieldsPerBlock20
templateSections40
metaobjectTypes40
fieldsPerMetaobject30
cssBytes200,000
sectionCssBytes40,000
bundleBytes2,000,000
dataRequestsPerSection6
customSections30
customSectionBytes60,000
Referencia de temas · WhizzyCommerce