{"id":371156,"date":"2026-09-24T21:41:48","date_gmt":"2026-09-24T21:41:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/limbus-happy-hours-for-woocommerce\/"},"modified":"2026-09-24T21:41:27","modified_gmt":"2026-09-24T21:41:27","slug":"limbus-happy-hours-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/limbus-happy-hours-for-woocommerce\/","author":14388257,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.9.3","stable_tag":"1.9.3","tested":"7.1.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Limbus Happy Hours for WooCommerce","header_author":"Limbus Studio","header_description":"Schedule happy hour campaigns on WooCommerce: a percentage discount on selected product categories, popup, banner\/slider shortcode, countdowns on products and per-campaign sales statistics.","assets_banners_color":"ffcc00","last_updated":"2026-09-24 21:41:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/limbus.fr","rating":0,"author_block_rating":0,"active_installs":0,"downloads":99,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.9.3":{"tag":"1.9.3","author":"contlimbu","date":"2026-09-24 21:41:27","revision":3712074}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3712070,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712070,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3712070,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3712070,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.9.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3712070,"resolution":"1","location":"assets","locale":"","width":1280,"height":450},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3712070,"resolution":"2","location":"assets","locale":"","width":1280,"height":1325},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3712070,"resolution":"3","location":"assets","locale":"","width":1280,"height":885},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3712070,"resolution":"4","location":"assets","locale":"","width":860,"height":490},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3712070,"resolution":"5","location":"assets","locale":"","width":1440,"height":640}},"screenshots":{"1":"The campaign list: status, time slot, offer and sales at a glance.","2":"A campaign being scheduled, with the recurrence summary and the next sessions.","3":"Sales statistics for one campaign, with the breakdown per session.","4":"A product page during a happy hour: struck-through price, label and countdown.","5":"The banner on the home page and the popup."}},"plugin_section":[],"plugin_tags":[11659,50558,282580,491,286],"plugin_category":[40,45],"plugin_contributors":[280958],"plugin_business_model":[],"class_list":["post-371156","plugin","type-plugin","status-publish","hentry","plugin_tags-countdown","plugin_tags-flash-sale","plugin_tags-happy-hour","plugin_tags-popup","plugin_tags-woocommerce","plugin_category-calendar-and-events","plugin_category-ecommerce","plugin_contributors-contlimbu","plugin_committers-contlimbu"],"banners":{"banner":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/banner-772x250.png?rev=3712070","banner_2x":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/banner-1544x500.png?rev=3712070","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/icon-128x128.png?rev=3712070","icon_2x":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/icon-256x256.png?rev=3712070","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/screenshot-1.png?rev=3712070","caption":"The campaign list: status, time slot, offer and sales at a glance."},{"src":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/screenshot-2.png?rev=3712070","caption":"A campaign being scheduled, with the recurrence summary and the next sessions."},{"src":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/screenshot-3.png?rev=3712070","caption":"Sales statistics for one campaign, with the breakdown per session."},{"src":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/screenshot-4.png?rev=3712070","caption":"A product page during a happy hour: struck-through price, label and countdown."},{"src":"https:\/\/ps.w.org\/limbus-happy-hours-for-woocommerce\/assets\/screenshot-5.png?rev=3712070","caption":"The banner on the home page and the popup."}],"raw_content":"<!--section=description-->\n<p>Limbus Happy Hours for WooCommerce lets store managers run time-limited \"happy hour\" promotions without touching product prices.<\/p>\n\n<p>A campaign applies a percentage discount to the product categories you choose, for the period you choose. When it ends, prices go back on their own.<\/p>\n\n<h4>Campaigns<\/h4>\n\n<ul>\n<li>Create as many campaigns as you need, each with its own name, schedule, discount, categories, popup and banner.<\/li>\n<li>One-off campaigns, or recurring ones: every day, selected days of the week, or selected days of the month, with an optional end date. When a chosen day does not exist in a month (the 31st in April, say), the session falls on the last day of the month.<\/li>\n<li>Campaign list with status: running, scheduled, not scheduled, disabled, finished. Duplicate a campaign to schedule it again, archive the ones that are over, restore or permanently delete an archive.<\/li>\n<li>Sessions start and end automatically in the site time zone, and overlapping schedules are flagged.<\/li>\n<li>Preview a campaign on the site before it starts.<\/li>\n<\/ul>\n\n<h4>Discounts and display<\/h4>\n\n<ul>\n<li>Percentage discount on one or more product categories, subcategories included if you want.<\/li>\n<li>Products already on sale: keep the better price, stack the happy hour discount on top of the sale price (both reductions are shown), or leave them alone.<\/li>\n<li>The regular price is struck through and a \"Happy Hour -20%\" label with a live countdown is shown below the product title, below the price and\/or above the \"Add to cart\" button, on product pages and in product lists.<\/li>\n<li>The discounted price applies in the cart, the mini cart and at checkout, classic and block, with the offer and a small countdown under each item. The cart is recalculated when the campaign ends.<\/li>\n<li>Optional popup with a desktop image, a mobile image, a link and a countdown.<\/li>\n<li>Optional banner or slider through the <code>[lhhw_banner]<\/code> shortcode, with desktop and mobile images.<\/li>\n<li>Category pages: banner and countdown at the top of the running campaign's categories. Categories you mark as dedicated to happy hours can be closed the rest of the time, showing a message and a countdown to the next session instead of products.<\/li>\n<\/ul>\n\n<h4>Notify me<\/h4>\n\n<ul>\n<li>A \"Notify me of the next happy hours\" link or e-mail form, during and outside campaigns, on dedicated category pages or anywhere through <code>[lhhw_notify]<\/code>.<\/li>\n<li>Subscribers tab with search, campaign filter, CSV export, and the WordPress personal data export and erasure tools.<\/li>\n<\/ul>\n\n<h4>Sales statistics<\/h4>\n\n<ul>\n<li>Per campaign: orders, items sold, happy hour revenue, order revenue, total discount, average order value and customers, tax included.<\/li>\n<li>Products sorted by quantity or amount, customers sorted by date or amount, and a breakdown per session for recurring campaigns.<\/li>\n<li>Paid orders only, refunds deducted.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>This plugin does not connect to any external service and does not track visitors. Subscriber e-mail addresses are stored in a table of your own database, and can be exported or erased with the WordPress privacy tools under Tools &gt; Export \/ Erase personal data. A salted hash of the visitor IP address is kept for ten minutes to limit abusive form submissions; the address itself is never stored. Settings, campaigns and subscribers are kept when the plugin is deleted, unless you tick \"Delete subscribers and settings when the plugin is deleted\".<\/p>\n\n<p>Simple, variable and external products are supported.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin through Plugins &gt; Add New &gt; Upload Plugin, then activate it. WooCommerce must be active.<\/li>\n<li>Go to WooCommerce &gt; Happy Hours and click \"New campaign\".<\/li>\n<li>Name the campaign, set the schedule, the discount and the categories, then configure the popup and the banner.<\/li>\n<li>Paste the <code>[lhhw_banner]<\/code> shortcode where the banner should appear, for example on the home page. The same shortcode always displays the banner of whichever campaign is running.<\/li>\n<li>Use the \"Preview\" link to check a campaign before its start time.<\/li>\n<li>Display settings shared by every campaign \u2014 texts, colour, category pages, the \"notify me\" button \u2014 are in the \"Settings\" tab.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20shortcodes%20are%20available%3F\"><h3>Which shortcodes are available?<\/h3><\/dt>\n<dd><p>[lhhw_banner] displays the banner or slider. Attributes: <code>countdown=\"overlay|below|none\"<\/code> and <code>class=\"my-class\"<\/code>.<\/p>\n\n<pre><code>[lhhw_countdown] displays the countdown on its own. Attributes: `style=\"inline|boxes\"` and `label=\"yes|no\"`.\n\n[lhhw_product_badge] places the product label manually, in an Elementor or theme template. Attribute: `id=\"123\"`.\n\n[lhhw_notify] displays the \"notify me\" link or form. Attribute: `mode=\"form|link\"`.\n<\/code><\/pre>\n\n<p>They output nothing outside a happy hour.<\/p><\/dd>\n<dt id=\"how%20do%20recurring%20campaigns%20work%3F\"><h3>How do recurring campaigns work?<\/h3><\/dt>\n<dd><p>Choose \"Every day\", \"Days of the week\" or \"Days of the month\", the first date and the time of each session, the duration (24 hours maximum) and an optional end date. Each session starts and ends on its own. When a chosen day does not exist in a month, the session takes place on the last day of that month. Campaign statistics show the totals and a breakdown per session.<\/p><\/dd>\n<dt id=\"how%20do%20several%20campaigns%20work%20together%3F\"><h3>How do several campaigns work together?<\/h3><\/dt>\n<dd><p>Only one campaign applies at a time: the running one. When none is running, the next scheduled campaign is used for the \"starts in\" displays. If two schedules overlap, the campaign that started last applies during the overlap, and the campaign list says so. Archived campaigns never run.<\/p><\/dd>\n<dt id=\"how%20are%20campaign%20statistics%20calculated%3F\"><h3>How are campaign statistics calculated?<\/h3><\/dt>\n<dd><p>When an order is placed, in classic or block checkout, each line sold at the happy hour price is tagged with the campaign, the price without the discount, the happy hour price and the discount, tax included. Statistics count paid orders (processing and completed) and deduct refunds. For orders placed before version 1.7, which carry no tag, the figures are estimated from the campaign categories and time slot, and are clearly flagged as estimates.<\/p><\/dd>\n<dt id=\"does%20the%20happy%20hour%20start%20exactly%20on%20time%3F\"><h3>Does the happy hour start exactly on time?<\/h3><\/dt>\n<dd><p>Prices switch at the exact second. Emptying the page cache relies on WP-Cron, which runs on site visits. On a low-traffic site, set up a real server cron calling wp-cron.php every minute.<\/p><\/dd>\n<dt id=\"i%20use%20a%20cdn%20or%20a%20server%20cache%20%28cloudflare%20apo%2C%20varnish%29.\"><h3>I use a CDN or a server cache (Cloudflare APO, Varnish).<\/h3><\/dt>\n<dd><p>Empty it when a session starts and ends, by hooking onto <code>lhhw_happy_hour_start<\/code>, <code>lhhw_happy_hour_end<\/code> or <code>lhhw_purge_caches<\/code>.<\/p><\/dd>\n<dt id=\"why%20don%27t%20happy%20hour%20products%20appear%20in%20the%20native%20%22on%20sale%20products%22%20block%3F\"><h3>Why don't happy hour products appear in the native \"On sale products\" block?<\/h3><\/dt>\n<dd><p>WooCommerce builds that list from the database, and happy hour prices are calculated on the fly. Use <code>[products category=\"your-category\"]<\/code> instead.<\/p><\/dd>\n<dt id=\"my%20theme%20hides%20the%20woocommerce%20price%20in%20product%20lists.\"><h3>My theme hides the WooCommerce price in product lists.<\/h3><\/dt>\n<dd><p>The label is moved below the product title automatically when the theme hides the price. You can also choose \"Below the title\" for product lists, or place <code>[lhhw_product_badge]<\/code> in an Elementor or theme template.<\/p><\/dd>\n<dt id=\"how%20do%20category%20pages%20work%20with%20my%20theme%3F\"><h3>How do category pages work with my theme?<\/h3><\/dt>\n<dd><p>During a campaign, the banner is shown on the pages of its categories. Outside campaigns, the pages of the categories ticked as dedicated show your message instead of products. The banner or the message is inserted with the standard WooCommerce hooks on classic themes, before the Product Collection block on block themes, and in JavaScript before the product grid for page builders.<\/p><\/dd>\n<dt id=\"where%20are%20subscribers%20stored%3F\"><h3>Where are subscribers stored?<\/h3><\/dt>\n<dd><p>In a table of your own database: e-mail, campaign name, context, page and date. They can be exported to CSV, deleted from the list, and are handled by the WordPress personal data export and erasure tools. The form is protected by a honeypot and a rate limit.<\/p><\/dd>\n<dt id=\"can%20i%20send%20subscribers%20to%20my%20e-mailing%20tool%3F\"><h3>Can I send subscribers to my e-mailing tool?<\/h3><\/dt>\n<dd><p>Use the <code>lhhw_subscriber_added<\/code> action (e-mail, data) to push new subscribers to your own tool, or import the CSV export.<\/p><\/dd>\n<dt id=\"at%20which%20width%20are%20mobile%20images%20used%3F\"><h3>At which width are mobile images used?<\/h3><\/dt>\n<dd><p>Up to 767 px, Elementor's default mobile breakpoint. Change it with the <code>lhhw_mobile_breakpoint<\/code> filter.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20settings%20when%20updating%20from%201.5%3F\"><h3>What happens to my settings when updating from 1.5?<\/h3><\/dt>\n<dd><p>The schedule, discount, categories, popup and banner saved in version 1.5 are converted into a first campaign automatically. If products were hidden outside the happy hour, the offer categories become the dedicated categories.<\/p><\/dd>\n<dt id=\"developer%20hooks\"><h3>Developer hooks<\/h3><\/dt>\n<dd><p>Filters: <code>lhhw_is_active<\/code>, <code>lhhw_current_campaign<\/code>, <code>lhhw_product_in_scope<\/code>, <code>lhhw_happy_price<\/code>, <code>lhhw_link_url<\/code>, <code>lhhw_show_popup<\/code>, <code>lhhw_mobile_breakpoint<\/code>, <code>lhhw_title_selector<\/code>, <code>lhhw_category_mode<\/code>, <code>lhhw_subscribe_rate_limit<\/code>, <code>lhhw_csv_separator<\/code>, <code>lhhw_stats_order_statuses<\/code>.<\/p>\n\n<p>Actions: <code>lhhw_happy_hour_start<\/code> and <code>lhhw_happy_hour_end<\/code> (campaign ID as parameter), <code>lhhw_purge_caches<\/code>, <code>lhhw_subscriber_added<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.9.3<\/h4>\n\n<ul>\n<li>Every shortcode and filter escapes the markup it returns, with an allowed list of tags, exactly like the markup the plugin prints itself.<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>The subscription endpoint now requires a nonce. The form asks for a fresh one when it is submitted, so it keeps working on cached pages.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Shortcodes are registered under their prefixed names only: <code>[lhhw_banner]<\/code>, <code>[lhhw_countdown]<\/code>, <code>[lhhw_product_badge]<\/code>, <code>[lhhw_notify]<\/code>.<\/li>\n<li>Hardened output escaping and input sanitizing of the subscription endpoint.<\/li>\n<li>When data deletion is enabled, uninstalling also removes archived campaigns.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Renamed to Limbus Happy Hours for WooCommerce.<\/li>\n<li>The interface is now in English and fully translatable; translations are managed on translate.wordpress.org.<\/li>\n<li>Prefixed shortcodes: <code>[lhhw_banner]<\/code>, <code>[lhhw_countdown]<\/code>, <code>[lhhw_product_badge]<\/code>, <code>[lhhw_notify]<\/code>.<\/li>\n<li>The recurrence summary in the campaign form now uses the weekday names of the site language.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Recurring campaigns: every day, selected days of the week, selected days of the month, with an optional end date.<\/li>\n<li>Live schedule summary and list of the next sessions in the campaign form.<\/li>\n<li>Campaign list and statistics show the recurrence rule, the current or next session and the period.<\/li>\n<li>Statistics: breakdown per session, sortable by date or revenue.<\/li>\n<li>Scheduled tasks are rescheduled after each session; overlap detection covers the next 60 days.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Campaign statistics: orders, items sold, happy hour revenue, order revenue, total discount, average order value, customers.<\/li>\n<li>Products sold per campaign and customers per campaign, both sortable.<\/li>\n<li>Order lines sold at the happy hour price are tagged in classic and block checkout, and shown in the order details.<\/li>\n<li>Refunds are deducted; cancelled and pending orders are excluded.<\/li>\n<li>Estimated statistics for orders placed before the update.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Campaigns: list, create, name, schedule, edit, duplicate, archive, restore and permanently delete.<\/li>\n<li>Each campaign has its own schedule, discount, categories, on-sale behaviour, popup and banner.<\/li>\n<li>Automatic start and end of every scheduled campaign; overlapping schedules are flagged.<\/li>\n<li>Automatic migration of the 1.5 settings into a first campaign.<\/li>\n<\/ul>\n\n<h4>Earlier versions<\/h4>\n\n<p>1.5.0 added the \"notify me\" button, the subscribers tab and the GDPR tools. 1.4.0 added the category pages. 1.3.0 added the cart countdown. 1.2.0 added the label below the product title. 1.1.0 added stacked discounts and mobile images. 1.0.0 was the first release.<\/p>","raw_excerpt":"Schedule WooCommerce happy hour campaigns: discount on selected categories, popup, banner\/slider shortcode, countdowns and sales statistics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/371156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=371156"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/contlimbu"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=371156"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=371156"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=371156"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=371156"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=371156"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=371156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}