Accueil

Référence développeur · WordPress

Websource Réassurance pour WordPress — référence développeur

Bloc, code court, fonction PHP, hooks, routes REST, variables CSS et format d'export de l'extension Websource Réassurance.

Version 1.3.0 · WordPress 6.4+, WooCommerce 8+ (facultatif) · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : PrestaShop

Vue d'ensemble

  • Espace de noms PHP : Websource\Reassurance (classes dans src/, chargeur PSR-4 intégré, aucune dépendance Composer).
  • Point d'entrée : Websource\Reassurance\Plugin::instance().
  • Données : options wsx_reassurance_groups (groupes, chargée automatiquement), wsx_reassurance_images (icônes envoyées), wsx_reassurance_keep_data (1 ou 0).
  • Fichiers envoyés : wp-content/uploads/websource-reassurance/ (noms aléatoires, .htaccess qui interdit toute exécution).
  • Capacité requise pour gérer les groupes : manage_options (filtre websource_reassurance_capability).

Un groupe est identifié par un numéro (id) et par un identifiant lisible (identifier, par exemple accueil), créé à partir de son nom et stable ensuite.

Bloc Gutenberg

Nom : websource/reassurance (rendu serveur, blocks/reassurance/block.json).

AttributTypeDéfautRôle
groupstring""Identifiant ou numéro du groupe.
layoutstring""box, wide, list, ou vide pour garder la disposition du groupe.
columnsinteger0Colonnes sur ordinateur (1 à 6), 0 pour garder le réglage du groupe.
<!-- wp:websource/reassurance {"group":"accueil","layout":"list"} /-->

Le bloc ne rend rien si le groupe n'existe pas, est masqué ou n'a aucun bloc.

Code court

[websource_reassurance group="accueil"]
[websource_reassurance group="3" layout="wide" columns="3"]
AttributRôle
group (ou id)Identifiant ou numéro du groupe.
layoutbox, wide ou list (facultatif).
columns1 à 6 (facultatif). Tablette : 2 au plus, téléphone : 1.

Fonctions publiques

// Dans un modèle de thème.
echo websource_reassurance_render( 'accueil' );
echo websource_reassurance_render( 3, array( 'layout' => 'wide', 'columns' => 3 ) );

// Équivalent objet.
echo \Websource\Reassurance\Plugin::instance()->render( 'accueil' );

websource_reassurance_render( string|int $group, array $overrides = array() ): string renvoie le HTML du groupe, ou une chaîne vide. La feuille de style est mise en file au moment du rendu.

Emplacements automatiques

PositionThème à blocsThème classique
homeFin du contenu si l'accueil est une page statique (filtre the_content), sinon avant la partie de modèle « footer »Idem, sinon action get_footer
productAprès le bloc woocommerce/add-to-cart-form (ou add-to-cart-with-options)woocommerce_single_product_summary, priorité 35
cartAprès le bloc woocommerce/cartwoocommerce_after_cart_table
checkoutAvant le bloc woocommerce/checkoutwoocommerce_review_order_before_payment
under_headerAprès la partie de modèle de zone « header »Actions listées par le filtre websource_reassurance_header_hooks
before_footerAvant la partie de modèle de zone « footer »get_footer
footerAvant la balise </footer> de la partie de modèle « footer »wp_footer, priorité 5
customAction au nom saisi par le commerçantIdem

Un thème peut aussi déclencher lui-même ces actions, que l'extension écoute :

do_action( 'websource_after_header' );   // position under_header
do_action( 'websource_before_footer' );  // positions home (repli) et before_footer
do_action( 'websource_footer' );         // position footer

Chaque groupe placé automatiquement est enveloppé dans <div class="wsr-slot wsr-slot--<position>">. Un même groupe n'est jamais imprimé deux fois à la même position.

Types de page reconnus pour la condition « Sur quelles pages ? » : all, home, category (boutique, catégories et étiquettes de produits), product, brand (taxonomie product_brand), cms (pages), blog, search, login, account, cart, checkout, contact, notfound.

Hooks et filtres

Filtres

FiltreParamètresRôle
websource_reassurance_viewarray $viewDonnées passées au modèle : classes, style, identifier, title, items (icon, title, text, url).
websource_reassurance_htmlstring $html, array $viewHTML final d'un groupe.
websource_reassurance_page_typestring $pageType de la page courante.
websource_reassurance_contact_slugsstring[] $slugsSlugs des pages considérées comme page de contact.
websource_reassurance_header_hooksstring[] $hooksActions de thèmes classiques déclenchées après l'en-tête.
websource_reassurance_theme_palettearray $paletteCouleurs de l'aperçu de l'administration : brand, brand50, brand700, ink, line, surface, source (theme ou fallback).
websource_reassurance_capabilitystring $capabilityCapacité requise pour gérer les groupes.
// Donner à l'aperçu les vraies couleurs du thème.
add_filter( 'websource_reassurance_theme_palette', function ( $palette ) {
    $palette['brand']   = '#0f766e';
    $palette['brand50'] = '#effaf8';
    $palette['source']  = 'theme';
    return $palette;
} );

Actions

ActionRôle
websource_reassurance_changedDéclenchée après un enregistrement, un affichage ou masquage, une suppression ou un import. C'est l'endroit où vider un cache de pages.

Modèle surchargeable

Copiez templates/group.php dans <votre-thème>/websource-reassurance/group.php. La variable $wsr_view contient les données du filtre websource_reassurance_view.

Routes REST

Espace de noms : websource-reassurance/v1. Toutes les routes exigent un utilisateur connecté ayant la capacité de gestion, et l'en-tête X-WP-Nonce (nonce wp_rest).

MéthodeCheminParamètresRôle
GET/groups—Liste des groupes et réglage de conservation.
POST/groupsname (string), preset (starter ou empty)Crée un groupe (masqué).
GET/groups/{id}—Données de l'éditeur (brouillon s'il existe), aperçu, conseils de contraste.
PUT/groups/{id}content (object)Publie le contenu.
DELETE/groups/{id}—Supprime le groupe.
POST/groups/{id}/draftcontent (object)Enregistre un brouillon ; renvoie preview, warnings, has_draft.
POST/groups/{id}/toggleactive (boolean)Affiche ou masque le groupe.
POST/groups/{id}/duplicate—Duplique le groupe.
POST/groups/{id}/enable-defaults—Ajoute les emplacements accueil, fiche produit et panier.
GET/images—Icônes envoyées.
POST/imagesfile (multipart)Envoie une icône (contrôlée et nettoyée).
DELETE/images/{id}—Supprime une icône inutilisée (409 si elle est utilisée).
POST/settingskeep_data (boolean)Réglage de conservation des données.
GET/export—Export JSON des groupes publiés.
POST/importpackage (object), mode (merge ou replace), dry_run (boolean)Importe un export, ou l'analyse sans écrire.

Exemple de requête :

curl -X PUT "https://exemple.fr/wp-json/websource-reassurance/v1/groups/1" \
  -H "X-WP-Nonce: <nonce>" -H "Content-Type: application/json" --cookie "<cookies de session>" \
  -d '{"content":{"name":"Accueil","title":"Pourquoi commander chez nous ?",
       "columns":{"lg":4,"md":2,"sm":1},
       "design":{"inherit":true,"layout":"box"},
       "items":[{"icon":{"type":"library","value":"truck"},"title":"Livraison rapide","text":"Expédition sous 24 à 48 h ouvrées.","url":"post:11"}],
       "placements":[{"position":"home","page":"home"},{"position":"under_header","page":"category"}]}}'

Exemple de réponse (abrégée) :

{
  "id": 1,
  "identifier": "accueil",
  "name": "Accueil",
  "active": true,
  "has_draft": false,
  "content": { "name": "Accueil", "title": "Pourquoi commander chez nous ?", "columns": { "lg": 4, "md": 2, "sm": 1 }, "design": { "inherit": true, "layout": "box" }, "items": [], "placements": [] },
  "images": [],
  "media": {},
  "preview": "<section class=\"wsr wsr--box …\">…</section>",
  "warnings": []
}

Erreurs : objet WordPress standard (code, message, data.status), par exemple wsr_not_found (404), wsr_upload (400), wsr_in_use (409), wsr_import (400).

Structure de content

CléValeurs
nameNom interne, 150 caractères.
titleTitre affiché au-dessus des blocs, 150 caractères.
columnslg, md, sm : 1 à 6.
designinherit (bool), layout (box, wide, list), bg, text, title, border (theme, yes, no), border_color, border_width (1–8), border_style (solid, dashed, dotted, double), shadow et radius (theme, none, small, medium, large), align (left, center), icon_position (top, left), icon_size (16–120), icon_color, icon_shape (round, rounded, square, none), icon_bg, icon_border_width (0–8), icon_border_color.
items[]icon ({type: library, value: <clé>}, {type: image, value: <id d'icône envoyée>} ou {type: media, value: <id de pièce jointe>}), title (80), text (300), url. 12 éléments au plus.
placements[]position (voir plus haut), page (type de page), hook (nom d'action, pour custom).

Les couleurs acceptent #rgb, #rgba, #rrggbb, #rrggbbaa, rgb() et rgba() ; elles sont enregistrées en hexadécimal. Toute valeur hors liste est remplacée par la valeur par défaut.

Liens acceptés : http(s)://…, /chemin, #ancre, mailto:, tel:, post:<id>, page:<nom> (home, shop, cart, checkout, account, terms, privacy, ou le slug d'une page). cms:<id> est accepté comme synonyme de post:<id>.

Format d'export

{
  "format": "websource-reassurance",
  "version": 1,
  "generated": "2026-10-08T18:10:00+00:00",
  "site": "https://exemple.fr/",
  "groups": [
    {
      "identifier": "accueil",
      "name": "Accueil",
      "active": true,
      "titles": { "fr": "Pourquoi commander chez nous ?" },
      "columns": { "lg": 4, "md": 2, "sm": 1 },
      "design": { "inherit": true, "layout": "box" },
      "items": [
        { "icon": { "type": "library", "value": "truck" }, "titles": { "fr": "Livraison rapide" }, "texts": { "fr": "Expédition sous 24 à 48 h ouvrées." }, "url": "slug:page/livraison" }
      ],
      "placements": [ { "position": "home", "hook": "", "page": "home" } ]
    }
  ]
}
  • Les textes sont indexés par code de langue. À l'import, la langue du site est retenue, sinon le premier texte renseigné.
  • Une icône envoyée voyage dans le fichier ({"type":"image","name":…,"extension":…,"data":"<base64>"}) ; elle repasse par les mêmes contrôles qu'un envoi manuel.
  • Un lien post:<id> est exporté sous la forme slug:<type>/<slug> et retrouvé par son slug à l'import.
  • Les brouillons ne sont pas exportés.

Variables CSS

Variables du thème lues par la feuille de style (dans cet ordre, avec repli intégré) :

UsageVariables luesRepli
Couleur de marque (icônes, survol)--wst-brand-600, --color-brand-600#475569
Fond des pastilles d'icône--wst-brand-50, --color-brand-50#f1f5f9
Texte et titres--wst-ink, --color-ink#14282b
Bordures--wst-line, --color-line#e5e7eb
Fond des cartes--wst-surface, --color-surface#fff
Arrondi des cartes--wst-radius-xl, --radius-xl1rem
Ombre des cartes--wst-card-shadownone
Largeur du bandeau--wst-container1320px

Variables posées par l'extension sur chaque groupe (attribut style de .wsr), que vous pouvez surcharger :

--wsr-bg, --wsr-text, --wsr-title, --wsr-border, --wsr-border-w, --wsr-border-style, --wsr-radius, --wsr-shadow, --wsr-icon-color, --wsr-icon-bg, --wsr-icon-bc, --wsr-icon-bw, --wsr-icon-size, --wsr-c-lg, --wsr-c-md, --wsr-c-sm.

Classes : .wsr, .wsr--box|wide|list, .wsr--align-left|center, .wsr--icon-top|left, .wsr--shape-round|rounded|square|none, .wsr--border-theme|yes|no, .wsr__inner, .wsr__heading, .wsr__list, .wsr__item, .wsr__card, .wsr__icon, .wsr__body, .wsr__title, .wsr__text. Attribut data-wsr="<identifiant>" sur chaque groupe.

Points de rupture des colonnes : 576 px (tablette) et 992 px (ordinateur).

Multilingue

  • Polylang : chaque titre, texte et lien est déclaré par pll_register_string() (groupe « Websource Reassurance ») et traduit par pll__() à l'affichage.
  • WPML : chaînes déclarées par l'action wpml_register_single_string (domaine websource-reassurance, noms group-<id>-title, group-<id>-item-<n>-title|text|url) et traduites par le filtre wpml_translate_single_string ; wpml-config.xml déclare aussi l'option.
  • Les raccourcis post:<id> et page:<nom> renvoient l'adresse de la traduction (pll_get_post(), filtre wpml_object_id).

Sécurité

  • SVG reconstruits par liste blanche d'éléments et d'attributs (Icon\SvgSanitizer) : ni <script>, ni attribut on*, ni javascript:, ni foreignObject, ni <image>, ni référence externe ; identifiants internes préfixés.
  • Images : extension et contenu réel contrôlés, 1 Mo au plus (200 Ko pour un SVG), 4000 px au plus, noms de fichiers aléatoires.
  • Textes nettoyés à l'enregistrement et échappés à l'affichage ; valeurs de design limitées à des listes fermées.