Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/lucas-tsl/lsg-reward-calendar/archive/refs/heads/main.zipWC requires at least: 6.0 Stable tag: 1.9.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html
Crée des calendriers à cases déblocables par date (calendrier de l'Avent, etc.) : chaque case révèle un avantage lié à un code promo WooCommerce existant.
Description
LSG Reward Calendar permet de créer, sans code, des calendriers de type "calendrier de l'Avent" : une grille de cases numérotées, chacune ne devenant ouvrable qu'à partir d'une date précise. À l'ouverture, la case révèle un texte, une image et — si un code promo WooCommerce est renseigné — un bouton pour l'ajouter directement au panier du visiteur.
Le plugin ne configure pas lui-même les réductions : les codes promo doivent déjà exister dans WooCommerce, éventuellement enrichis via Woo Discount Rules Pro (pourcentage, produit offert, etc.). LSG Reward Calendar se contente d'associer une case à un code et de l'appliquer au panier via l'API standard WooCommerce (WC_Cart::apply_coupon()), ce qui le rend compatible avec n'importe quelle configuration de coupon, avec ou sans Woo Discount Rules Pro.
Fonctionnement
- Un post type "Calendriers" pour créer autant de templates que voulu (Noël, anniversaire de la boutique, etc.), réutilisable d'une année sur l'autre.
- Pour chaque calendrier : une case par jour, avec sa date de déblocage, son code promo, une accroche, une description et une image.
- Affichage via shortcode
[lsg_reward_calendar id="123"]ou bloc Gutenberg "Calendrier à cases". - Trois habillages visuels de base — Noël (rouge/vert), Neutre, et La Maison (mise en page "bento" asymétrique en aplats, sans ombre ni flou, alignée sur le langage graphique réel du thème : couleurs, typographie Cardo, rayon des boutons) — personnalisables (couleurs, rayon, bordure) depuis le back-office, avec aperçu en direct dans l'écran d'édition avant même d'enregistrer.
- Chaque case peut être associée à un produit WooCommerce : une mini-fiche (image, nom, prix, lien) s'affiche dans la modale à la place d'un simple code promo brut.
- La case du jour est mise en avant, les cases verrouillées affichent un compte à rebours ("J-3"), et une barre de progression indique le nombre de cases déjà ouvertes.
- Import/export JSON d'un calendrier (style + cases) et bouton "Dupliquer ce calendrier", pratiques pour réutiliser une configuration d'une année sur l'autre.
- Le message affiché sur une case pas encore ouvrable, le bouton "Ajouter au panier" et ses messages de succès/erreur sont personnalisables par calendrier.
- Le nombre total d'ouvertures de case (tous visiteurs confondus) est affiché dans le back-office.
- Les endpoints AJAX sont protégés par une limite de requêtes par IP, pour éviter qu'un script les bourre.
- La date de déblocage est vérifiée côté serveur à chaque ouverture de case : impossible de récupérer un code avant sa date, quel que soit ce qui est fait côté navigateur.
- Fonctionne pour les visiteurs connectés et non connectés (état "case ouverte" mémorisé en local sur l'appareil du visiteur).
- Habillage "La Maison" : cases en légère bascule 3D au survol (vanilla-tilt.js), entrée en cascade de la grille, révélation en douceur du contenu de la modale, confettis (canvas-confetti) à l'ouverture d'une case, lueur qui suit le curseur et dégradé de fond animé, case du jour mise en scène avec un vrai badge, rebond au déverrouillage d'une case, révélation "ressort" du titre et du code dans la modale.
Installation
- Copier le dossier
lsg-reward-calendardans/wp-content/plugins/. - Activer le plugin.
- Créer les codes promo nécessaires dans WooCommerce (et, si besoin, les affiner avec Woo Discount Rules Pro).
- Menu "Calendriers" → Ajouter un calendrier → renseigner une case par jour (date, code promo, accroche, description, image).
- Coller le shortcode sur une page, ou insérer le bloc "Calendrier à cases" et choisir le calendrier.
Bibliothèques tierces
Deux petites bibliothèques JS sont embarquées dans assets/js/vendor/ (chargées depuis le plugin, jamais depuis un CDN externe, pour ne pas exposer l'IP des visiteurs à un tiers) :
- canvas-confetti (v1.9.4) — https://github.com/catdad/canvas-confetti — MIT — rendu des confettis à l'ouverture d'une case.
- vanilla-tilt.js — https://github.com/micku7zu/vanilla-tilt.js — MIT — effet de bascule 3D au survol des cases (habillage "La Maison" uniquement).
Changelog
1.9.0
- Ajoute une lueur chaude qui suit le curseur sur la grille "La Maison", et un dégradé de fond qui évolue lentement au repos.
- La case du jour affiche désormais un vrai badge ("Aujourd'hui") plutôt qu'un simple liseré doré ; la grande case bento reçoit une légende dédiée ("Surprise du jour").
- Ajoute un rebond franc sur la case au moment précis de son déverrouillage, et une révélation "ressort" (dépassement/retour) du titre et du code dans la modale de l'habillage "La Maison".
- Enrichit les confettis à l'ouverture d'une case (trois tirs en éventail plutôt qu'un seul jet).
- Corrige la pulsation des cases disponibles de l'habillage "La Maison" : depuis l'ajout de l'entrée en cascade (1.8.0), elle ne se jouait plus qu'une fois (0,5 s) au lieu de boucler en continu.
1.8.0
- Ajoute un effet de bascule 3D au survol des cases (vanilla-tilt.js), réservé à l'habillage "La Maison".
- Remplace le système de confettis fait maison par canvas-confetti (rendu plus réaliste, gravité/dispersion).
- Ajoute une entrée en cascade des cases à l'affichage de la grille, et une révélation en douceur du contenu de la modale (image, titre, description…) à chaque ouverture.
- Toutes ces animations respectent la préférence système "mouvement réduit" (désactivées si demandé).
1.7.0
- Refond la "matière" de l'habillage "La Maison" : abandonne le verre dépoli (glassmorphism) au profit d'aplats francs sans ombre ni flou, conformes au vrai langage graphique du thème (theme.json) — ce dernier n'utilise nulle part de flou ou d'ombre portée, contrairement à la première version de cet habillage. La mise en page en mosaïque ("bento") est conservée à l'identique.
- Cases : fond blanc/aplat coloré, bordure fine
1px solid, bascule en gris foncé au survol (identique aux boutons du thème), rayon aligné sur celui des boutons (6px au lieu de 14px). - Modale : panneau à bord franc (filet 1px) plutôt que flouté/vitré.
1.6.0
- Ajoute la personnalisation, par calendrier, du bouton "Ajouter au panier" (libellé, texte pendant l'ajout, texte après succès) et des messages de succès/erreur génériques.
- Ajoute un compteur d'ouvertures de case (tous visiteurs confondus) affiché dans le back-office.
- Ajoute une limite de requêtes par IP (20/minute) sur les deux endpoints AJAX du calendrier, pour éviter qu'un script les bourre.
- Corrige l'aperçu du back-office : il affichait 4 cases fictives systématiquement au lieu des vraies cases enregistrées (nombre, numéros, état verrouillé/ouvrable réel).
1.5.0
- Ajoute un réglage par calendrier pour personnaliser le message affiché sur une case pas encore ouvrable (au lieu du texte fixe "Cette case n’est pas encore ouvrable."), avec
%sremplacé par la date de déblocage formatée selon les réglages du site. - Ce message sert aussi désormais d'info-bulle (survol) sur les cases verrouillées, à la place d'un texte séparé non personnalisable.
- Ajoute deux tests unitaires légers (sans dépendance) sur ce nouveau réglage, dont un qui aurait attrapé un bug qu'on a évité de justesse : un message personnalisé contenant un "%" isolé (ex. "-10%") aurait fait planter le rendu du calendrier avec l'implémentation initiale (sprintf).
1.4.0
- Ajoute le piège de focus (Tab/Maj+Tab) dans la modale, en plus de la fermeture au clavier déjà existante.
- Ajoute la possibilité d'associer un produit WooCommerce à une case : une mini-fiche (image, nom, prix, lien) remplace le code promo brut dans la modale.
- Ajoute un bouton "Dupliquer ce calendrier" dans le back-office, pour réutiliser une configuration d'une année sur l'autre sans passer par l'export/import JSON.
- Met en avant la case du jour (repère visuel) et affiche un compte à rebours ("J-3") sur les cases encore verrouillées.
- Ajoute une barre de progression ("X / Y cases ouvertes") sous la grille.
- Ajoute une petite pluie de confettis à l'ouverture d'une case (désactivée si "mouvement réduit" est demandé).
- Ajoute un test unitaire léger (sans dépendance) sur la logique de déblocage par date, exécuté en CI ; la CI lint désormais aussi les fichiers PHP du plugin (elle ne couvrait que le thème).
1.3.0
- Corrige le contraste insuffisant (normes AA) du texte sur les cases ouvertes et le bouton d'application du code dans l'habillage "La Maison".
- Ajoute la fermeture au clavier (touche Échap), le retour du focus sur la case cliquée à la fermeture, et un anneau de focus visible sur les cases/boutons pour tous les habillages.
- Respecte la préférence système "mouvement réduit" (désactive les animations/transitions).
- Ajoute un repli visuel pour les navigateurs sans support de
backdrop-filtersur l'habillage "La Maison". - Ajoute des halos de couleur derrière la grille "La Maison" pour que l'effet de verre dépoli soit réellement visible, et un reflet lumineux au survol des cases.
- Ajoute un retour visuel ("Ajout en cours…", "Code ajouté ✓") sur le bouton d'application du code promo.
- Corrige l'absence de style pour le texte de description révélé dans la modale (tous habillages).
1.2.0
- Modernise l'habillage "La Maison" : disposition en mosaïque asymétrique ("bento"), effet verre dépoli (glassmorphism) sur les cases et le fond, cases irrégulières mises en avant.
- Transforme la modale "La Maison" en panneau vitré coulissant depuis le bord (plein écran depuis le bas sur mobile), avec transition d'ouverture/fermeture.
1.1.0
- Ajoute l'habillage "La Maison" : couleurs et typographie alignées sur le thème du site (à la place du seul rouge/vert de Noël).
- Ajoute un aperçu en direct des réglages visuels (habillage, couleurs, rayon, bordure) dans l'écran d'édition du calendrier, avant même d'enregistrer.
- Ajoute la personnalisation visuelle du calendrier (couleurs, rayon, bordure) depuis le back-office.
- Ajoute l'import/export JSON d'un calendrier et corrige l'auteur du plugin.
- Corrige la modale qui restait affichée en permanence après fermeture.
- Corrige la comparaison de la date de déblocage des cases.
1.0.0
- Version initiale.