{"id":311478,"date":"2026-06-28T21:22:11","date_gmt":"2026-06-28T21:22:11","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/heartly-intelligent-commerce\/"},"modified":"2026-06-28T21:21:51","modified_gmt":"2026-06-28T21:21:51","slug":"heartly-intelligent-commerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/heartly-intelligent-commerce\/","author":23492954,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.5","stable_tag":"1.1.5","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Heartly \u2013 Flash Sales for WooCommerce","header_author":"Heartly","header_description":"Integrates your WooCommerce store with Heartly flash sales and campaigns. Enables automatic checkout redirect and future Heartly features.","assets_banners_color":"","last_updated":"2026-06-28 21:21:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.heartly.io\/woocommerce-flash-sale-plugin","header_author_uri":"https:\/\/www.heartly.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.5":{"tag":"1.1.5","author":"sukramb","date":"2026-06-28 21:21:51"}},"upgrade_notice":{"1.1.0":"<p>Adds PAngV price history tracking. Update recommended for all EU merchants.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3589508,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3589508,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.5"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Heartly dashboard \u2014 create and manage flash sales","2":"Flash sale countdown timer on your WooCommerce storefront","3":"Plugin settings page under WooCommerce \u2192 Heartly"}},"plugin_section":[],"plugin_tags":[12724,6744,269325,456,332],"plugin_category":[45,55],"plugin_contributors":[269326,269327],"plugin_business_model":[],"class_list":["post-311478","plugin","type-plugin","status-publish","hentry","plugin_tags-countdown-timer","plugin_tags-discounts","plugin_tags-flash-sales","plugin_tags-marketing","plugin_tags-sales","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-heartly","plugin_contributors-sukramb","plugin_committers-sukramb"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/heartly-intelligent-commerce\/assets\/icon-128x128.png?rev=3589508","icon_2x":"https:\/\/ps.w.org\/heartly-intelligent-commerce\/assets\/icon-256x256.png?rev=3589508","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Heartly<\/strong> connects your WooCommerce store to the Heartly flash sales platform. Create time-limited sales with countdown timers, automatic checkout redirects, and real-time analytics \u2014 all from the Heartly dashboard.<\/p>\n\n<h4>What this plugin does<\/h4>\n\n<ul>\n<li><strong>Automatic checkout redirect<\/strong>: Customers who click \"Go to Checkout\" on a Heartly flash sale land directly on your checkout page with the product in their cart<\/li>\n<li><strong>Coupon application<\/strong>: Discount codes from flash sale URLs are automatically applied at checkout<\/li>\n<li><strong>Order tracking<\/strong>: Flash sale ID is saved to each order so you can measure campaign revenue<\/li>\n<li><strong>Price history sync<\/strong>: Product price changes are forwarded to Heartly for PAngV compliance tracking<\/li>\n<li><strong>Settings sync<\/strong>: Your checkout and cart URLs are kept in sync with the Heartly platform automatically<\/li>\n<\/ul>\n\n<h4>Who this is for<\/h4>\n\n<p>WooCommerce store owners who want to run flash sales without touching code. You create the campaign in the Heartly dashboard, install this plugin once, and it handles the storefront logic.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A Heartly account \u2014 sign up at <a href=\"https:\/\/www.heartly.io\">heartly.io<\/a><\/li>\n<li>WooCommerce 5.0 or higher<\/li>\n<li>WordPress 5.8 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the <strong>Heartly<\/strong> platform (heartly.io) to function. The following external API calls are made:<\/p>\n\n<p><strong>heartly.io<\/strong> \u2014 <a href=\"https:\/\/www.heartly.io\/terms\">Terms of Service<\/a> | <a href=\"https:\/\/www.heartly.io\/legal\/privacy\">Privacy Policy<\/a><\/p>\n\n\n\n\n  When\n  What is sent\n  Endpoint\n\n\n\n\n  Plugin activation \/ daily\n  Checkout URL, cart URL, locale, plugin version\n  <code>heartly.io\/api\/woocommerce\/settings\/sync<\/code>\n\n\n  Product price saved\n  Product ID, prices, variations\n  <code>heartly.io\/api\/webhooks\/woocommerce\/product-updated<\/code>\n\n\n  Order placed via flash sale\n  Flash sale ID (order metadata)\n  Stored locally \u2014 no external call at checkout\n\n\n  Plugin deactivated\n  Shop URL, timestamp\n  <code>heartly.io\/api\/webhooks\/woocommerce\/deactivate<\/code>\n\n\n\n\n<p>All requests use HMAC-SHA256 signatures for authentication. No customer personal data is transmitted.<\/p>\n\n<!--section=installation-->\n<p><strong>Option A \u2014 Install directly from WordPress (recommended)<\/strong><\/p>\n\n<ol>\n<li>Go to WordPress Admin \u2192 Plugins \u2192 Add New<\/li>\n<li>Search for \"Heartly\"<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<li>Go to WooCommerce \u2192 Heartly to confirm the connection<\/li>\n<\/ol>\n\n<p><strong>Option B \u2014 From your Heartly dashboard<\/strong><\/p>\n\n<ol>\n<li>Sign up or log in at <a href=\"https:\/\/www.heartly.io\">heartly.io<\/a><\/li>\n<li>Follow the WooCommerce onboarding \u2014 it generates a one-click install link for your store<\/li>\n<li>Click the link, install and activate the plugin<\/li>\n<li>The connection is established automatically<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20heartly%20account%3F\"><h3>Do I need a Heartly account?<\/h3><\/dt>\n<dd><p>Yes. This plugin is the WooCommerce-side bridge for the Heartly platform. Without a Heartly account the plugin has no effect. You can sign up free at <a href=\"https:\/\/www.heartly.io\">heartly.io<\/a>.<\/p><\/dd>\n<dt id=\"will%20this%20affect%20my%20normal%20woocommerce%20functionality%3F\"><h3>Will this affect my normal WooCommerce functionality?<\/h3><\/dt>\n<dd><p>No. The checkout redirect and coupon logic only activates when a customer arrives via a Heartly flash sale URL (URL contains <code>flash_sale_id<\/code> or <code>heartly=1<\/code>). All standard WooCommerce behavior is unchanged.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20the%20auto-redirect%20to%20checkout%3F\"><h3>Can I disable the auto-redirect to checkout?<\/h3><\/dt>\n<dd><p>Yes. Go to WooCommerce \u2192 Heartly and uncheck <strong>Auto-Redirect to Checkout<\/strong>.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20heartly%3F\"><h3>What data is sent to Heartly?<\/h3><\/dt>\n<dd><p>When the plugin is active and connected, the following data is sent to heartly.io:<\/p>\n\n<ul>\n<li>Your store's checkout and cart URLs (on activation and once every 24 hours)<\/li>\n<li>Product price changes (used for PAngV compliance price history)<\/li>\n<li>Order metadata when a purchase originates from a Heartly flash sale (flash sale ID only)<\/li>\n<li>A deactivation signal when the plugin is deactivated<\/li>\n<\/ul>\n\n<p>No customer personal data (name, email, address) is ever sent to Heartly.<\/p><\/dd>\n<dt id=\"is%20this%20gdpr%20compliant%3F\"><h3>Is this GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. The plugin does not collect or transmit customer personal data. Order tracking only stores the internal Heartly flash sale ID as order metadata. A GDPR data exporter and eraser are included for completeness.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.5 - 2026-06-10<\/h4>\n\n<ul>\n<li>Fixed: Plugin Check errors \u2014 replaced parse_url() with wp_parse_url() in settings sync, added translators comment to GDPR eraser message<\/li>\n<li>Fixed: Plugin Check warnings \u2014 documented intentional cases for storefront query inspection (read-only) and GDPR meta_query (Privacy Tools only) with inline phpcs:ignore annotations<\/li>\n<\/ul>\n\n<h4>1.1.4 - 2026-06-10<\/h4>\n\n<ul>\n<li>Fixed: Fatal error on activation in the WordPress.org build \u2014 get_shop_url() was removed together with the updater code but is required by the settings sync. The method now lives outside the updater block.<\/li>\n<\/ul>\n\n<h4>1.1.3 - 2026-05-30<\/h4>\n\n<ul>\n<li>Security: REST <code>\/heartly\/v1\/status<\/code> endpoint now uses <code>__return_true<\/code> permission callback. The endpoint returns only plugin status and version (intentionally public, no PII or fingerprinting); the previous header-presence check was security theatre and has been removed.<\/li>\n<\/ul>\n\n<h4>1.1.2 - 2026-05-21<\/h4>\n\n<ul>\n<li>Updated: Declared Tested up to WordPress 7.0<\/li>\n<\/ul>\n\n<h4>1.1.1 - 2026-05-21<\/h4>\n\n<ul>\n<li>Fixed: Plugin URI now resolves to the public WooCommerce plugin landing page<\/li>\n<li>Fixed: Terms of Service link in readme now resolves to the canonical \/terms page<\/li>\n<li>Updated: Contributors list now reflects all WordPress.org committers<\/li>\n<\/ul>\n\n<h4>1.1.0 - 2026-04-01<\/h4>\n\n<ul>\n<li>Added: PAngV-compliant price history ingestion (save_post_product, updated_post_meta, woocommerce_update_product_variation hooks)<\/li>\n<li>Added: HEARTLY_WPORG_BUILD constant support \u2014 disables custom updater when running as a WP.org-distributed plugin<\/li>\n<li>Improved: Variation price changes now walk up to the parent product for complete payload<\/li>\n<\/ul>\n\n<h4>1.0.27 - 2026-03-25<\/h4>\n\n<ul>\n<li>Updated: Declared Tested up to WordPress 6.9.4 and WC tested up to 10.6.1<\/li>\n<\/ul>\n\n<h4>1.0.26 - 2026-03-24<\/h4>\n\n<ul>\n<li>Fixed: QIT Security false positives by sanitizing request params before checks<\/li>\n<li>Fixed: REST \/heartly\/v1\/status uses a dedicated permission callback<\/li>\n<\/ul>\n\n<h4>1.0.25 - 2026-03-24<\/h4>\n\n<ul>\n<li>Updated: Declared Tested up to WordPress 6.9 and WC tested up to 10.6<\/li>\n<\/ul>\n\n<h4>1.0.24 - 2026-03-24<\/h4>\n\n<ul>\n<li>Fixed: WooCommerce QIT Security \u2014 logging uses WooCommerce logger; admin UI uses proper escaping<\/li>\n<\/ul>\n\n<h4>1.0.23 - 2026-03-24<\/h4>\n\n<ul>\n<li>Fixed: Auto-redirect only runs for Heartly flash-sale URLs, not standard add-to-cart<\/li>\n<li>Fixed: Settings\/webhook sync messages no longer write to PHP error log unless HEARTLY_DIAGNOSTIC is enabled<\/li>\n<\/ul>\n\n<h4>1.0.22 - 2026-03-24<\/h4>\n\n<ul>\n<li>Fixed: WooCommerce dependency check and admin notice load order<\/li>\n<li>Fixed: Settings checkbox saves correctly when auto-redirect is disabled<\/li>\n<\/ul>\n\n<h4>1.0.11 - 2025-12-04<\/h4>\n\n<ul>\n<li>Removed: Manual webhook registration button<\/li>\n<li>Improved: Webhooks registered automatically during OAuth connection<\/li>\n<\/ul>\n\n<h4>1.0.0 - 2025-01-25<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Run flash sales on WooCommerce. Heartly adds countdown timers, checkout redirects, and campaign analytics \u2014 no code required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/311478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=311478"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sukramb"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=311478"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=311478"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=311478"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=311478"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=311478"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=311478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}