{"id":263892,"date":"2025-12-30T06:01:36","date_gmt":"2025-12-30T06:01:36","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/offer-countdown-time\/"},"modified":"2026-05-09T18:02:39","modified_gmt":"2026-05-09T18:02:39","slug":"offer-countdown-time","status":"publish","type":"plugin","link":"https:\/\/rhg.wordpress.org\/plugins\/offer-countdown-time\/","author":23344265,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Offer Countdown Timer for WooCommerce","header_author":"QueueCommerce","header_description":"Offer Countdown Time","assets_banners_color":"612455","last_updated":"2026-05-09 18:02:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.queuecommerce.com\/offer-countdown-time\/","header_author_uri":"https:\/\/www.queuecommerce.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":277,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"queuecommerce","date":"2025-12-30 13:09:59"},"1.1.0":{"tag":"1.1.0","author":"queuecommerce","date":"2026-05-02 14:48:59"},"1.2.0":{"tag":"1.2.0","author":"queuecommerce","date":"2026-05-09 18:02:39"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3520704,"resolution":"128x128","location":"assets","locale":"","width":131,"height":123}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3520704,"resolution":"772x250","location":"assets","locale":"","width":728,"height":258}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3527128,"resolution":"1","location":"assets","locale":"","width":1252,"height":890},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3527128,"resolution":"2","location":"assets","locale":"","width":1334,"height":872},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3527128,"resolution":"3","location":"assets","locale":"","width":396,"height":807},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3520961,"resolution":"4","location":"assets","locale":"","width":1449,"height":807},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3527128,"resolution":"5","location":"assets","locale":"","width":1364,"height":856},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3527128,"resolution":"6","location":"assets","locale":"","width":1604,"height":867},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3527128,"resolution":"7","location":"assets","locale":"","width":1380,"height":894},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3527128,"resolution":"8","location":"assets","locale":"","width":1352,"height":857}},"screenshots":{"1":"<strong>Settings<\/strong> \u2014 Global switches, accessibility, expired banner behaviour, default template, merged Pro styling controls when licensed.","2":"<strong>Templates<\/strong> \u2014 Interactive previews for built-in styles (Template 1 expanded by default).","3":"<strong>Product meta box<\/strong> \u2014 Enable timer, template override, message, optional start\/end datetimes.","4":"<strong>Storefront<\/strong> \u2014 Live product-page countdown ahead of the add-to-cart area.","5":"<strong>Campaigns \/ Template Maker (preview)<\/strong> \u2014 Explore scheduling or design tooling; saving advanced assets requires Pro + license."}},"plugin_section":[],"plugin_tags":[12724,50558,250444,142515,286],"plugin_category":[45],"plugin_contributors":[253023,239633],"plugin_business_model":[],"class_list":["post-263892","plugin","type-plugin","status-publish","hentry","plugin_tags-countdown-timer","plugin_tags-flash-sale","plugin_tags-limited-time-offer","plugin_tags-sale-countdown","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-queuecommerce","plugin_contributors-riko910","plugin_committers-queuecommerce"],"banners":{"banner":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/banner-772x250.png?rev=3520704","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/icon-128x128.png?rev=3520704","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-1.png?rev=3527128","caption":"<strong>Settings<\/strong> \u2014 Global switches, accessibility, expired banner behaviour, default template, merged Pro styling controls when licensed."},{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-2.png?rev=3527128","caption":"<strong>Templates<\/strong> \u2014 Interactive previews for built-in styles (Template 1 expanded by default)."},{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-3.png?rev=3527128","caption":"<strong>Product meta box<\/strong> \u2014 Enable timer, template override, message, optional start\/end datetimes."},{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-4.png?rev=3520961","caption":"<strong>Storefront<\/strong> \u2014 Live product-page countdown ahead of the add-to-cart area."},{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-5.png?rev=3527128","caption":"<strong>Campaigns \/ Template Maker (preview)<\/strong> \u2014 Explore scheduling or design tooling; saving advanced assets requires Pro + license."},{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-6.png?rev=3527128","caption":""},{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-7.png?rev=3527128","caption":""},{"src":"https:\/\/ps.w.org\/offer-countdown-time\/assets\/screenshot-8.png?rev=3527128","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>Offer Countdown Timer for WooCommerce<\/strong> adds a fast, readable <strong>sale countdown<\/strong> to your <strong>product pages<\/strong>, so shoppers always see how long a promotion lasts. It is built for <strong>flash sales<\/strong>, <strong>seasonal campaigns<\/strong>, <strong>clearance events<\/strong>, and <strong>limited-time pricing<\/strong> without touching code.<\/p>\n\n<p>The timer prints on the storefront hook <strong><code>woocommerce_before_add_to_cart_form<\/code><\/strong>. Scripts and styles load <strong>only<\/strong> when a product actually has an active countdown and timers are enabled globally\u2014keeping unrelated pages light.<\/p>\n\n<h4>Why merchants use this plugin<\/h4>\n\n<ul>\n<li><strong>Clear urgency<\/strong> \u2014 A live clock reinforces ethical scarcity (deadline visibility, not fake stock counts).<\/li>\n<li><strong>Native WooCommerce workflow<\/strong> \u2014 Works alongside your products and optional automatic sale-price cleanup when an offer ends.<\/li>\n<li><strong>Operator-friendly<\/strong> \u2014 Global switches, per-product overrides, and optional <strong>offer start date<\/strong> so the banner stays hidden until go-live.<\/li>\n<\/ul>\n\n<h4>Free plugin features (this package)<\/h4>\n\n<ul>\n<li><strong>Global enable\/disable<\/strong> \u2014 Pause every storefront countdown from <strong>Offer Countdown \u2192 Settings<\/strong> without editing products.<\/li>\n<li><strong>Configurable sale cleanup<\/strong> \u2014 When the countdown ends, optionally remove the WooCommerce sale price or leave pricing unchanged.<\/li>\n<li><strong>Five countdown templates<\/strong> \u2014 Circular, gradient, pill, and more; preview under <strong>Offer Countdown \u2192 Templates<\/strong> (Template 1 opens first).<\/li>\n<li><strong>Default template + per-product override<\/strong> \u2014 Store-wide default with optional template choice per product in the <strong>Offer Countdown Timer<\/strong> meta box.<\/li>\n<li><strong>Custom promo message + placement<\/strong> \u2014 Short headline-style message <strong>above<\/strong> or <strong>below<\/strong> the digits.<\/li>\n<li><strong>Optional offer start date<\/strong> \u2014 Set <strong>Offer start date (optional)<\/strong> on the product; the banner appears only after that moment (uses WordPress timezone handling via <code>current_time<\/code> \/ localized datetime inputs).<\/li>\n<li><strong>Accessibility-oriented display<\/strong> \u2014 Optional <strong><code>role=\"timer\"<\/code><\/strong>, <strong><code>aria-label<\/code><\/strong>, dedicated <strong><code>aria-live<\/code><\/strong> region, and periodic screen-reader announcements (toggle under Settings).<\/li>\n<li><strong>Expired banner behavior<\/strong> \u2014 Choose whether the banner hides when time hits zero or remains visible at zero (paired with frontend expiry logic and optional AJAX-driven cleanup).<\/li>\n<li><strong>Responsive layouts<\/strong> \u2014 Timer blocks adapt across breakpoints defined in bundled CSS.<\/li>\n<li><strong>Developer hooks<\/strong> \u2014 Filters\/actions include <code>offct_resolve_end_time<\/code>, <code>offct_banner_html<\/code>, <code>offct_banner_root_attributes<\/code>, <code>offct_before_render_banner<\/code>, <code>offct_after_render_banner<\/code>, <code>offct_countdown_labels<\/code>, <code>offct_oct_data_localize<\/code>, <code>offct_product_meta_box_fields<\/code>, <code>offct_template_ids<\/code>, and <code>offct_template_label<\/code>.<\/li>\n<li><strong>Translation-ready<\/strong> \u2014 Text domain <code>offer-countdown-time<\/code>.<\/li>\n<\/ul>\n\n<h4>Admin hub (free plugin UI)<\/h4>\n\n<p>From <strong>Offer Countdown<\/strong> in the WordPress admin you get <strong>Settings<\/strong>, <strong>Templates<\/strong>, <strong>Campaigns<\/strong>, <strong>Analytics<\/strong>, <strong>Template Maker<\/strong>, <strong>Import \/ Export<\/strong>, and <strong>Upgrade Pro<\/strong>. Core saving works everywhere this plugin controls (global\/product timers). Screens such as <strong>Campaigns<\/strong>, <strong>Template Maker<\/strong>, and related workflows surface <strong>live previews<\/strong> in the free plugin; <strong>creating or saving<\/strong> advanced campaign data, custom Template Maker designs, analytics persistence, and other <strong>Pro-only mutations<\/strong> require <strong>Offer Countdown Timer for WooCommerce Pro<\/strong> with a valid license (see below).<\/p>\n\n<h4>Offer Countdown Timer for WooCommerce Pro (optional add-on)<\/h4>\n\n<p>Pro extends the same codebase with licensed-only features, including:<\/p>\n\n<ul>\n<li><strong>Campaign-driven end times<\/strong> \u2014 Assign schedules and recurrence patterns to products or categories; active campaigns override fixed product end timestamps via <code>offct_resolve_end_time<\/code>.<\/li>\n<li><strong>Evergreen timers<\/strong> \u2014 Per-product visitor windows (<code>_oct_timer_mode<\/code>) coordinated through Pro services.<\/li>\n<li><strong>Extra placements<\/strong> \u2014 Shop\/archive compact timers (<code>woocommerce_after_shop_loop_item<\/code>), cart\/checkout reservation timers, <code>[oct_countdown]<\/code> shortcode, and the <strong><code>offct\/product-countdown<\/code><\/strong> Gutenberg block (WooCommerce block category).<\/li>\n<li><strong>Analytics<\/strong> \u2014 Lightweight storefront tracking with configurable retention (see Pro settings).<\/li>\n<li><strong>REST API<\/strong> \u2014 Namespaced routes under <code>offct\/v1<\/code> for authenticated store managers (list\/update products tied to countdown meta).<\/li>\n<li><strong>Visual customization<\/strong> \u2014 Additional preset templates (IDs 6\u201315), Template Maker\u2013built custom templates with generated CSS, sticky banner mode, colour tokens, custom digit sizing, custom unit labels, and optional <strong>custom CSS<\/strong> inlined when scripts enqueue.<\/li>\n<li><strong>Bulk tooling &amp; expiry actions<\/strong> \u2014 Bulk editors plus configurable expiry behaviours (redirects and related flows exposed through frontend JSON).<\/li>\n<\/ul>\n\n<p>Install <strong>Offer Countdown Timer for WooCommerce Pro<\/strong> only alongside this free plugin and WooCommerce; Pro declares <strong><code>Requires Plugins: offer-countdown-time<\/code><\/strong> and validates dependencies on bootstrap.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The free countdown does not profile visitors for marketing retargeting. Standard WordPress, WooCommerce, and hosting logs apply. Pro analytics (when licensed) store merchant-facing metrics according to Pro settings\u2014review those screens before enabling in regulated industries.<\/p>\n\n<!--section=installation-->\n<h4>Automatic installation (recommended)<\/h4>\n\n<ol>\n<li>In WordPress, go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>Offer Countdown Timer for WooCommerce<\/strong> (when listed on WordPress.org) or upload the ZIP from your vendor.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Ensure <strong>WooCommerce<\/strong> is active (the plugin shows an admin notice if it is missing).<\/li>\n<li>Open <strong>Offer Countdown \u2192 Settings<\/strong> for global behaviour.<\/li>\n<li>Edit a product: enable <strong>Offer Countdown Timer<\/strong>, set dates (and optional message\/template), then save.<\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/offer-countdown-time\/<\/code>, or upload the ZIP via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Configure WooCommerce and <strong>Offer Countdown<\/strong> as above.<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8+<\/li>\n<li>PHP 7.4+<\/li>\n<li>WooCommerce active<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20are%20global%20options%3F\"><h3>Where are global options?<\/h3><\/dt>\n<dd><p><strong>Offer Countdown \u2192 Settings<\/strong>. Enable\/disable all storefront timers, sale cleanup, default template, message position, accessibility enhancements, and expired-banner visibility.<\/p><\/dd>\n<dt id=\"how%20do%20i%20schedule%20when%20a%20banner%20becomes%20visible%3F\"><h3>How do I schedule when a banner becomes visible?<\/h3><\/dt>\n<dd><p>On the product, fill <strong>Offer start date (optional)<\/strong>. Until that timestamp passes, <code>OFFCT_Frontend::get_product_countdown_context()<\/code> returns no banner even if an end date exists.<\/p><\/dd>\n<dt id=\"where%20does%20the%20countdown%20appear%20on%20the%20product%20page%3F\"><h3>Where does the countdown appear on the product page?<\/h3><\/dt>\n<dd><p>Immediately <strong>before<\/strong> the add-to-cart form (<code>woocommerce_before_add_to_cart_form<\/code>). Developers may relocate output using the surrounding actions\/filters.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20timer%20reaches%20zero%3F\"><h3>What happens when the timer reaches zero?<\/h3><\/dt>\n<dd><p>Visually, the banner can hide or remain at zero depending on <strong>Hide expired banner<\/strong> under Settings. If <strong>Remove sale price when offer expires<\/strong> is enabled, WooCommerce sale metadata can clear via admin\/cron checks and optional frontend coordination\u2014consistent with <code>OFFCT_Offer_Countdown_Time::remove_sale_price()<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20silence%20every%20countdown%20without%20editing%20products%3F\"><h3>Can I silence every countdown without editing products?<\/h3><\/dt>\n<dd><p>Yes. Disable <strong>Enable countdown timer<\/strong> globally on <strong>Offer Countdown \u2192 Settings<\/strong>.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20accessibility%20preferences%3F\"><h3>Does the plugin support accessibility preferences?<\/h3><\/dt>\n<dd><p>Yes. Keep <strong>Accessibility enhancements<\/strong> enabled to expose timer semantics and polite <code>aria-live<\/code> updates (throttled in <code>assets\/js\/frontend.js<\/code>). Screen reader users get periodic consolidated announcements instead of noisy per-second chatter.<\/p><\/dd>\n<dt id=\"which%20timezone%20applies%3F\"><h3>Which timezone applies?<\/h3><\/dt>\n<dd><p>WordPress <strong>Settings \u2192 General<\/strong> timezone and GMT offset feed both PHP (<code>current_time<\/code>) and the JavaScript offset parser shipped with <code>frontend.js<\/code>.<\/p><\/dd>\n<dt id=\"are%20campaigns%20or%20template%20maker%20fully%20available%20in%20the%20free%20plugin%3F\"><h3>Are Campaigns or Template Maker fully available in the free plugin?<\/h3><\/dt>\n<dd><p>You can explore the interfaces and previews. Persisted campaigns, saved Template Maker designs, and licensed analytics require <strong>Offer Countdown Timer for WooCommerce Pro<\/strong> with an active license (<code>offct_is_pro_licensed()<\/code> gates mutations).<\/p><\/dd>\n<dt id=\"how%20do%20i%20upgrade%20to%20pro%3F\"><h3>How do I upgrade to Pro?<\/h3><\/dt>\n<dd><p>Visit <strong>Offer Countdown \u2192 Upgrade Pro<\/strong> inside wp-admin or https:\/\/www.queuecommerce.com\/offer-countdown-time\/ . Activate Pro after this free plugin and WooCommerce.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added: Optional <strong>offer start date<\/strong> meta (<code>_oct_start_date<\/code>) so banners stay hidden until publish time.<\/li>\n<li>Added: <strong>Accessibility enhancements<\/strong> setting (<code>enable_accessibility<\/code>) with timer semantics and screen reader region updates.<\/li>\n<li>Added: <strong>Hide expired banner<\/strong> setting (<code>hide_expired_banner<\/code>) to control DOM removal versus displaying zeros at expiry.<\/li>\n<li>Added: Expanded admin navigation (<strong>Campaigns<\/strong>, <strong>Analytics<\/strong>, <strong>Template Maker<\/strong>, <strong>Import \/ Export<\/strong>, <strong>Upgrade Pro<\/strong>) with preview-capable screens aligned to Pro workflows.<\/li>\n<li>Improved: Shared Settings handler persists core fields alongside Pro option arrays when Pro is active (<code>handle_save_all_settings<\/code>).<\/li>\n<li>Improved: Frontend localized data prepared for Pro coordination (<code>offct_oct_data_localize<\/code>, nonce pairs for expiry\/analytics endpoints).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: Global enable\/disable for all storefront countdowns.<\/li>\n<li>Added: Option to disable automatic removal of sale price when the offer ends.<\/li>\n<li>Added: Five countdown templates with admin preview page (Template 1 open by default).<\/li>\n<li>Added: Default template setting plus per-product template override.<\/li>\n<li>Added: Custom message position (above or below the timer).<\/li>\n<li>Improved: Conditional page reload when the timer ends (only when sale removal is enabled).<\/li>\n<li>Improved: Admin menu <strong>Offer Countdown<\/strong> with Settings and Templates submenu.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: WooCommerce integration, live countdown, product meta box.<\/li>\n<\/ul>","raw_excerpt":"Live WooCommerce sale countdown timers for product pages\u2014five templates, optional scheduled start, accessibility-friendly output, sale expiry cleanup, &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/263892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=263892"}],"author":[{"embeddable":true,"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/queuecommerce"}],"wp:attachment":[{"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=263892"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=263892"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=263892"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=263892"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=263892"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/rhg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=263892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}