Accueil

Référence développeur · WordPress

Websource Nouveautés pour WordPress — référence développeur

Bloc, code court, fonction PHP, filtres, actions, routes REST, format d'export et variables CSS de l'extension Websource Nouveautés.

Version 1.3.0 · WordPress 6.4+, WooCommerce 8+, PHP 7.4 à 8.5 · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : PrestaShop

Vue d'ensemble

  • Espace de noms Websource\NewProducts, classes dans src/ (chargeur PSR-4 maison, pas de Composer).
  • Données : option wsx_newproducts_blocks (tableau de blocs assainis, 30 au plus), option wsx_newproducts_settings (new_days), transients wsx_np_* (identifiants de produits, 5 minutes), option wsx_newproducts_cache_v (génération du cache), wsx_newproducts_version.
  • Capacité requise pour l'administration : manage_woocommerce.
  • Inerte sans WooCommerce : le code court renvoie une chaîne vide, un avis s'affiche dans l'administration.
ClasseRôle
PluginAmorçage, rendu d'un bloc, assets, cache, code court, hub d'export / import.
Settings\BlockStore, Sanitizer, Defaults, SourceCatalogStockage, assainissement, valeurs par défaut, catalogue des sources.
Query\ProductQuery, IdCacheIdentifiants de produits par source et contexte, cache.
Placement\Placements, PageDetector, DispatcherEmplacements, type de page, insertion automatique (thèmes à blocs et classiques).
Render\CardBuilder, StyleBuilder, JsonLdBuilderCarte produit, variables CSS, JSON-LD.
Block\ProductsBlock, Rest\RestController, Admin\AdminPage, ThemePackage\ThemePackageBloc Gutenberg, REST, écran de réglages, export / import.

Bloc Gutenberg websource/products

Rendu serveur (block.json, apiVersion 3, éditeur sans build). Catégorie WooCommerce.

AttributTypeDéfautRôle
blockIdinteger0Numéro du bloc à afficher (0 = premier bloc actif).
titlestring""Titre de remplacement pour cette page.
hideTitlebooleanfalseMasque le titre.
countinteger0Nombre de produits (0 = valeur du bloc, 1 à 24).
columnsinteger0Colonnes sur grand écran (0 = valeur du bloc, 2 à 6).
layout"", grid, carousel""Disposition (vide = valeur du bloc).
alignwide, full, ""—Alignement.
<!-- wp:websource/products {"blockId":2,"count":4,"layout":"carousel","align":"wide"} /-->

Code court [websource_newproducts]

AttributRôle
blockNuméro du bloc (0 = premier bloc actif).
titleTitre de remplacement (vide = sans titre).
count1 à 24.
columns2 à 6.
layoutgrid ou carousel.
classClasses CSS ajoutées à la section.
[websource_newproducts block="8" title="Notre sélection du moment" columns="3"]

Fonctions PHP

echo websource_newproducts_render(['block' => 2, 'count' => 4, 'layout' => 'carousel']);

websource_newproducts_render(array $options = []): string accepte les mêmes clés que le code court. Les blocs enregistrés sont lisibles par \Websource\NewProducts\Plugin::instance()->store()->all().

Emplacements automatiques

EmplacementThème à blocsThème classique
homefin du core/groupmain de la page d'accueilwoocommerce_after_main_content ou loop_end de la requête principale
under_headeraprès la partie de modèle headeractions websource_theme_after_header, storefront_before_content, astra_header_after, generate_after_header, kadence_after_header, ocean_after_header, neve_after_header_wrapper_hook, __after_header (filtre websource_newproducts_position_hooks)
category_footerfin du main des pages catégorieswoocommerce_after_main_content
product_footerwoocommerce_after_single_product (priorité 30)idem
cartaprès le bloc woocommerce/cart ou woocommerce_after_cartwoocommerce_after_cart
before_footeravant la partie de modèle footerget_footer
footerdans la partie de modèle footerwp_footer (priorité 1)
customaction WordPress saisie (do_action('…') dans le thème)idem
nonejamais (bloc ou code court seulement)—

Filet de sécurité en thème à blocs : les emplacements non trouvés sont imprimés dans wp_footer. Les sections placées automatiquement portent la classe wsnp--placed (ou wsnp--placed-in alignwide dans le contenu).

Pages reconnues (PageDetector, filtre websource_newproducts_current_page) : home, shop, category, product, cart, checkout, cms, blog, search.

Filtres

FiltreParamètresRôle
websource_newproducts_product_idsint[] $ids, array $settings, array $optionsIdentifiants retenus pour un bloc, après cache.
websource_newproducts_query_argsarray $args, array $optionsArguments WP_Query des sources par requête.
websource_newproducts_cache_ttlint $seconds (300)Durée du cache des identifiants.
websource_newproducts_cardarray $card, WC_Product $product, array $settingsDonnées d'une carte (id, url, name, image, price_html, badges, cart).
websource_newproducts_badgesarray $badges, WC_Product $product, string[] $allowedPastilles (type => libellé) dans l'ordre choisi.
websource_newproducts_button_urlstring $url, array $settingsAdresse du bouton « Voir tout ».
websource_newproducts_viewarray $view, array $settingsVariables passées au gabarit section.php.
websource_newproducts_htmlstring $html, array $settings, array $viewHTML final d'un bloc.
websource_newproducts_json_ldarray $data, array $itemsNœud ItemList.
websource_newproducts_seller_idstring $id, array $settings@id du vendeur (<accueil>#organization).
websource_newproducts_templatestring $path, string $nameChemin d'un gabarit (section.php, item.php).
websource_newproducts_position_hooksstring[] $actions, string $positionActions de thème classique pour « sous l'en-tête ».
websource_newproducts_current_pagestring $pageType de page détecté.
websource_theme_exportarray $packageAjoute la section newproducts à un paquet de thème.

Actions

ActionParamètresMoment
websource_newproducts_blocks_savedarray $blocksAprès chaque enregistrement de la liste des blocs (vide aussi le cache).
websource_theme_importarray $packageImporte la section newproducts d'un paquet ($package['merge'] pour ajouter).

Évènement JavaScript : websource_newproducts_added_to_cart sur document (detail.productId, detail.response) après un ajout AJAX ; wc-blocks_added_to_cart et added_to_cart (jQuery) sont aussi déclenchés pour les compteurs de panier.

Gabarits

Surchargeables dans votre-theme/websource-newproducts/section.php et item.php. section.php reçoit $view (uid, block_id, layout, is_carousel, class, style, title, subtitle, show_button, button_label, button_url, labels, cards, json_ld, item_template) ; item.php reçoit $card.

Structure : section.wsnp.wsnp--grid|wsnp--carousel[.wsnp--custom] > .wsnp__head (.wsnp__title, .wsnp__subtitle, .wsnp__nav avec [data-wsnp-prev] / [data-wsnp-next]) + .wsnp__track[data-wsnp-track] > .wsnp-item > article.wsnp-card[data-product-id] + .wsnp__more > a.wsnp__link.

Routes REST

Espace websource-newproducts/v1.

MéthodeCheminAccèsParamètresRôle
GET/productsmanage_woocommercesearch (nom, UGS ou numéro)Recherche de produits pour la sélection manuelle.
GET/blocksedit_posts—Liste des blocs pour l'éditeur.
GET /wp-json/websource-newproducts/v1/products?search=sac
X-WP-Nonce: <nonce wp_rest>
[
  { "id": 42, "name": "Sac à dos Nordik", "sku": "WS-007", "image": "https://exemple.fr/wp-content/uploads/2026/10/sac-a-dos-nordik-150x150.jpg" },
  { "id": 39, "name": "Sac cabas Atelier", "sku": "WS-006", "image": "…" }
]
GET /wp-json/websource-newproducts/v1/blocks
[
  { "id": 1, "name": "Nouveautés", "source": "native", "active": true, "placement": "Page d’accueil" }
]

Sans nonce ou sans droit : 401 / 403.

Export / import

admin-post.php?action=wsx_newproducts_export (nonce) télécharge websource-newproducts-<date>.json :

{
  "section": "newproducts",
  "version": 1,
  "plugin": "1.3.0",
  "data": {
    "new_days": 30,
    "blocks": [
      {
        "id": 7, "name": "Une catégorie", "active": true,
        "position": "none", "hook": "", "page": "all",
        "title": "Pour la maison", "subtitle": "", "button_label": "Voir tout", "show_button": true,
        "count": 8, "source": "category", "category": "category:maison", "products": [],
        "sort": "newest", "period_days": 30, "layout": "grid", "columns": 3,
        "show_badges": true, "badges": ["new", "discount", "on-sale", "pack", "out_of_stock"],
        "show_cart": true, "lazy_images": true, "json_ld": true,
        "use_theme_design": false, "bg_color": "#14282b", "title_color": "#ffffff", "borders": "without", "radius": "lg"
      }
    ]
  }
}

Références stables : category:<slug>, product:<UGS>, product-slug:<slug>. ThemePackage::import(BlockStore $store, array $section, bool $merge): ?array renvoie ['blocks' => n, 'warnings' => [références introuvables]], ou null si le fichier n'est pas une section newproducts.

Valeurs d'un bloc

CléValeurs
sourcenative, featured, bestsellers, specials, viewed, related, crosssell, category, manual
positionhome, under_header, category_footer, product_footer, cart, before_footer, footer, custom, none
pageall, home, shop, category, product, cart, checkout, cms, blog, search
sortposition, newest, oldest, name_asc, price_asc, price_desc
period_days7, 30, 90, 180, 365, 0 (toujours)
layoutgrid, carousel
badgessous-ensemble ordonné de new, discount, on-sale, pack, out_of_stock
bordersinherit, with, without
radiusinherit, none, sm, md, lg, xl
count / columns1 à 24 / 2 à 6

Variables CSS

La feuille assets/css/front.css lit le thème avec repli :

Variable lueRepliUsage
--wst-brand, --color-brand-600#0f766ePastilles, bouton, flèches.
--wst-brand-50, --color-brand-50teinte claireFond du bouton d'ajout.
--wst-brand-on, --color-brand-on#ffffffTexte sur la couleur de marque.
--wst-ink, --color-ink#14282bTexte.
--wst-line, --color-line#d9e6e4Bordures des cartes.
--wst-surface, --color-surface#ffffffFond des cartes.
--wst-radius-xl, --radius-xl / --wst-radius-2xl, --radius-2xl1rem / 1.5remArrondis.
--wst-card-shadownoneOmbre des cartes.
--wst-font-head, --font-headpolice du thèmeTitre.
--wst-container, --wp--style--global--wide-size80remLargeur des sections placées automatiquement.

Variables posées sur chaque section (attribut style, surchargeables) : --wsnp-cols, --wsnp-cols-md, --wsnp-bg, --wsnp-title, --wsnp-line, --wsnp-shadow, --wsnp-radius, --wsnp-radius-lg.

Cookies et cache

  • Cookie wsx_np_viewed : 20 derniers produits consultés, posé seulement si un bloc utilise la source « déjà vus ».
  • Transients wsx_np_<hash> : identifiants par bloc, langue, devise et contexte ; vidés sur woocommerce_update_product, woocommerce_new_product, woocommerce_delete_product, woocommerce_trash_product, woocommerce_product_set_stock, woocommerce_variation_set_stock, woocommerce_product_set_visibility, woocommerce_order_status_changed, woocommerce_scheduled_sales, transition_post_status d'un produit, edited_product_cat, delete_product_cat, enregistrement des blocs. Un résultat vide n'est pas mis en cache.

Traductions

Domaine websource-newproducts, fichiers languages/websource-newproducts-fr_FR.po|mo et .json pour les scripts. Textes saisis : wpml-config.xml (admin-texts sur wsx_newproducts_blocks) et pll_register_string (groupe « Websource New Products »).