Extender for Back In Stock Notifier releases
A wordpress / woocommerce plugin that extends the free possibilities of the Back In Stock Notifier plugin
by Benoit Bonavia · github.com/benoitbonavia/extender-for-back-in-stock-notifier · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/benoitbonavia/extender-for-back-in-stock-notifier/releases/download/v0.6.2/extender-for-back-in-stock-notifier-0.6.2.zipReadme
Extender for Back In Stock Notifier
Extension maison de Back In Stock Notifier for WooCommerce | WooCommerce Waitlist Pro (ProPluginsLab). Elle ne remplace pas le plugin hôte : elle s'y accroche, et ne fonctionne pas sans lui.
- Version : 0.6.2
- Prérequis : WordPress 6.8+, PHP 7.4+, WooCommerce 9.9+ (testé jusqu'à 11.0), Back In Stock Notifier 7.0+ (relu sur 7.4.2)
- Préfixe :
ebisn_(options, hooks) /EBISN\(namespace PHP) - Text domain :
extender-for-back-in-stock-notifier(doit rester identique au slug du dossier) - Licence : GPL-3.0-or-later — alignée sur celle du plugin hôte, pour qu'adapter un de ses gabarits reste possible sans problème de compatibilité
Arborescence
extender-for-back-in-stock-notifier/
├── extender-for-back-in-stock-notifier.php Fichier principal : en-tête, constantes, hooks d'amorçage
├── readme.txt Métadonnées au format WordPress.org (lues pour la fiche de mise à jour)
├── uninstall.php Purge des données ebisn_* à la suppression (sur opt-in)
├── .gitattributes export-ignore : fichiers exclus des archives
├── .github/workflows/release.yml Construit et publie l'archive sur push d'un tag v*
├── bin/build-plugin-zip.sh Construction reproductible de l'archive d'installation
├── lib/plugin-update-checker/ Bibliothèque tierce embarquée (Plugin Update Checker 5.7)
├── composer.json Autoload PSR-4 + outillage de dev (PHPCS, PHPStan)
├── phpcs.xml.dist Règles WordPress Coding Standards
├── phpstan.neon.dist Analyse statique avec stubs WordPress/WooCommerce
├── assets/
│ ├── css/admin.css
│ └── js/admin.js
├── languages/ Fichiers .pot / .po / .mo
└── src/
├── Autoloader.php Autoload PSR-4 sans Composer
├── functions.php Helpers globaux : ebisn(), ebisn_log()
├── Plugin.php Conteneur : amorçage + registre des modules
├── Updater.php Mises à jour depuis les releases GitHub
├── Requirements.php Vérification WooCommerce + plugin hôte
├── Installer.php Activation / désactivation / migrations
├── Integration/
│ ├── BackInStockNotifier.php Tout ce qu'on sait du plugin hôte
│ └── Brevo.php Tout ce qu'on sait des extensions Brevo
├── Admin/
│ ├── Admin.php Hooks admin, assets, lien « Réglages »
│ ├── SettingsPage.php Écran de réglages, sous le menu de l'hôte
│ ├── SettingsFields.php Sections et champs de réglages
│ ├── StatsBanner.php Bandeau d'indicateurs sur la liste des inscrits
│ ├── SizeMatrixPage.php Écran « Demandes par taille »
│ ├── SizeMatrixTable.php WP_List_Table à colonnes dynamiques
│ └── BrevoBackfillPage.php Lancement et suivi du rattrapage Brevo
├── Conversion/ Détection d'achat et statut « Purchased »
│ ├── ConversionService.php SEUL point d'écriture d'un statut d'inscription
│ ├── OrderMatcher.php Règles d'appariement, sans accès base
│ ├── SubscriptionRepository.php Lectures d'inscriptions en SQL préparé
│ ├── OrderLookup.php Recherche de commandes (HPOS et stockage historique)
│ ├── RealtimeListener.php Conversion au fil de l'eau et retours en arrière
│ ├── Backfill.php Rattrapage automatique sur l'historique
│ ├── NotificationSuppressor.php Bloque l'alerte pour qui a déjà acheté
│ ├── Stats.php Calcul des indicateurs, mis en cache
│ └── MetaKeys.php Clés de métadonnées, actuelles et héritées
├── Brevo/ Synchronisation vers Brevo
│ ├── Client.php Transport HTTP
│ ├── Response.php Verdicts : succès, réessayable, définitif, authentification
│ ├── Contacts.php Contacts, imports, listes, attributs
│ ├── Lists.php Listes du compte, mises en cache
│ ├── ContactState.php Table de suivi, idempotence par empreinte
│ ├── PayloadBuilder.php Attributs agrégés sur toutes les attentes d'une adresse
│ ├── AttributeInstaller.php Déclaration des attributs chez Brevo
│ ├── SyncService.php Synchro au fil de l'eau, avec report exponentiel
│ ├── Backfill.php Rattrapage en masse, suivi des imports
│ └── Consent.php Case de consentement et preuve horodatée
├── Matrix/ Croisement des demandes par déclinaison
│ ├── DemandMatrix.php Collecte agrégée, mise en cache
│ ├── AttributeResolver.php Choix de l'attribut d'axe et ordre des colonnes
│ └── MatrixExporter.php Export CSV, formules neutralisées
├── Unsubscribe/ Désabonnement d'une alerte
│ ├── UnsubscribeService.php Délègue l'écriture à l'API de l'hôte
│ ├── StatusRecorder.php Mémorise le statut quitté, quel qu'en soit l'auteur
│ ├── SubscriberLocator.php Reconnaît le visiteur et ses inscriptions
│ ├── VisitorCookie.php Jeton opaque de navigateur
│ ├── ProductForm.php Encart sur la fiche produit, point d'entrée AJAX
│ └── EmailLink.php Lien signé des e-mails
├── Renotify/ Renotification à chaque nouvelle rupture
│ ├── RenotifyService.php Remise en attente via l'API de l'hôte, comptage des cycles
│ ├── SubscriptionQuery.php Inscriptions notifiées, par produit ou par curseur
│ ├── StockWatcher.php Écoute les ruptures, diffère le traitement
│ └── Backfill.php Rattrapage des inscriptions déjà bloquées
├── Migration/
│ └── LegacyConversionMeta.php Reprise des métadonnées des snippets WPCode
├── Modules/
│ ├── ModuleInterface.php Contrat d'un module
│ ├── AbstractModule.php Base : activation pilotée par option
│ ├── PurchaseConversion.php Module « Purchased »
│ ├── ConversionStats.php Module « indicateurs »
│ ├── Renotify.php Module « Renotification » (désactivé par défaut)
│ ├── SizeMatrix.php Module « Demandes par taille »
│ ├── Unsubscribe.php Module « Désabonnement »
│ ├── HideAddToCart.php Module « Masquer l'ajout au panier »
│ └── BrevoSync.php Module « Brevo » (désactivé par défaut)
└── Support/
├── Settings.php Lecture/écriture des options ebisn_*
├── Logger.php Journaux WooCommerce (source extender-bisn)
├── Scheduler.php Unique point de contact avec Action Scheduler
├── Lock.php Verrou atomique entre processus
├── JobState.php État persistant d'un traitement par lots
├── BatchJob.php Contrat d'un traitement par lots
├── BatchRunner.php Moteur par lots : budget, curseur, chaînage
└── SnippetGuard.php Met un module en veille si son snippet tourne encore
Modules
| Module | Identifiant | Actif par défaut | Rôle |
|---|---|---|---|
| Marquer « Purchased » | purchase_conversion |
oui | Fait passer une inscription au statut cwg_converted quand son titulaire commande le produit attendu, au fil de l'eau et sur tout l'historique. Annule la conversion en cas de remboursement ou d'annulation. |
| Valeur des listes d'attente | conversion_stats |
oui | Affiche au-dessus de la liste des inscrits la valeur en attente, le chiffre d'affaires récupéré et le taux de conversion. |
| Renotification | renotify |
non | Remet en attente une inscription déjà notifiée dès que son produit repasse en rupture, et recommence à chaque cycle jusqu'à l'achat ou le désabonnement. Reste en veille tant que l'option keep_status_subscribed de l'hôte est cochée. |
| Demandes par taille | size_matrix |
oui | Écran croisant les demandes par produit et par déclinaison, avec recherche, tri, pagination et export CSV. L'attribut porté en colonnes et les statuts comptés sont réglables. |
| Désabonnement | unsubscribe |
oui | Remplace le formulaire d'inscription par un bouton de désabonnement, et fournit un lien signé aux e-mails. Libellé et messages réglables. |
| Masquer l'ajout au panier | hide_add_to_cart |
non | Retire le sélecteur de quantité et le bouton d'ajout au panier là où une alerte de retour en stock est proposée. |
| Synchronisation Brevo | brevo_sync |
non | Pousse les adresses inscrites vers une liste Brevo. Dépend de l'extension Brevo (mailin) ou d'une clé d'API saisie manuellement. |
Dépendance optionnelle à Brevo
Brevo n'est pas déclarée dans l'en-tête Requires Plugins : cela rendrait l'extension
entière inactivable sans elle alors qu'un seul module la concerne. La détection se fait à
l'exécution, avec trois sources de clé d'API dans cet ordre : l'option de l'extension Brevo,
son nom en dur, puis une clé saisie dans les réglages.
Attention : seule l'extension Brevo (slug mailin) détient une clé d'API v3. Le
connecteur « Brevo for WooCommerce » n'en stocke plus depuis sa version 4 — un site n'ayant
que celui-ci doit saisir sa clé manuellement.
Reprise depuis les snippets WPCode
Le plugin remplace six snippets. La bascule est conçue pour être transparente :
- Mise en veille automatique. Tant qu'un snippet remplacé est encore chargé, le module correspondant ne s'accroche à rien et le signale dans le panneau Diagnostic. Sans cela, les deux traiteraient les mêmes données en parallèle.
- Migration des métadonnées. Les clés
mh_bisn_order_idetmh_bisn_converted_onsont reprises sous le préfixe_ebisn_, par lots, puis supprimées. Ces conversions héritées sont marquées comme telles : les snippets n'enregistraient pas le statut d'origine, elles ne peuvent donc pas être annulées. - Marqueur de commande.
_mh_bisn_convertedn'est plus lu ni écrit — l'idempotence vient désormais d'une mise à jour conditionnelle du statut. Il est laissé en place, inerte : le purger sur l'ensemble des commandes coûterait davantage que le bénéfice, et sous HPOS il vit danswc_orders_meta. - Rattrapage Brevo. Si l'option
mh_brevo_backfill_jobdu snippet est trouvée en base avec au moins un lot traité, le rattrapage est marqué comme déjà effectué et rien n'est renvoyé. - Demandes par taille. Les constantes
MH_BISN_MX_STATUS,MH_BISN_MX_SIZE_ATTRetMH_BISN_MX_CACHE_TTLsont reprises comme valeurs initiales des réglages si elles sont définies au moment de la migration. L'ancienne adressepage=mh-bisn-matriceredirige vers la nouvelle page, et le cache du snippet est purgé.
Traitements de fond
Tous passent par Action Scheduler, sous le groupe ebisn, visibles dans
WooCommerce → État → Actions programmées.
| Hook | Rôle |
|---|---|
ebisn_convert_order |
Traite une commande hors du tunnel de paiement |
ebisn_purchase_backfill_step |
Une étape du rattrapage sur l'historique |
ebisn_legacy_conversion_meta_step |
Une étape de la migration des métadonnées |
ebisn_brevo_sync_contact |
Synchronise une adresse vers Brevo |
ebisn_brevo_backfill_step |
Une étape du rattrapage Brevo |
ebisn_brevo_backfill_poll |
Vérifie l'issue d'un import Brevo |
ebisn_renotify_product |
Remet en attente les inscrits d'un produit repassé en rupture |
ebisn_renotify_backfill_step |
Une étape du rattrapage des renotifications |
Les arguments passés sont toujours scalaires : wp-cron.php transmet les arguments
d'un événement sans les réindexer, et une clé de chaîne devient un argument nommé en PHP 8 —
donc une erreur fatale qui interrompt l'intégralité du run cron.
## La règle qui structure tout : `Integration\BackInStockNotifier`
Ce plugin s'accroche à du code qu'il ne maîtrise pas. **Aucune classe, hors
`src/Integration/BackInStockNotifier.php`, ne doit écrire en dur `cwginstock`,
`CWGINSTOCK_*` ou `CWG_Instock_Notifier`.** Slugs, constantes, types de contenu, noms
d'options : tout passe par cette classe. Le jour où l'hôte renomme quelque chose, un seul
fichier bouge — et le diagnostic prévient quand il change de version majeure.
## Ajouter un module
1. Créer `src/Modules/MonModule.php` :
```php
<?php
namespace EBISN\Modules;
defined( 'ABSPATH' ) || exit;
final class MonModule extends AbstractModule {
protected $id = 'mon_module';
protected $title = 'Mon module';
public function register(): void {
add_action( 'cwginstock_after_insert_subscriber', array( $this, 'on_subscribe' ), 10, 2 );
}
public function on_subscribe( $subscriber_id, $data ): void {
// …
}
}
- Le référencer dans
Plugin::get_module_classes(). - Il apparaît alors dans WooCommerce → Réglages → Extender BIS → Modules, avec sa propre
case d'activation (
ebisn_module_mon_module_enabled).
Surface d'extension du plugin hôte
Relevé sur l'archive 7.4.2 (cwginstocknotifier.php, dossier
back-in-stock-notifier-for-woocommerce/). À revérifier à chaque changement de version
majeure de l'hôte — c'est précisément ce que signale le panneau Diagnostic.
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v0.6.2 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.6.2.zip | 2 |
| v0.6.1 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.6.1.zip | 2 |
| v0.6.0 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.6.0.zip | 2 |
| v0.5.2 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.5.2.zip | 2 |
| v0.5.1 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.5.1.zip | 2 |
| v0.5.0 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.5.0.zip | 2 |
| v0.4.6 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.4.6.zip | 2 |
| v0.4.5 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.4.5.zip | 2 |
| v0.4.4 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.4.4.zip | 2 |
| v0.4.3 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.4.3.zip | 2 |
| v0.4.2 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.4.2.zip | 2 |
| v0.4.1 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.4.1.zip | 2 |
| v0.4.0 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.4.0.zip | 1 |
| v0.3.2 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.3.2.zip | 1 |
| v0.3.1 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.3.1.zip | 1 |
| v0.3.0 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.3.0.zip | 2 |
| v0.2.1 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.2.1.zip | 3 |
| v0.2.0 | Sep 6, 2026 | extender-for-back-in-stock-notifier-0.2.0.zip | 2 |