Fix: PHP Fatal Error on LiteSpeed Cache servers — removed static call to LiteSpeedPurge::purge_post() which is not a static method in newer LiteSpeed versions; replaced with do_action hook for compatibility with all versions
Fix: Emoji icon could not be saved on servers where MySQL uses utf8 (3-byte) charset — replaced text input with a dropdown selector; emoji keys are stored as ASCII identifiers and mapped to HTML entities at display time
Fix: Settings form failed silently when emoji field contained a 4-byte UTF-8 character, preventing all other settings from saving
Fix: Cleanup cron skipped products with empty End Time field; now defaults to 23:59 matching frontend behavior
Improvement: Emoji now displays correctly in all contexts — single product page, shop loop, product variations, and page builder widgets (Elementor, Divi, Gutenberg etc.)
Improvement: Date format in promo messages now follows WordPress Settings → General → Date Format instead of hardcoded Romanian format
1.0.4
Fix: Sale price was recreated in database after cleanup cron ran
Fix: Price not fully reset to regular price after promotion expiry
1.0.3
Fix: After promotion expiry, product price was not displaying correctly on the product page
Fix: Sale price was not fully removed from database after cleanup cron ran
1.0.2
Fix: Sale price was showing on variable product parent even when promotion was not active
Fix: Sale price was incorrectly applied in cart and checkout before campaign start time
Fix: WooCommerce price cache was not cleared after promotion expiry
Fix: Countdown was displaying “0d” and “0h” — now hidden automatically when value is zero
Fix: Incorrect timezone on servers running UTC — replaced time() with wp_timezone()
Fix: Product page was showing cached content after promotion expiry on LiteSpeed/WP Rocket/W3TC
New: Promo badge now appears in shop/category/archive pages
New: “Campaign starts on…” message now also displayed in product listing pages
CSS: Badge forced onto new line regardless of price width