Aller au contenu

Créer un thème Mozaiq

themes/mon-theme/
├── theme.json          # manifeste + réglages de personnalisation
├── functions.php       # hooks du thème (facultatif)
├── screenshot.svg|png  # aperçu 16:10
├── assets/style.css, assets/theme.js
├── templates/          # layout.php, page.php, post.php, blog.php, shop.php, product.php,
│   │                   # cart.php, checkout.php, thanks.php, account.php, search.php, 404.php
│   └── partials/       # header.php, footer.php, post-card.php, product-card.php…
└── blocks/             # surcharge du rendu d’un bloc : blocks/hero.php…

Thème enfant (recommandé)

php bin/mozaiq theme:new mon-theme --parent=aurora : le thème hérite de tous les templates du parent ; copiez uniquement ceux que vous voulez modifier. Les CSS du parent puis de l’enfant sont chargées.

theme.json

{
  "slug": "mon-theme", "name": "Mon thème", "version": "1.0.0", "parent": "aurora",
  "supports": ["blog", "shop", "page-builder", "menus"],
  "styles": ["assets/style.css"], "scripts": ["assets/theme.js"],
  "settings": [
    {"key": "primary_color", "label": "Couleur principale", "type": "color", "default": "#5b4cf0", "group": "Couleurs"}
  ]
}

Les réglages apparaissent dans Apparence › Personnaliser ; lecture : theme_setting('primary_color').

Variantes proposées par Aurora (réutilisables par tous les thèmes enfants)

RéglageValeurs
header_layoutclassic · centered · split · minimal
footer_layoutcolumns · centered · minimal
product_cardcard · minimal · overlay
blog_layoutgrid · list · magazine
button_stylerounded · pill · square
bg_color, heading_color, footer_bgcouleurs

Un thème enfant se contente souvent de changer ces valeurs par défaut dans theme.json et d’ajouter une feuille de style : c’est ainsi que sont construits les 10 thèmes fournis (Plume, Journal, Nomade, Encre, Pixel, Élégance, Fraîcheur, Néon, Atelier, Nordik).

L’utilisateur peut aussi remplacer l’en-tête et le pied de page du thème par des zones construites au page builder (Apparence › En-tête & pied de page) ; le thème doit alors utiliser mq_part('header') ?: … dans layout.php.

Fonctions de template

mq_head() (SEO, CSS, variables) · mq_footer() · mq_body_class() · mq_menu('primary') · mq_breadcrumbs() · site_logo() · mq_img($chemin, $alt, 'medium') (WebP + srcset) · render_blocks($contenu) · get_posts([...]) · mq_pagination() · mq_flash() · cart_count() · social_links() · theme_asset('assets/x.png').

Variables CSS injectées : --mq-primary, --mq-accent, --mq-radius, --mq-container, --mq-font-heading, --mq-font-body.

Le contenu du builder doit être placé dans <div id="mq-content">…</div> pour l’aperçu en direct.

Gabarits supplémentaires (1.3)

GabaritUtilisé pourVariables
single.php / single-{type}.phpfiche d’un type de contenu personnalisé$post, $fields, $terms, $type, $blocks_html
archive.php / archive-{type}.phpliste d’un type personnalisé$res (items, pages), $terms, $term, $title, $base
pay.phprèglement d’une commande par lien$order, $items, $payments
partials/comment.phpun commentaire (récursif)$c (avec children, depth), $open

Les gabarits peuvent aussi être remplacés sans code depuis Apparence › Gabarits (constructeur de thème) : le bloc « Gabarit du thème » réinsère votre gabarit PHP au milieu de sections construites au builder.

Multilingue

  • __('Texte') : chaîne traduisible ; mq_language_switcher() : sélecteur de langue ; \Mozaiq\I18n::locale() pour l’attribut lang.
  • url() ajoute automatiquement le préfixe de langue (/en/…) ; les fichiers statiques ne sont jamais préfixés.

Images

mq_img($chemin, $alt, 'medium') produit un <picture> avec sources AVIF, WebP en srcset, dimensions, loading="lazy" et le point focal choisi dans la médiathèque (object-position). Ajoutez picture { display: contents; } si vos règles CSS ciblent l’img directement.