Programmer des prix promo WooCommerce en masse : dates, heures et fuseaux horaires
Pour programmer un prix promo WooCommerce en masse, vous n'avez besoin d'aucun planificateur : chaque produit possède déjà deux champs de dates de promotion, et c'est WooCommerce lui-même qui active et désactive le prix à ces dates. Ce qui prête à confusion, c'est le fonctionnement de ces dates : ce sont des jours entiers, elles suivent le fuseau horaire de WordPress, et le basculement dépend d'une tâche de fond. Vous trouverez ci-dessous une promotion datée sur des centaines de produits en une seule exécution de BEAR, la raison pour laquelle on ne peut pas définir d'heure, les causes d'une promotion qui démarre avec un jour de décalage ou semble ne jamais se terminer, et la marche à suivre quand le changement n'est pas une promotion.
Programmer un prix promo pour de nombreux produits en une seule modification groupée
Une promotion Black Friday de 25 % du 27 au 30 novembre tient en une seule exécution de l'onglet Modification groupée :
- Sélectionnez les produits dans l'onglet Filtres (Filters) (une catégorie, une étiquette, une marque) et vérifiez la ligne La modification groupée sera appliquée à (Bulk editing will be applied to) en haut de l'onglet Modification groupée.
- Dans la section Principal (Basic), cochez Tarif promo (Sale price), saisissez
25et choisissez tarif régulier moins % (regular price minus %). - Ouvrez la section Supplémentaire (Additional), cochez Début de la promotion (Sale time from) et choisissez le 27 novembre, puis cochez Fin de la promotion (Sale time to) et choisissez le 30 novembre.
- Cliquez sur Effectuer la modification groupée (Do Bulk Edit).
Jusqu'au 27, la boutique continue d'afficher les prix réguliers ; dès le début du 27, les produits sont en promotion, et après la fin du 30, le prix régulier revient. Il n'y a aucune exécution de fin de promotion à ne pas oublier.
Les deux éléments sont indispensables. Les dates ne font que limiter un prix promo dans le temps : des dates sans prix promo ne produisent rien, et un prix promo sans dates est actif immédiatement, jusqu'à ce que vous le supprimiez. Les produits variables conservent leurs prix et leurs dates de promotion au niveau des variations ; ils demandent donc l'interrupteur variations et leur propre exécution. Le choix des produits, l'interrupteur et la bonne opération de prix sont expliqués dans mettre tous les produits en promotion.
Lorsque BEAR enregistre les dates, il définit aussi le prix actif pour l'instant présent : une promotion qui commence aujourd'hui est donc en ligne tout de suite, et une promotion ultérieure garde le prix régulier jusqu'à son jour.
Les dates de promotion sont des jours entiers : pourquoi on ne peut pas définir d'heure
WooCommerce enregistre le début et la fin d'une promotion sous la forme de deux instants, mais son écran produit ne permet de choisir que des dates, et BEAR suit la même règle. Début de la promotion est enregistré à 00:00:00 du jour choisi et Fin de la promotion à 23:59:59 de son jour, dans les deux cas dans le fuseau horaire du site. La date de fin est incluse : une promotion jusqu'au 30 novembre dure tout le 30. Le calendrier de BEAR n'affiche donc que des dates ; une heure saisie n'importe où serait perdue à l'enregistrement.
Deux filtres déterminent quelle extrémité de la journée BEAR utilise. woobe_on_sale_from_set_day (par défaut false, le début de la journée) et woobe_on_sale_to_set_day (par défaut true, la fin de la journée). Par exemple, pour qu'une promotion se termine au début de la date de fin choisie, de sorte que la veille soit le dernier jour de la promotion :
/*
* BEAR: save "Sale time to" as 00:00:00 of the chosen day instead of 23:59:59.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woobe_on_sale_to_set_day', '__return_false');
Ces filtres se contentent de choisir entre les deux extrémités d'une journée ; ils ne permettent pas de programmer une promotion à 18 h 00. L'éditeur de produits WooCommerce enregistre toujours la fin de la journée : un produit qui y est enregistré plus tard revient donc à cette règle. Une promotion qui démarre à une heure précise n'est possible que par du code ou par l'API REST de WooCommerce, qui acceptent une date et une heure complètes.
Les heures semblent aussi décalées lorsqu'elles sont affichées brutes : WooCommerce conserve les instants en UTC, de sorte qu'une promotion qui se termine à 23:59:59 à New York apparaît dans la base de données à 03:59 ou 04:59 le lendemain. C'est le même instant.
Promotion programmée avec un jour de décalage : le fuseau horaire de WordPress
Chaque « début de journée » et « fin de journée » évoqué ci-dessus est calculé dans le fuseau horaire défini sous Réglages → Général → Fuseau horaire (Timezone). Si le site utilise encore UTC+0 alors que la boutique est à Hong Kong, une promotion à partir du 18 novembre démarre à 08:00 heure locale ; pour une boutique à Hawaï, la même promotion démarre à 14:00 le 17, ce qui donne l'impression qu'elle commence un jour trop tôt. La promotion elle-même fonctionne ; elle suit simplement la mauvaise horloge.
- Choisissez une ville dans la liste Fuseau horaire plutôt qu'un décalage fixe UTC+X. Une ville suit l'heure d'été ; un décalage fixe est faux d'une heure pendant la moitié de l'année. Consultez l'écran Réglages généraux dans la documentation de WordPress.
- Après avoir modifié le fuseau horaire, redéfinissez les dates sur les produits de la prochaine promotion : les dates déjà enregistrées conservent les instants calculés avec l'ancien réglage.
- Vérifiez un produit de l'exécution dans l'éditeur de produits WooCommerce. Ses Dates de promotion (Sale price dates) doivent afficher les jours que vous avez choisis.
Promotions à cheval sur un changement d'heure
BEAR convertit le jour choisi avec le décalage que WordPress indique au moment de l'enregistrement. Si les horloges changent entre ce jour et la promotion, comme pour une promotion Black Friday préparée en octobre, la promotion démarre et se termine avec une heure de décalage : de 23:00 la veille au soir à 22:59 le dernier jour, ou de 01:00 le premier jour à 00:59 après le dernier lorsque les horloges changent dans l'autre sens. L'éditeur de produits WooCommerce convertit avec le décalage du jour de la promotion ; il affiche donc l'une des deux dates avec un jour de décalage, et un clic sur Mettre à jour (Update) y enregistre la date qu'il affiche. Quand l'heure exacte compte, définissez les dates après le changement d'heure, et ne réenregistrez pas ces produits dans l'éditeur WooCommerce avant la promotion.
Comment WooCommerce démarre et termine une promotion programmée
BEAR se contente d'écrire le prix promo et les deux dates ; basculer le prix au bon moment est le travail de WooCommerce, et cela fonctionne de la même façon pour les produits modifiés dans BEAR, dans l'éditeur de produits ou par un import. Depuis WooCommerce 10.5, l'enregistrement des dates de promotion crée deux actions de fond par produit, wc_product_start_scheduled_sale et wc_product_end_scheduled_sale, réglées sur l'heure exacte du début et de la fin. Une tâche quotidienne woocommerce_scheduled_sales rattrape tout ce qu'elles auraient manqué. Les versions antérieures s'appuyaient uniquement sur cette tâche quotidienne, ce qui explique que les promotions pouvaient y basculer avec plusieurs heures, voire un jour, de retard.
À la fin d'une promotion, WooCommerce actuel se contente de remettre le prix régulier comme prix actif. Le prix promo et les deux dates restent sur le produit : la boutique affiche le prix régulier et aucun badge de promotion, tandis que l'éditeur de produits et le tableau de BEAR affichent toujours l'ancien prix promo et les anciennes dates. C'est l'état normal d'une promotion terminée, pas une promotion qui ne se serait pas terminée. Les versions antérieures effaçaient le prix promo et les dates à la fin.
Quand une promotion n'a réellement pas démarré ou pas pris fin sur la boutique :
- Vérifiez les actions. Ouvrez WooCommerce → État → Actions planifiées (Scheduled Actions) et recherchez l'ID du produit ou
wc_product_end_scheduled_sale. Une action En attente (Pending) dont l'heure est passée signifie que les tâches de fond ne s'exécutent pas. Échec (Failed) affiche une erreur dans son journal. - Vérifiez WP-Cron. Ces actions sont traitées par WP-Cron, qui ne s'exécute que lorsque le site reçoit des visites. Si
DISABLE_WP_CRONest défini danswp-config.php, une vraie tâche cron du serveur doit appelerwp-cron.phptoutes les quelques minutes ; le guide WordPress sur le raccordement de WP-Cron au planificateur de tâches du système explique comment faire. Sur un site peu visité, une action peut attendre la première visite après son heure. - Videz le cache des pages. Une page de produit ou de catégorie en cache continue d'afficher l'ancien prix jusqu'à ce que le cache soit purgé ou expire.
- Testez sans extensions de remises. Les extensions de tarification et de remises comme Woo Discount Rules calculent elles-mêmes le prix affiché ; une promotion WooCommerce programmée peut donc être masquée ou doublée par leurs règles. Désactivez-les sur une copie de préproduction, ou vérifiez leurs règles pour les mêmes produits.
- Comparez avec WooCommerce lui-même. Donnez à un produit de test les mêmes dates dans l'éditeur de produits WooCommerce. S'il ne bascule pas non plus, la cause est le serveur ou une autre extension, pas la façon dont les dates ont été écrites.
Une nouvelle promotion sur un produit qui en avait déjà une
Comme une promotion terminée conserve ses dates, un nouveau prix promo écrit seul les hérite. Avec une date de fin dans le passé, il ne s'affiche jamais ; avec une ancienne date de fin encore dans le futur, il se termine ce jour-là. Quand vous lancez une nouvelle promotion, écrivez le prix promo et les deux dates dans la même exécution, ou effacez d'abord les anciennes dates.
Un changement de prix futur qui n'est pas une promotion
BEAR applique une opération groupée au moment où vous appuyez sur le bouton ; il ne peut pas la mettre en attente pour l'exécuter à une date. Si le changement est temporaire, écrivez-le comme une promotion avec des dates, comme ci-dessus. Sinon :
- Un nouveau prix régulier à partir d'une date. Préparez le filtre et l'opération à l'avance et lancez-les au moment du changement. Une exécution sur des milliers de produits prend quelques minutes ; consultez modifier en masse des milliers de produits pour les grands catalogues. Les extensions de tarification qui gèrent des règles programmées constituent l'autre voie.
- Deux promotions consécutives, par exemple 15 % jusqu'au 31 août puis 20 % à partir du 1er septembre. Un produit n'a qu'un seul prix promo : la seconde promotion ne peut donc pas être enregistrée pendant que la première est en cours, car écraser le prix promo modifie immédiatement la promotion en cours. Lancez la seconde promotion, avec ses dates, quand la première se termine.
- Pas la date de publication. Une Date de publication (Date Published) future ne programme pas de prix. WordPress transforme ces produits en articles planifiés, et ils disparaissent de la boutique jusqu'à cette date.
Supprimer les dates de promotion en masse ou annuler l'exécution
Pour effacer d'anciennes dates sur de nombreux produits, sélectionnez-les avec les cases à cocher, activez la modification liée (binded editing) et videz la cellule de date de l'un d'eux ; la FAQ sur la suppression des dates de promotion détaille les étapes. Pour trouver les produits dont la promotion est terminée, affichez la colonne Fin de la promotion et triez-la. Le prix promo lui-même se supprime avec -1 et définir une nouvelle valeur (set new), comme décrit dans la FAQ sur la suppression des prix promo.
Une mauvaise date dans une grande exécution n'exige aucune correction manuelle : chaque exécution groupée est une entrée de l'onglet Historique (History), et son annulation rétablit les prix et les dates antérieurs de tous les produits qu'elle a modifiés.
Liste de contrôle avant le début de la promotion
- Réglages → Général → Fuseau horaire correspond à votre ville.
- Le prix promo et les deux dates ont été écrits dans la même exécution ; les produits variables ont eu leur propre exécution avec l'interrupteur variations activé.
- Un produit ouvert dans l'éditeur WooCommerce affiche les Dates de promotion attendues.
- Sous WooCommerce 10.5 ou une version ultérieure, les Actions planifiées listent des actions en attente pour le début et la fin de ce produit, et aucune action en attente n'est en retard.
- Les règles de cache des pages et les extensions de remises ne masqueront pas les nouveaux prix.
Si les dates sont correctes, que les actions s'exécutent et que le prix ne bascule toujours pas, décrivez le produit, les dates et l'état de ses actions planifiées sur le forum d'assistance de BEAR.