Vue d'ensemble
- Slug :
websource-brands· espace de noms PHP :Websource\Brands· domaine de traduction :websource-brands. - Données : taxonomie native
product_brandde WooCommerce ; logo = méta de termethumbnail_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.
| Attribut | Type | Défaut | Rôle |
|---|---|---|---|
title | string | "" | Titre affiché. Vide = pas de titre. |
layout | string | grid | grid, carousel ou list. |
limit | integer | 12 | Nombre maximum de marques (0 = toutes, 200 au plus). |
columns | integer | 6 | Logos côte à côte sur ordinateur (2 à 8). |
sort | string | name | name, manual (ordre des réglages) ou products. |
showName | boolean | false | Nom sous le logo. |
showCount | boolean | false | Nombre de produits. |
grayscale | boolean | true | Logos en gris, couleur au survol. |
autoplay | boolean | true | Dé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.
| Attribut | Valeurs | Rôle |
|---|---|---|
title | texte | Titre. title="" cache le titre. |
show_title | 1 / 0 | Force l'affichage ou non du titre. |
layout | grid, carousel, list | Présentation. |
columns | 2 à 8 | Logos côte à côte. |
limit | 0 à 200 | Nombre maximum (0 = toutes). |
sort | name, manual, products | Ordre. |
manual_order | identifiants séparés par des virgules | Ordre pour sort="manual". |
selection | all, only, except | Mode de choix des marques. |
brand_ids (ou brands) | identifiants séparés par des virgules | Marques concernées. Donné seul, il implique selection="only". |
only_with_products | 1 / 0 | Seulement les marques qui ont des produits visibles. |
show_name, show_count, grayscale, autoplay, schema | 1 / 0 | Options d'affichage. |
inherit_design | 1 / 0 | 0 pour appliquer bg, title_color, radius, width, borders. |
bg, title_color | #rrggbb | Couleurs personnalisées. |
radius | none, small, medium, large | Arrondis. |
width | box, wide | Encadré ou pleine largeur. |
borders | 1 / 0 | Bordures 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.
| Position | Thème à blocs | Thème classique |
|---|---|---|
home, page_bottom | fin du groupe <main> du modèle | woocommerce_after_main_content (priorité 50), sinon loop_end de la requête principale, au plus tard get_footer |
page_top | début du groupe <main> | woocommerce_before_main_content (priorité 5), sinon loop_start de la requête principale |
under_header | après la partie de modèle d'en-tête | actions du thème (liste filtrable, voir websource_brands_position_hooks) |
product_footer | woocommerce_after_single_product (priorité 30), sinon fin de <main> | woocommerce_after_single_product (priorité 30) |
before_footer | avant la partie de modèle de pied de page | get_footer |
footer | dans le pied de page, avant </footer> | wp_footer (priorité 1) |
after_footer | après la partie de modèle de pied de page | wp_footer (priorité 1) |
custom | l'action WordPress saisie | l'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
| Filtre | Paramètres | Rôle |
|---|---|---|
websource_brands_settings | array $settings | Modifie les réglages lus (ils sont ensuite nettoyés). |
websource_brands_list | array $brands, array $settings | Modifie la liste des marques d'une section (id, name, slug, fold, url, products, logo). |
websource_brands_view | array $view, array $settings | Modifie les données passées au gabarit. |
websource_brands_html | string $html, array $view, array $settings, string $context | Modifie le HTML final. $context : nom de position, shortcode, block, function ou preview. |
websource_brands_logo_size | string\|int[] $size | Taille d'image des logos (défaut medium). |
websource_brands_current_page | string $page | Type de la page affichée, pour les emplacements. |
websource_brands_position_hooks | string[] $actions, string $position | Actions de thème utilisées pour under_header dans les thèmes classiques. |
websource_brands_jsonld | array $node, WP_Term $term | Nœud Brand des pages de marque (tableau vide = rien). |
websource_brands_cache_ttl | int $seconds | Durée du cache des listes (défaut 600 ; 0 = pas de cache). |
websource_brands_capability | string $capability | Capacité exigée pour les réglages (défaut manage_woocommerce). |
websource_brands_woocommerce_available | bool $available | Permet de simuler l'absence de WooCommerce dans des tests. |
websource_theme_export | array $sections | L'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
| Action | Paramètres | Rôle |
|---|---|---|
websource_brands_cache_flushed | — | Déclenchée après l'invalidation du cache des listes. |
websource_theme_import | array $sections | L'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ètre | Type | Rôle |
|---|---|---|
limit | integer (0 à 200) | Remplace le nombre maximum. |
sort | name, manual, products | Remplace 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ètre | Type | Rôle |
|---|---|---|
wsbr | objet | Ré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
ItemListdeBrandpar page, sauf sur les pages de marque. - Page d'une marque : nœud
Branddans le<head>(@id=<url de la marque>#brand,name,url,logo,description). - Fiche produit : le nœud
branddes données structurées de WooCommerce reçoit le même@idet l'urlde 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ème | Repli | Usage |
|---|---|---|
--wst-surface / --color-surface | #fff | Fond de la section et des tuiles. |
--wst-ink / --color-ink | #14282b | Texte et titre. |
--wst-line / --color-line | #d9e6e4 | Bordures. |
--wst-brand-600 / --color-brand-600 | #0f766e | Survol, focus. |
--wst-brand-50 / --color-brand-50 | #effaf8 | Fond des lettres au survol. |
--wst-radius-2xl / --radius-2xl | 1.5rem | Arrondi de la section. |
--wst-radius-xl / --radius-xl | 1rem | Arrondi des tuiles. |
--wst-card-shadow | none | Ombre de la section. |
--wst-container | largeur large du thème, sinon 1280px | Largeur 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.