Accueil

Référence développeur · WordPress

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

Bloc, code court, fonction PHP, hooks, routes REST et variables CSS de l'extension Websource Marques.

Version 1.3.0 · WordPress 6.4+, WooCommerce 8+ (marques intégrées à partir de WooCommerce 9.6) · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : PrestaShop

Vue d'ensemble

  • Slug : websource-brands · espace de noms PHP : Websource\Brands · domaine de traduction : websource-brands.
  • Données : taxonomie native product_brand de WooCommerce ; logo = méta de terme thumbnail_id.
  • Réglages : une option wsx_brands_settings (tableau). Aucune table.
  • Sans WooCommerce, l'extension est inerte : le code court renvoie une chaîne vide, le bloc et les routes REST ne sont pas enregistrés.

Bloc websource/brands

Bloc à rendu serveur (blocks/brands/block.json), catégorie WooCommerce, alignements wide et full.

AttributTypeDéfautRôle
titlestring""Titre affiché. Vide = pas de titre.
layoutstringgridgrid, carousel ou list.
limitinteger12Nombre maximum de marques (0 = toutes, 200 au plus).
columnsinteger6Logos côte à côte sur ordinateur (2 à 8).
sortstringnamename, manual (ordre des réglages) ou products.
showNamebooleanfalseNom sous le logo.
showCountbooleanfalseNombre de produits.
grayscalebooleantrueLogos en gris, couleur au survol.
autoplaybooleantrueDéfilement automatique du carrousel.

Le choix des marques (selection, brand_ids, only_with_products) et l'apparence viennent des réglages enregistrés.

<!-- wp:websource/brands {"title":"Nos marques","layout":"carousel","limit":10,"align":"wide"} /-->

Code court [websource_brands]

Sans attribut, il reprend les réglages enregistrés. Chaque attribut remplace le réglage du même nom.

AttributValeursRôle
titletexteTitre. title="" cache le titre.
show_title1 / 0Force l'affichage ou non du titre.
layoutgrid, carousel, listPrésentation.
columns2 à 8Logos côte à côte.
limit0 à 200Nombre maximum (0 = toutes).
sortname, manual, productsOrdre.
manual_orderidentifiants séparés par des virgulesOrdre pour sort="manual".
selectionall, only, exceptMode de choix des marques.
brand_ids (ou brands)identifiants séparés par des virgulesMarques concernées. Donné seul, il implique selection="only".
only_with_products1 / 0Seulement les marques qui ont des produits visibles.
show_name, show_count, grayscale, autoplay, schema1 / 0Options d'affichage.
inherit_design1 / 00 pour appliquer bg, title_color, radius, width, borders.
bg, title_color#rrggbbCouleurs personnalisées.
radiusnone, small, medium, largeArrondis.
widthbox, wideEncadré ou pleine largeur.
borders1 / 0Bordures autour des logos.
[websource_brands layout="carousel" limit="10" grayscale="0" title="Nos partenaires"]
[websource_brands layout="list" limit="0" only_with_products="0" show_count="1"]
[websource_brands brands="16,17,19" sort="manual" manual_order="19,16,17"]

Fonction PHP

websource_brands_render( array $options = [] ): string

Mêmes clés que le code court (en snake_case ou camelCase). Renvoie le HTML, ou une chaîne vide s'il n'y a aucune marque à afficher ou si WooCommerce est absent.

<?php echo websource_brands_render( [ 'layout' => 'list', 'limit' => 0 ] ); ?>

Accès aux services : \Websource\Brands\Plugin::instance() expose store() (réglages), cache(), viewBuilder(), render(), flushCache().

Emplacements automatiques

Réglés dans l'administration (12 au plus). Chaque emplacement = une position + un type de page.

PositionThème à blocsThème classique
home, page_bottomfin du groupe <main> du modèlewoocommerce_after_main_content (priorité 50), sinon loop_end de la requête principale, au plus tard get_footer
page_topdébut du groupe <main>woocommerce_before_main_content (priorité 5), sinon loop_start de la requête principale
under_headeraprès la partie de modèle d'en-têteactions du thème (liste filtrable, voir websource_brands_position_hooks)
product_footerwoocommerce_after_single_product (priorité 30), sinon fin de <main>woocommerce_after_single_product (priorité 30)
before_footeravant la partie de modèle de pied de pageget_footer
footerdans le pied de page, avant </footer>wp_footer (priorité 1)
after_footeraprès la partie de modèle de pied de pagewp_footer (priorité 1)
customl'action WordPress saisiel'action WordPress saisie

Types de page : all, home, shop, category, product, brand, cms, blog, search, cart, notfound. Une position n'est rendue qu'une fois par page. Dans un modèle de blocs sans groupe <main>, page_top se replie après l'en-tête et page_bottom avant le pied de page.

Filtres

FiltreParamètresRôle
websource_brands_settingsarray $settingsModifie les réglages lus (ils sont ensuite nettoyés).
websource_brands_listarray $brands, array $settingsModifie la liste des marques d'une section (id, name, slug, fold, url, products, logo).
websource_brands_viewarray $view, array $settingsModifie les données passées au gabarit.
websource_brands_htmlstring $html, array $view, array $settings, string $contextModifie le HTML final. $context : nom de position, shortcode, block, function ou preview.
websource_brands_logo_sizestring\|int[] $sizeTaille d'image des logos (défaut medium).
websource_brands_current_pagestring $pageType de la page affichée, pour les emplacements.
websource_brands_position_hooksstring[] $actions, string $positionActions de thème utilisées pour under_header dans les thèmes classiques.
websource_brands_jsonldarray $node, WP_Term $termNœud Brand des pages de marque (tableau vide = rien).
websource_brands_cache_ttlint $secondsDurée du cache des listes (défaut 600 ; 0 = pas de cache).
websource_brands_capabilitystring $capabilityCapacité exigée pour les réglages (défaut manage_woocommerce).
websource_brands_woocommerce_availablebool $availablePermet de simuler l'absence de WooCommerce dans des tests.
websource_theme_exportarray $sectionsL'extension y ajoute sa section brands (export de thème).
// Ajouter l'emplacement « sous l'en-tête » d'un thème classique maison.
add_filter( 'websource_brands_position_hooks', function ( $actions, $position ) {
    if ( 'under_header' === $position ) {
        $actions[] = 'mon_theme_after_header';
    }
    return $actions;
}, 10, 2 );

Actions

ActionParamètresRôle
websource_brands_cache_flushed—Déclenchée après l'invalidation du cache des listes.
websource_theme_importarray $sectionsL'extension importe la section brands si elle est présente.

Le cache est invalidé à la création, modification ou suppression d'un terme product_brand, au changement de son logo, à l'affectation d'une marque à un produit, au changement de statut d'un produit, à la modification des permaliens et à l'enregistrement des réglages.

Gabarit surchargeable

Copiez templates/brands.php vers votre-theme/websource-brands/brands.php. Le gabarit reçoit $view : uid, layout, classes, style, title, show_title, show_name, show_count, autoplay, brands, groups, letters, schema.

Routes REST

Espace de noms : websource-brands/v1.

GET /wp-json/websource-brands/v1/brands

Publique. Renvoie les marques telles que les réglages les sélectionnent.

ParamètreTypeRôle
limitinteger (0 à 200)Remplace le nombre maximum.
sortname, manual, productsRemplace l'ordre.
curl "https://exemple.fr/wp-json/websource-brands/v1/brands?limit=2&sort=products"
{
  "count": 2,
  "brands": [
    {
      "id": 16,
      "name": "Atelier Lagon",
      "slug": "atelier-lagon",
      "url": "https://exemple.fr/marque/atelier-lagon/",
      "products": 4,
      "logo": { "src": "https://exemple.fr/wp-content/uploads/2026/10/atelier-lagon-300x180.png", "width": 300, "height": 180 }
    },
    {
      "id": 18,
      "name": "Maison Verte",
      "slug": "maison-verte",
      "url": "https://exemple.fr/marque/maison-verte/",
      "products": 4,
      "logo": null
    }
  ]
}

Une valeur de sort inconnue renvoie une erreur 400.

POST /wp-json/websource-brands/v1/preview

Réservée aux utilisateurs ayant la capacité manage_woocommerce (nonce REST X-WP-Nonce). Sert à l'aperçu de l'écran de réglages : rend des réglages non enregistrés.

ParamètreTypeRôle
wsbrobjetRéglages du formulaire (wsbr[layout], wsbr[limit], wsbr[brand_ids][]…). Une case absente vaut « décochée ».
curl -X POST "https://exemple.fr/wp-json/websource-brands/v1/preview" \
  -H "X-WP-Nonce: <nonce>" --cookie "<cookies de session>" \
  -d "wsbr[layout]=carousel" -d "wsbr[limit]=6" -d "wsbr[show_title]=1"
{ "html": "<section class=\"wsbr wsbr--carousel wsbr--themed\" …>…</section>" }

html est vide quand aucune marque ne correspond. Sans droits : erreur 401 (visiteur) ou 403.

Données structurées

  • Section (bloc, code court, emplacement) : un ItemList de Brand par page, sauf sur les pages de marque.
  • Page d'une marque : nœud Brand dans le <head> (@id = <url de la marque>#brand, name, url, logo, description).
  • Fiche produit : le nœud brand des données structurées de WooCommerce reçoit le même @id et l'url de la marque.
  • Le réglage « Aider Google à comprendre la liste de vos marques » désactive les trois.

Variables CSS

Feuille assets/css/front.css (handle wsx-brands), script assets/js/front.js (handle wsx-brands, chargé seulement pour le carrousel et la liste, sans jQuery). window.WSBR.init(element) initialise les sections ajoutées après coup.

Variables du thème lues, dans l'ordre --wst-*, puis --color-* / --radius-*, puis valeur de repli :

Variable du thèmeRepliUsage
--wst-surface / --color-surface#fffFond de la section et des tuiles.
--wst-ink / --color-ink#14282bTexte et titre.
--wst-line / --color-line#d9e6e4Bordures.
--wst-brand-600 / --color-brand-600#0f766eSurvol, focus.
--wst-brand-50 / --color-brand-50#effaf8Fond des lettres au survol.
--wst-radius-2xl / --radius-2xl1.5remArrondi de la section.
--wst-radius-xl / --radius-xl1remArrondi des tuiles.
--wst-card-shadownoneOmbre de la section.
--wst-containerlargeur large du thème, sinon 1280pxLargeur des emplacements hors contenu.

Variables propres à la section, surchargeables sur .wsbr : --wsbr-bg, --wsbr-title, --wsbr-ink, --wsbr-line, --wsbr-radius, --wsbr-tile-radius, --wsbr-shadow, --wsbr-accent, --wsbr-tint, --wsbr-cols.

Classes : .wsbr, .wsbr--grid|carousel|list, .wsbr--gray, .wsbr--themed|custom, .wsbr--box|wide, .wsbr--placed (emplacement hors contenu), .wsbr--placed-in (emplacement dans le contenu).

Export / import des réglages

Fichier JSON produit par l'écran de réglages :

{
  "plugin": "websource-brands",
  "plugin_version": "1.3.0",
  "sections": {
    "brands": {
      "version": 1,
      "data": { "layout": "list", "selection": "only", "brand_ids": ["brand:atelier-lagon"], "manual_order": [], "placements": [] }
    }
  }
}

Les marques sont désignées par brand:<slug>. À l'import, les références introuvables sont ignorées et comptées. En PHP : \Websource\Brands\ThemePackage\ThemePackage::export( array $settings ) et ::import( array $section ).

Traductions

Chaînes sources en anglais, languages/websource-brands-fr_FR.po|mo et le fichier JSON de l'éditeur de blocs. Le titre saisi dans les réglages est déclaré à Polylang (pll_register_string, groupe « Websource Brands ») et à WPML (wpml-config.xml, chaîne « Section title » du domaine websource-brands).

Désinstallation

uninstall.php supprime wsx_brands_settings, wsx_brands_cache_version et les transients wsx_brands_*. Les termes product_brand et leurs métas ne sont pas touchés.