Accueil

Référence développeur · WordPress

Websource Theme pour WordPress — référence développeur

Variables CSS, filtres, actions, zones, gabarits et build CSS du thème Websource Theme.

Version 1.0.0 · WordPress 6.4+, WooCommerce 8+ (facultatif), PHP 7.4 à 8.5 · Mis à jour le 08/10/2026

Guide utilisateur

Cette extension existe aussi pour : PrestaShopJoomla

Vue d'ensemble

  • Thème classique (gabarits PHP) avec theme.json pour l'éditeur de blocs.
  • Espace de noms Websource\Theme, classes dans src/ (chargeur PSR-4 maison dans functions.php).
  • Aucun bloc, aucun shortcode, aucune route REST, aucune table : le thème ne fait qu'afficher. Les éléments d'affichage (méga-menu, carrousel, réassurance…) sont fournis par les extensions Websource, qui se branchent sur les zones et les actions ci-dessous.
  • Réglages enregistrés : theme_mods préfixés wsx_ uniquement.
ClasseRôle
ThemeSupports, emplacements de menus, zones de widgets, classes de <body>.
SettingsRéglages d'agencement (Personnaliser) + filtre websource_theme_settings.
TokensVariables CSS + filtre websource_theme_tokens.
AssetsType de page, chargement du socle et du CSS de la page.
SeoBalises SEO et JSON-LD, effacement devant une extension SEO.
BreadcrumbFil d'Ariane (visible + JSON-LD).
ShopIntégration WooCommerce (inerte sans WooCommerce).
Customizer, IconsPanneau de personnalisation, icônes SVG en ligne.

Blocs et shortcodes

Le thème n'en déclare aucun. Il habille :

  • les blocs du cœur (palette, tailles, boutons, citation, tableau : theme.json et assets/src/wp-blocks.css) ;
  • les blocs Panier et Commande de WooCommerce (assets/src/wc-blocks.css) ;
  • les shortcodes classiques [woocommerce_cart], [woocommerce_checkout], [woocommerce_my_account], [products].

Variables CSS

Mêmes noms que le thème PrestaShop (assets/src/tokens.css). Les valeurs par défaut sont compilées dans assets/css/theme.css ; seules les valeurs modifiées sont imprimées dans <style id="websource-theme-inline-css">.

VariableDéfautRôle
--color-brand-50 … --color-brand-900échelle Lagon, 600 = #0f766eCouleur de marque.
--color-brand, --color-brand-fill, --color-brand-on, --color-brand-text#0f766e, #0f766e, #ffffff, #0b5f58Base, aplat, texte sur aplat, texte lisible sur fond de page.
--color-secondary, -fill, -on, -text#0b3a5cCouleur secondaire.
--color-accent, -fill, -on, -text#f5b83dAccent (étoiles, survol du pied de page).
--color-accent-wst#f0556bPastille de promotion, compteur du panier.
--color-ink#14282bTexte.
--color-line#d9e6e4Bordures.
--color-page, --color-surface#ffffffFond de page, fond des cartes.
--color-footer, --color-footer-ink, --color-footer-muted, --color-footer-deep, --color-footer-line, --color-footer-hover#14282b…Pied de page.
--radius-xl, --radius-2xl1rem, 1.5remArrondis des champs / boutons et des cartes.
--font-sans, --font-headpile systèmePolice du texte, police des titres.
--container-page80remLargeur maximale du contenu.
--wst-card-shadownoneOmbre des cartes.
--wst-mutedencre à 65 %Texte secondaire.

Alias courts, définis sur :root et acceptés par le filtre :

AliasVariable pilotée
--wst-brand--color-brand-600 (seul, il recalcule toute l'échelle 50–900)
--wst-brand-light, --wst-brand-dark, --wst-brand-soft, --wst-brand-on--color-brand-500, -700, -50, --color-brand-on
--wst-secondary, --wst-accent, --wst-highlight--color-secondary, --color-accent, --color-accent-wst
--wst-ink, --wst-line, --wst-page, --wst-surface--color-ink, --color-line, --color-page, --color-surface
--wst-footer, --wst-footer-ink--color-footer, --color-footer-ink
--wst-radius, --wst-radius-lg--radius-xl, --radius-2xl
--wst-font, --wst-font-head, --wst-container--font-sans, --font-head, --container-page

Dans une extension, toujours prévoir un repli : color: var(--color-brand-600, #0f766e);.

Filtres

websource_theme_tokens

Point d'entrée de l'extension Websource Theme Config.

add_filter('websource_theme_tokens', function (array $tokens, array $defaults) {
    $tokens['--wst-brand'] = '#7c3aed';        // recalcule --color-brand-50 … 900, -on, -text
    $tokens['--radius-xl'] = '.5rem';
    $tokens['--wst-card-shadow'] = '0 6px 18px rgba(0,0,0,.12)';
    $tokens['--mon-extension-couleur'] = '#123456'; // toute variable --… est imprimée telle quelle
    return $tokens;
}, 10, 2);

Résultat dans la page :

<style id="websource-theme-inline-css">
:root{--color-brand-50:#f6f1fe;…;--color-brand-600:#7c3aed;…;--radius-xl:.5rem;--wst-card-shadow:0 6px 18px rgba(0,0,0,.12);--wst-brand:#7c3aed;--mon-extension-couleur:#123456;}
</style>

Les noms doivent commencer par -- ; une valeur contenant {, }, <, >, ; ou \ est ignorée.

websource_theme_settings

add_filter('websource_theme_settings', function (array $s) {
    $s['header_desktop'] = 'centered';   // classic | centered | compact
    $s['header_mobile']  = 'icons_right'; // icons_right | centered | stacked
    $s['mobile_nav']     = 'bottom';     // bottom | top
    $s['footer_style']   = 'dark';       // dark | light
    $s['product_layout'] = 'classic';    // classic | xl | showcase | minimal | sticky-buy | magazine
    $s['product_details'] = 'tabs';      // tabs | accordion | stacked
    $s['shop_sidebar']   = 'left';       // left | none
    $s['shop_columns']   = '3';          // 3 | 4
    return $s;
});

Clés supplémentaires : primary_color, footer_text, copyright. Une valeur inconnue revient au défaut.

Autres filtres

FiltreParamètresRôle
websource_theme_product_layoutarray $layout, int $product_idpreset, details_mode, hidden (blocs masqués parmi flags, gallery, title, price, short_description, buy, meta, reassurance, details, related). Permet une disposition par produit.
websource_theme_page_typestring $typeType de page : home, shop, product, cart, checkout, account, post, blog, page, search, 404.
websource_theme_page_stylesarray $files, string $typeFeuilles de style de la page (suffixe => chemin relatif au thème).
websource_theme_keep_woocommerce_cssbool (défaut false)true : garde les feuilles de style d'origine de WooCommerce.
websource_theme_seo_enabledbool $enabled, string $pluginForce ou coupe l'en-tête SEO du thème.
websource_theme_canonical, websource_theme_description, websource_theme_robotsstringValeur de la balise.
websource_theme_alternatesarray (hreflang => url)Balises hreflang.
websource_theme_open_grapharray (propriété => contenu)Balises Open Graph.
websource_theme_jsonldarray (clés organization, website, webpage, breadcrumb, itemlist, article)Nœuds JSON-LD ; retirer une clé supprime le nœud.
websource_theme_breadcrumbarray de ['title' => …, 'url' => …]Fil d'Ariane.
websource_theme_product_flagsarray $flags, WC_Product $productPastilles (type, label).
websource_theme_new_daysint (défaut 20)Durée de la pastille « Nouveau », en jours.
websource_theme_home_sectionsarray $sections, bool $has_contentSections automatiques de l'accueil : hero, new_products, categories, sale_products, posts.
websource_theme_tabbar_itemsarrayEntrées de la barre du bas (url, icon, label, current).
websource_theme_search_formstring $html, string $suffixFormulaire de recherche de l'en-tête.
websource_theme_copyrightstringLigne de copyright.

Actions et zones

Chaque zone exécute d'abord l'action websource_theme_area_<id> (tirets remplacés par des soulignés), puis affiche les widgets de la zone wsx-<id>. Une zone vide n'écrit aucun balisage.

Zone (id)ActionHook PrestaShop
bannerwebsource_theme_area_bannerdisplayBanner
topbar-leftwebsource_theme_area_topbar_leftdisplayNav1
topbar-rightwebsource_theme_area_topbar_rightdisplayNav2, displayWebsourceTopbarRight
header-searchwebsource_theme_area_header_searchdisplayTop
header-menuwebsource_theme_area_header_menudisplayNavFullWidth
wrapper-topwebsource_theme_area_wrapper_topdisplayWrapperTop
homewebsource_theme_area_homedisplayHome
shop-sidebarwebsource_theme_area_shop_sidebardisplayLeftColumn
sidebarwebsource_theme_area_sidebardisplayRightColumn
product-reassurancewebsource_theme_area_product_reassurancedisplayReassurance
product-footerwebsource_theme_area_product_footerdisplayFooterProduct
cart-footerwebsource_theme_area_cart_footerdisplayShoppingCartFooter
wrapper-bottomwebsource_theme_area_wrapper_bottomdisplayWrapperBottom
footer-beforewebsource_theme_area_footer_beforedisplayFooterBefore
footer-1, footer-2, footer-3websource_theme_area_footer_1 …displayFooter
footer-afterwebsource_theme_area_footer_afterdisplayFooterAfter

Exemple : remplacer le menu principal par un méga-menu.

add_action('websource_theme_area_header_menu', function () {
    echo do_shortcode('[mon_mega_menu]');
});

Autres actions :

ActionEmplacement
websource_theme_header_actionsActions de l'en-tête (ordinateur). Dès qu'un rappel y est accroché, les liens Compte et Panier par défaut ne sont plus affichés.
websource_theme_drawerBas du panneau de menu mobile.
websource_theme_footer_aboutPremière colonne du pied de page, sous le texte de présentation (avis, réseaux sociaux).
websource_theme_product_top (WC_Product $product)Zone haute de la fiche produit ; envelopper la sortie dans un élément .wsx-pb.

Emplacements de menus : primary, topbar, footer, legal.

Classes posées sur <body> : wsx, wsx-dh-{classic|centered|compact}, wsx-mh-{icons_right|centered|stacked}, wsx-mn-{bottom|top}, wsx-ft-{dark|light}, wsx-page-<type>.

Fonctions publiques

Toutes surchargeables dans un thème enfant (function_exists).

FonctionRetour
websource_theme_get_area(string $id): stringHTML d'une zone (action + widgets).
websource_theme_area(string $id, string $before = '', string $after = ''): boolAffiche la zone entre deux balises, rien si elle est vide.
websource_theme_icon(string $name, int $size = 24): stringIcône SVG : menu, search, account, cart, home, star, mail, close, filter, orders, downloads, address, payment, logout, dashboard, check, chevron.
websource_theme_breadcrumb(): voidAffiche le fil d'Ariane.
websource_theme_cart_count(): int, websource_theme_cart_badge(): stringNombre d'articles, pastille du panier.
websource_theme_account_url(): string, websource_theme_cart_url(): stringAdresses du compte et du panier.
websource_theme_logo(): stringLogo ou nom du site.
websource_theme_search_form(string $suffix = 'header'): stringFormulaire de recherche.
websource_theme_pagination(): voidPagination des listes.
websource_theme_setting(string $key): stringValeur d'un réglage.

Routes REST

Le thème ne déclare aucune route. Le compteur du panier lit la route publique de WooCommerce :

GET /wp-json/wc/store/v1/cart
{ "items_count": 3, "items": [ … ], "totals": { … } }

assets/js/theme.js met à jour tous les éléments [data-wsx-cart-count] après les évènements added_to_cart, removed_from_cart, updated_cart_totals (scripts classiques) et wc-blocks_added_to_cart, wc-blocks_removed_from_cart (blocs). Les ajouts AJAX classiques passent aussi par le fragment span.wsx-cart-count.

En-tête SEO

Imprimé par Seo::head() et Seo::jsonLd() : meta description, meta robots (noindex,follow sur la recherche, le panier, la commande, le compte et les listes triées), canonical, hreflang + x-default (Polylang, WPML), rel=prev/next, Open Graph (product:price:* sur une fiche produit), twitter:card, JSON-LD Organization, WebSite (accueil), WebPage / CollectionPage / SearchResultsPage / ContactPage / AboutPage, BreadcrumbList, ItemList (listes de produits), BlogPosting. Le nœud Product reste celui de WooCommerce (@id = <permalien>#product), référencé par mainEntity.

Le thème n'imprime rien si l'une de ces constantes existe : WPSEO_VERSION, RANK_MATH_VERSION, SEOPRESS_VERSION, AIOSEO_VERSION, THE_SEO_FRAMEWORK_VERSION, SLIM_SEO_VER.

Gabarits WooCommerce surchargés

FichierVersion d'origineRôle
woocommerce/content-product.php9.4.0Carte produit (.wsx-pm).
woocommerce/content-single-product.php3.6.0Fiche produit en zones .wsx-pz--top/media/info/below.
woocommerce/single-product/tabs/tabs.php10.1.0Détails en onglets / accordéon / sections.
woocommerce/cart/cart-empty.php9.4.0Panier vide.
woocommerce/checkout/form-checkout.php9.4.0Commande en deux colonnes.
woocommerce/checkout/thankyou.php8.1.0Confirmation de commande.
woocommerce/myaccount/navigation.php9.3.0Navigation du compte avec icônes.
woocommerce/myaccount/dashboard.php4.4.0Tableau de bord en cartes.

Tous les hooks d'origine sont conservés, dans le même ordre. Blocs de la fiche produit : .wsx-pb--flags, --gallery, --title, --price, --short-description, --buy, --reassurance, --meta, --details, --related.

Build CSS

npm install
npm run build      # assets/css/theme.css + assets/css/pages/<type>.css + assets/css/editor.css
npm run watch
  • Sources : assets/src/ ; correspondance page → sources et gabarits : scripts/pages.config.mjs.
  • Tailwind v4 ne scanne que les gabarits de la page ; tout ce qui est déjà dans theme.css est retiré des fichiers de page.
  • Le CSS des composants est hors couche (@layer) pour primer sur le CSS du cœur, de WooCommerce et des extensions ; seuls la remise à zéro et les utilitaires Tailwind sont en couches.
  • Ajouter un type de page : une entrée dans pages.config.mjs, puis renvoyer ce type avec websource_theme_page_type.