{"id":265799,"date":"2026-01-21T10:49:59","date_gmt":"2026-01-21T10:49:59","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/smart-cycle-discounts\/"},"modified":"2026-04-02T19:42:08","modified_gmt":"2026-04-02T19:42:08","slug":"smart-cycle-discounts","status":"publish","type":"plugin","link":"https:\/\/scn.wordpress.org\/plugins\/smart-cycle-discounts\/","author":23405775,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.8.22","stable_tag":"1.8.22","tested":"6.9.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Scheduled Sales & Automatic Discounts for WooCommerce \u2013 Smart Cycle Discounts","header_author":"Webstepper","header_description":"Revolutionary WooCommerce discount management with intelligent product rotation, multi-campaign organization, and advanced scheduling. Built with modern WordPress & WooCommerce standards.","assets_banners_color":"0a3550","last_updated":"2026-04-02 19:42:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/webstepper.io\/wordpress\/plugins\/smart-cycle-discounts\/","header_author_uri":"https:\/\/webstepper.io","rating":4.9,"author_block_rating":0,"active_installs":10,"downloads":2328,"num_ratings":10,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"webstepper","date":"2026-01-21 11:41:07"},"1.0.1":{"tag":"1.0.1","author":"webstepper","date":"2026-01-21 15:46:17"},"1.0.10":{"tag":"1.0.10","author":"webstepper","date":"2026-01-21 23:59:21"},"1.0.2":{"tag":"1.0.2","author":"webstepper","date":"2026-01-21 17:48:56"},"1.0.4":{"tag":"1.0.4","author":"webstepper","date":"2026-01-21 21:46:52"},"1.0.6":{"tag":"1.0.6","author":"webstepper","date":"2026-01-21 21:59:05"},"1.0.7":{"tag":"1.0.7","author":"webstepper","date":"2026-01-21 22:55:31"},"1.0.8":{"tag":"1.0.8","author":"webstepper","date":"2026-01-21 23:59:21"},"1.1.0":{"tag":"1.1.0","author":"webstepper","date":"2026-01-22 20:00:58"},"1.1.2":{"tag":"1.1.2","author":"webstepper","date":"2026-01-22 20:38:12"},"1.1.3":{"tag":"1.1.3","author":"webstepper","date":"2026-01-23 19:30:37"},"1.1.4":{"tag":"1.1.4","author":"webstepper","date":"2026-01-24 23:56:07"},"1.1.5":{"tag":"1.1.5","author":"webstepper","date":"2026-01-25 15:31:11"},"1.1.6":{"tag":"1.1.6","author":"webstepper","date":"2026-01-25 18:42:12"},"1.1.7":{"tag":"1.1.7","author":"webstepper","date":"2026-01-27 00:42:45"},"1.1.8":{"tag":"1.1.8","author":"webstepper","date":"2026-01-27 15:58:28"},"1.1.9":{"tag":"1.1.9","author":"webstepper","date":"2026-01-28 01:38:46"},"1.2.0":{"tag":"1.2.0","author":"webstepper","date":"2026-01-29 16:58:39"},"1.2.1":{"tag":"1.2.1","author":"webstepper","date":"2026-01-30 01:07:04"},"1.2.2":{"tag":"1.2.2","author":"webstepper","date":"2026-01-30 15:19:33"},"1.3.0":{"tag":"1.3.0","author":"webstepper","date":"2026-02-01 13:31:21"},"1.4.0":{"tag":"1.4.0","author":"webstepper","date":"2026-02-01 16:05:34"},"1.5.0":{"tag":"1.5.0","author":"webstepper","date":"2026-02-01 21:16:07"},"1.5.1":{"tag":"1.5.1","author":"webstepper","date":"2026-02-01 22:57:50"},"1.5.3":{"tag":"1.5.3","author":"webstepper","date":"2026-02-03 17:33:25"},"1.5.4":{"tag":"1.5.4","author":"webstepper","date":"2026-02-03 17:59:45"},"1.5.5":{"tag":"1.5.5","author":"webstepper","date":"2026-02-03 18:19:22"},"1.5.6":{"tag":"1.5.6","author":"webstepper","date":"2026-02-03 19:01:07"},"1.5.61":{"tag":"1.5.61","author":"webstepper","date":"2026-02-03 19:18:50"},"1.5.62":{"tag":"1.5.62","author":"webstepper","date":"2026-02-03 19:30:02"},"1.5.63":{"tag":"1.5.63","author":"webstepper","date":"2026-02-05 00:44:52"},"1.5.64":{"tag":"1.5.64","author":"webstepper","date":"2026-02-05 01:02:34"},"1.5.65":{"tag":"1.5.65","author":"webstepper","date":"2026-02-05 16:47:09"},"1.5.66":{"tag":"1.5.66","author":"webstepper","date":"2026-02-05 20:02:11"},"1.5.67":{"tag":"1.5.67","author":"webstepper","date":"2026-02-05 21:10:50"},"1.5.68":{"tag":"1.5.68","author":"webstepper","date":"2026-02-05 21:10:50"},"1.5.69":{"tag":"1.5.69","author":"webstepper","date":"2026-02-05 22:49:02"},"1.5.70":{"tag":"1.5.70","author":"webstepper","date":"2026-02-07 17:06:03"},"1.6.2":{"tag":"1.6.2","author":"webstepper","date":"2026-02-07 23:25:42"},"1.7.0":{"tag":"1.7.0","author":"webstepper","date":"2026-02-10 21:39:18"},"1.7.1":{"tag":"1.7.1","author":"webstepper","date":"2026-02-11 01:36:30"},"1.7.11":{"tag":"1.7.11","author":"webstepper","date":"2026-02-13 01:15:25"},"1.7.20":{"tag":"1.7.20","author":"webstepper","date":"2026-02-13 17:29:10"},"1.7.21":{"tag":"1.7.21","author":"webstepper","date":"2026-02-14 16:27:43"},"1.7.22":{"tag":"1.7.22","author":"webstepper","date":"2026-02-16 22:15:24"},"1.7.23":{"tag":"1.7.23","author":"webstepper","date":"2026-02-17 14:19:11"},"1.7.25":{"tag":"1.7.25","author":"webstepper","date":"2026-02-17 20:17:14"},"1.7.26":{"tag":"1.7.26","author":"webstepper","date":"2026-02-18 12:57:46"},"1.7.27":{"tag":"1.7.27","author":"webstepper","date":"2026-02-18 13:45:15"},"1.7.29":{"tag":"1.7.29","author":"webstepper","date":"2026-02-18 17:17:41"},"1.7.31":{"tag":"1.7.31","author":"webstepper","date":"2026-02-18 19:52:40"},"1.7.33":{"tag":"1.7.33","author":"webstepper","date":"2026-02-19 01:24:08"},"1.7.34":{"tag":"1.7.34","author":"webstepper","date":"2026-02-19 02:14:12"},"1.7.36":{"tag":"1.7.36","author":"webstepper","date":"2026-02-19 03:12:09"},"1.7.40":{"tag":"1.7.40","author":"webstepper","date":"2026-02-20 01:48:38"},"1.7.41":{"tag":"1.7.41","author":"webstepper","date":"2026-02-20 19:30:01"},"1.7.42":{"tag":"1.7.42","author":"webstepper","date":"2026-02-20 22:35:02"},"1.7.43":{"tag":"1.7.43","author":"webstepper","date":"2026-02-21 02:01:57"},"1.7.44":{"tag":"1.7.44","author":"webstepper","date":"2026-02-21 23:26:36"},"1.7.45":{"tag":"1.7.45","author":"webstepper","date":"2026-02-22 21:46:59"},"1.7.46":{"tag":"1.7.46","author":"webstepper","date":"2026-02-22 22:17:45"},"1.7.64":{"tag":"1.7.64","author":"webstepper","date":"2026-02-23 19:29:00"},"1.7.65":{"tag":"1.7.65","author":"webstepper","date":"2026-02-23 21:00:35"},"1.8.0":{"tag":"1.8.0","author":"webstepper","date":"2026-03-06 00:50:56"},"1.8.1":{"tag":"1.8.1","author":"webstepper","date":"2026-03-06 00:57:22"},"1.8.11":{"tag":"1.8.11","author":"webstepper","date":"2026-03-07 01:20:22"},"1.8.12":{"tag":"1.8.12","author":"webstepper","date":"2026-03-09 15:45:31"},"1.8.13":{"tag":"1.8.13","author":"webstepper","date":"2026-03-09 21:13:44"},"1.8.14":{"tag":"1.8.14","author":"webstepper","date":"2026-03-20 00:18:02"},"1.8.15":{"tag":"1.8.15","author":"webstepper","date":"2026-03-24 22:58:29"},"1.8.17":{"tag":"1.8.17","author":"webstepper","date":"2026-03-25 02:25:28"},"1.8.18":{"tag":"1.8.18","author":"webstepper","date":"2026-03-28 15:22:46"},"1.8.19":{"tag":"1.8.19","author":"webstepper","date":"2026-03-28 21:59:51"},"1.8.20":{"tag":"1.8.20","author":"webstepper","date":"2026-03-29 22:19:36"},"1.8.21":{"tag":"1.8.21","author":"webstepper","date":"2026-04-02 16:22:05"},"1.8.22":{"tag":"1.8.22","author":"webstepper","date":"2026-04-02 19:42:08"}},"upgrade_notice":{"1.8.22":"<p>CTA labels consolidated into vocabulary as single source of truth, 12 reason codes gained specific CTAs, 8 vocabulary copy fixes, priority conflict CTA labels, CSS scope fixes.<\/p>","1.8.21":"<p>Intelligence system hardening: broken campaigns now correctly blocked on all surfaces, post-activation confidence scoring fixed, per-campaign verdict badges on dashboard, one-click campaign launch, deterministic policy profiles, cache system rewrite, 105 registered diagnostic codes, vocabulary completeness across all reason codes.<\/p>","1.8.20":"<p>16 new intelligence recommendations, 15 logic correctness fixes, wizard CTA buttons, action-oriented titles across all surfaces, and CTA label consistency fixes.<\/p>","1.8.19":"<p>Honest diagnostic-driven health scores, store-wide dashboard aggregation, Override Intensity signal, bidirectional conflict detection, and evidence-required actions. Dead code cleanup.<\/p>","1.8.18":"<p>Major intelligence system overhaul with full feature awareness, proactive email notifications (health alerts, usage limits, conflicts, zero activity), IS verdicts in all campaign lifecycle emails, adaptive inactivity detection, conflict resolution guidance, bundle picker scoped to Products step filters, health score accuracy fixes, and performance optimizations.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":1,"5":9},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3449853,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3449881,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3461509,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3445907,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3445907,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3497777,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=wsscd-campaigns\",\"preferredVersions\":{\"php\":\"8.0\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"smart-cycle-discounts\"},\"options\":{\"activate\":true}},{\"step\":\"installTheme\",\"themeData\":{\"resource\":\"wordpress.org\\\/themes\",\"slug\":\"storefront\"}},{\"step\":\"activateTheme\",\"themeFolderName\":\"storefront\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; update_option('blogname', 'Smart Cycle Discounts Demo'); update_option('blogdescription', 'Experience automatic product discounts'); ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; delete_transient('_wc_activation_redirect'); update_option('woocommerce_onboarding_profile', array('completed' => true)); update_option('woocommerce_task_list_hidden', 'yes'); update_option('woocommerce_task_list_complete', 'yes'); ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; update_user_meta(1, 'wsscd_auto_update_notice_dismissed', true); update_user_meta(1, 'wsscd_review_notice_dismissed', true); update_user_meta(1, 'wsscd_first_sale_notice_dismissed', true); update_user_meta(1, 'wsscd_welcome_notice_dismissed', true); ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; WC_Install::create_pages(); ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; if (!term_exists('clothing', 'product_cat')) { wp_insert_term('Clothing', 'product_cat', array('slug' => 'clothing')); } if (!term_exists('electronics', 'product_cat')) { wp_insert_term('Electronics', 'product_cat', array('slug' => 'electronics')); } if (!term_exists('accessories', 'product_cat')) { wp_insert_term('Accessories', 'product_cat', array('slug' => 'accessories')); } if (!term_exists('home-garden', 'product_cat')) { wp_insert_term('Home & Garden', 'product_cat', array('slug' => 'home-garden')); } ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; $clothing = get_term_by('slug', 'clothing', 'product_cat'); $electronics = get_term_by('slug', 'electronics', 'product_cat'); $accessories = get_term_by('slug', 'accessories', 'product_cat'); $home = get_term_by('slug', 'home-garden', 'product_cat'); $products = array( array('Classic T-Shirt', '29.99', $clothing), array('Denim Jeans', '79.99', $clothing), array('Summer Dress', '59.99', $clothing), array('Wool Sweater', '89.99', $clothing), array('Wireless Headphones', '149.99', $electronics), array('Smartphone Case', '24.99', $electronics), array('USB-C Charger', '34.99', $electronics), array('Bluetooth Speaker', '79.99', $electronics), array('Leather Wallet', '49.99', $accessories), array('Sunglasses', '89.99', $accessories), array('Watch Band', '19.99', $accessories), array('Ceramic Vase', '44.99', $home), array('Throw Pillow', '29.99', $home), array('Plant Pot Set', '39.99', $home) ); foreach ($products as $p) { $product = new WC_Product_Simple(); $product->set_name($p[0]); $product->set_regular_price($p[1]); $product->set_stock_status('instock'); $product->set_status('publish'); $id = $product->save(); if ($p[2]) { wp_set_object_terms($id, $p[2]->term_id, 'product_cat'); } } ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; global $wpdb; $table = $wpdb->prefix . 'wsscd_campaigns'; $now = current_time('mysql'); $wpdb->insert($table, array('uuid' => wp_generate_uuid4(), 'name' => '20% Off All Clothing', 'slug' => 'clothing-sale', 'description' => 'Get 20% off all items in the Clothing category!', 'status' => 'active', 'priority' => 1, 'product_selection_type' => 'all_products', 'category_ids' => json_encode(array(get_term_by('slug', 'clothing', 'product_cat')->term_id)), 'discount_type' => 'percentage', 'discount_value' => 20.0000, 'discount_rules' => json_encode(array('discount_type' => 'percentage', 'discount_value' => 20)), 'starts_at' => $now, 'ends_at' => date('Y-m-d H:i:s', strtotime('+1 year')), 'timezone' => 'UTC', 'created_by' => 1, 'created_at' => $now, 'updated_at' => $now, 'color_theme' => '#2271b1', 'icon' => 'tag')); ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; global $wpdb; $table = $wpdb->prefix . 'wsscd_campaigns'; $now = current_time('mysql'); $wpdb->insert($table, array('uuid' => wp_generate_uuid4(), 'name' => '$5 Off Accessories', 'slug' => 'accessories-fixed', 'description' => 'Fixed discount: $5 off all accessories!', 'status' => 'active', 'priority' => 3, 'product_selection_type' => 'all_products', 'category_ids' => json_encode(array(get_term_by('slug', 'accessories', 'product_cat')->term_id)), 'discount_type' => 'fixed', 'discount_value' => 5.0000, 'discount_rules' => json_encode(array('discount_type' => 'fixed', 'discount_value' => 5)), 'starts_at' => $now, 'ends_at' => date('Y-m-d H:i:s', strtotime('+1 year')), 'timezone' => 'UTC', 'created_by' => 1, 'created_at' => $now, 'updated_at' => $now, 'color_theme' => '#00a32a', 'icon' => 'money-alt')); ?>\"},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php'; global $wpdb; $table = $wpdb->prefix . 'wsscd_campaigns'; $now = current_time('mysql'); $wpdb->insert($table, array('uuid' => wp_generate_uuid4(), 'name' => 'Summer Flash Sale - 30% Off!', 'slug' => 'summer-flash-sale', 'description' => 'Coming soon! 30% off all Home & Garden products for a limited time.', 'status' => 'scheduled', 'priority' => 1, 'product_selection_type' => 'all_products', 'category_ids' => json_encode(array(get_term_by('slug', 'home-garden', 'product_cat')->term_id)), 'discount_type' => 'percentage', 'discount_value' => 30.0000, 'discount_rules' => json_encode(array('discount_type' => 'percentage', 'discount_value' => 30)), 'starts_at' => date('Y-m-d H:i:s', strtotime('+7 days')), 'ends_at' => date('Y-m-d H:i:s', strtotime('+14 days')), 'timezone' => 'UTC', 'created_by' => 1, 'created_at' => $now, 'updated_at' => $now, 'color_theme' => '#f0b849', 'icon' => 'calendar')); ?>\"},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.10","1.0.2","1.0.4","1.0.6","1.0.7","1.0.8","1.1.0","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1","1.2.2","1.3.0","1.4.0","1.5.0","1.5.1","1.5.3","1.5.4","1.5.5","1.5.6","1.5.61","1.5.62","1.5.63","1.5.64","1.5.65","1.5.66","1.5.67","1.5.68","1.5.69","1.5.70","1.6.2","1.7.0","1.7.1","1.7.11","1.7.20","1.7.21","1.7.22","1.7.23","1.7.25","1.7.26","1.7.27","1.7.29","1.7.31","1.7.33","1.7.34","1.7.36","1.7.40","1.7.41","1.7.42","1.7.43","1.7.44","1.7.45","1.7.46","1.7.64","1.7.65","1.8.0","1.8.1","1.8.11","1.8.12","1.8.13","1.8.14","1.8.15","1.8.17","1.8.18","1.8.19","1.8.20","1.8.21","1.8.22"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3444028,"resolution":"1","location":"assets","locale":""},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3444028,"resolution":"10","location":"assets","locale":""},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3444028,"resolution":"11","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3444028,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3444028,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3444028,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3444028,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3444028,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3444028,"resolution":"7","location":"assets","locale":""},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3444028,"resolution":"8","location":"assets","locale":""},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3444028,"resolution":"9","location":"assets","locale":""}},"screenshots":{"1":"Campaign wizard Step 1 - Basic information with campaign name, description, and contextual help","2":"Campaign wizard Step 2 - Product selection with category tree and filtering options","3":"Campaign wizard Step 3 - Discount configuration with live badge preview and positioning","4":"Campaign wizard Step 4 - Schedule configuration with date\/time picker and duration calculator","5":"Campaign wizard Step 5 - Review with smart recommendations and campaign summary sidebar","6":"Campaigns list - Manage all campaigns with status, schedule, health scores, and quick actions","7":"Campaign overview panel - Quick view of campaign settings and real-time performance metrics","8":"Main dashboard - Performance summary with campaign cards sorted by urgency","9":"Dashboard health widget - Monitor all campaigns with 6 health indicators at a glance","10":"Campaign planner - Smart suggestions for upcoming events and seasonal promotions","11":"Analytics dashboard (Pro) - Track revenue, conversions, click-through rates, and performance trends"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[253227,197693,254237,173793,22348],"plugin_category":[45],"plugin_contributors":[254395],"plugin_business_model":[],"class_list":["post-265799","plugin","type-plugin","status-publish","hentry","plugin_tags-automatic-discounts","plugin_tags-discount-rules","plugin_tags-scheduled-sales","plugin_tags-woocommerce-discount-plugin","plugin_tags-woocommerce-dynamic-pricing","plugin_category-ecommerce","plugin_contributors-webstepper","plugin_committers-webstepper","plugin_support_reps-webstepperio"],"banners":{"banner":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/banner-772x250.png?rev=3445907","banner_2x":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/banner-1544x500.png?rev=3445907","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/icon.svg?rev=3461509","icon":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/icon.svg?rev=3461509","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-1.png?rev=3444028","caption":"Campaign wizard Step 1 - Basic information with campaign name, description, and contextual help"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-2.png?rev=3444028","caption":"Campaign wizard Step 2 - Product selection with category tree and filtering options"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-3.png?rev=3444028","caption":"Campaign wizard Step 3 - Discount configuration with live badge preview and positioning"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-4.png?rev=3444028","caption":"Campaign wizard Step 4 - Schedule configuration with date\/time picker and duration calculator"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-5.png?rev=3444028","caption":"Campaign wizard Step 5 - Review with smart recommendations and campaign summary sidebar"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-6.png?rev=3444028","caption":"Campaigns list - Manage all campaigns with status, schedule, health scores, and quick actions"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-7.png?rev=3444028","caption":"Campaign overview panel - Quick view of campaign settings and real-time performance metrics"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-8.png?rev=3444028","caption":"Main dashboard - Performance summary with campaign cards sorted by urgency"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-9.png?rev=3444028","caption":"Dashboard health widget - Monitor all campaigns with 6 health indicators at a glance"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-10.png?rev=3444028","caption":"Campaign planner - Smart suggestions for upcoming events and seasonal promotions"},{"src":"https:\/\/ps.w.org\/smart-cycle-discounts\/assets\/screenshot-11.png?rev=3444028","caption":"Analytics dashboard (Pro) - Track revenue, conversions, click-through rates, and performance trends"}],"raw_content":"<!--section=description-->\n<h4>Video Tutorial<\/h4>\n\n<p>https:\/\/youtu.be\/dKFhduoevro<\/p>\n\n<p>Smart Cycle Discounts is a <strong>campaign-first promotion operations plugin for WooCommerce<\/strong> designed for stores that need reliable, scheduled, and high-performing discount campaigns.<\/p>\n\n<p>It combines the capabilities of a <strong>WooCommerce discount plugin<\/strong> and <strong>dynamic pricing engine<\/strong> within a single structured workflow.<\/p>\n\n<p>Instead of managing scattered sale prices and disconnected discount rules, you run organized promotion campaigns that help you <strong>plan, launch, monitor, and optimize promotions<\/strong> with tighter control over timing, conflicts, and performance.<\/p>\n\n<p>Many stores still run scheduled sales and automated promotions through manual edits and isolated rules. This often leads to <strong>overlapping discounts, margin leakage, late launches, early endings, and constant troubleshooting<\/strong>.<\/p>\n\n<p>Smart Cycle Discounts replaces that fragmented process with <strong>four connected systems<\/strong> designed to bring visibility, operational discipline, and safer promotion execution to WooCommerce stores.<\/p>\n\n<h4>Key Features<\/h4>\n\n<p>Smart Cycle Discounts helps WooCommerce stores run reliable, automated promotions with operational control.<\/p>\n\n<ul>\n<li>Automated WooCommerce discount campaigns<\/li>\n<li>Percentage and fixed discounts<\/li>\n<li>BOGO (Buy One Get One) promotions<\/li>\n<li>Scheduled and recurring sales campaigns<\/li>\n<li>Campaign-first promotion workflow (plan \u2192 schedule \u2192 launch \u2192 monitor)<\/li>\n<li>Priority-based overlap and conflict handling<\/li>\n<li>Campaign Health checks before launch<\/li>\n<li>Campaign Intelligence guidance for \"what to do right now\"<\/li>\n<li>Campaign lifecycle management (draft \u2192 scheduled \u2192 active \u2192 expired)<\/li>\n<li>Campaign-level performance tracking (Pro analytics depth)<\/li>\n<\/ul>\n\n<h4>Perfect For WooCommerce Stores That<\/h4>\n\n<ul>\n<li>Run seasonal, flash, or recurring sales campaigns<\/li>\n<li>Need to schedule WooCommerce discounts automatically<\/li>\n<li>Manage multiple promotions and want safer overlap control<\/li>\n<li>Want promotion risk checks before launching campaigns<\/li>\n<li>Need campaign-based decision support instead of simple discount rules<\/li>\n<\/ul>\n\n<h4>WooCommerce Discount Types and Dynamic Pricing Features<\/h4>\n\n<p><strong>Free version includes:<\/strong><\/p>\n\n<ul>\n<li>Percentage discounts<\/li>\n<li>Fixed amount discounts<\/li>\n<li>BOGO (Buy One Get One) deals<\/li>\n<li>Free shipping toggle inside campaign setup<\/li>\n<li>User role targeting (include\/exclude roles)<\/li>\n<li>Location targeting by billing or shipping country<\/li>\n<li>Recurring campaign scheduling (continuous or instances)<\/li>\n<\/ul>\n\n<p><strong>Pro version adds:<\/strong><\/p>\n\n<ul>\n<li>Tiered quantity discounts (volume pricing)<\/li>\n<li>Spend threshold discounts (cart-based conditions)<\/li>\n<li>Bundle deals (percentage, fixed, flat bundle pricing)<\/li>\n<li>Advanced discount-rule controls for deeper eligibility and margin protection<\/li>\n<li>Advanced subscription discount controls (when WooCommerce Subscriptions is active)<\/li>\n<li>Full analytics dashboard and advanced exports<\/li>\n<\/ul>\n\n<h4>Advanced WooCommerce Promotion Engine<\/h4>\n\n<p>Smart Cycle Discounts is built as a <strong>campaign system<\/strong>, not a one-off rule editor.<\/p>\n\n<ul>\n<li>Campaign lifecycle management (draft \u2192 scheduled \u2192 active \u2192 expired)<\/li>\n<li>Smart product targeting (all products, specific products, random products, categories, advanced filters)<\/li>\n<li>Timezone-aware scheduling automation<\/li>\n<li>Priority resolution when campaigns overlap<\/li>\n<li>Optimized caching and operations for larger WooCommerce catalogs<\/li>\n<\/ul>\n\n<h4>WooCommerce Promotion Conflict Detection<\/h4>\n\n<p>Before launch, Campaign Health and Campaign Intelligence evaluate operational risks including:<\/p>\n\n<ul>\n<li>Promotion conflicts and overlapping discounts<\/li>\n<li>Priority ties across concurrent campaigns<\/li>\n<li>Stock exposure and product readiness<\/li>\n<li>Schedule and timing consistency<\/li>\n<li>Discount integrity and risk indicators<\/li>\n<\/ul>\n\n<p>This shifts teams from reactive troubleshooting to <strong>proactive promotion control<\/strong>.<\/p>\n\n<h4>WooCommerce Campaign Analytics and Intelligence<\/h4>\n\n<p>Smart Cycle Discounts includes campaign-level operational insight so you can evaluate:<\/p>\n\n<ul>\n<li>Which campaigns are driving meaningful revenue<\/li>\n<li>Which discounted products perform best<\/li>\n<li>Which promotions should be scaled, paused, or redesigned<\/li>\n<\/ul>\n\n<p>The analytics dashboard helps stores <strong>optimize promotions instead of guessing which discounts work best<\/strong>.<\/p>\n\n<p>Advanced analytics depth and exports are available in Pro, while base Campaign Intelligence guidance is included in the free version.<\/p>\n\n<h4>Popular WooCommerce Promotion Use Cases (BOGO, Bulk Discounts, Bundle Discounts, Sale Scheduler)<\/h4>\n\n<p>Smart Cycle Discounts can be used to run:<\/p>\n\n<ul>\n<li>WooCommerce BOGO campaigns<\/li>\n<li>WooCommerce bulk discount and tiered pricing campaigns<\/li>\n<li>WooCommerce scheduled sales and recurring promotions<\/li>\n<li>WooCommerce bundle discount campaigns and product packages<\/li>\n<li>WooCommerce flash sales and seasonal campaigns<\/li>\n<li>WooCommerce customer-segment discounts (roles and locations)<\/li>\n<li>WooCommerce promotion cycles with planned campaign scheduling<\/li>\n<\/ul>\n\n<h4>Why This WooCommerce Discount Plugin Is Different<\/h4>\n\n<p>Most WooCommerce discount plugins are <strong>rule engines<\/strong>.<\/p>\n\n<p>Smart Cycle Discounts is a <strong>promotion operations system<\/strong> for WooCommerce: plan campaigns, launch promotions on schedule, detect risks before revenue loss, and run promotions with controlled execution.<\/p>\n\n<h4>Useful Links<\/h4>\n\n<ul>\n<li>Product page: <a href=\"https:\/\/webstepper.io\/wordpress\/plugins\/smart-cycle-discounts\/\">Smart Cycle Discounts<\/a><\/li>\n<li>Free plugin listing: <a href=\"https:\/\/wordpress.org\/plugins\/smart-cycle-discounts\/\">WordPress.org Plugin Page<\/a><\/li>\n<li>Documentation hub: <a href=\"https:\/\/webstepper.io\/docs\/smart-cycle-discounts\/\">Smart Cycle Discounts Docs<\/a><\/li>\n<li>Changelog: <a href=\"https:\/\/webstepper.io\/wordpress\/plugins\/smart-cycle-discounts\/changelog\/\">Version History<\/a><\/li>\n<li>Use cases: <a href=\"https:\/\/webstepper.io\/use-cases\/\">Campaign Use Cases<\/a><\/li>\n<li>Discount calculator: <a href=\"https:\/\/webstepper.io\/woocommerce-discount-calculator\/\">WooCommerce Discount Calculator<\/a><\/li>\n<li>Blog: <a href=\"https:\/\/webstepper.io\/category\/woocommerce-tips\/\">WooCommerce Tips &amp; Tutorials<\/a><\/li>\n<li>Support: <a href=\"https:\/\/webstepper.io\/support\">Support Center<\/a><\/li>\n<li>Contact: <a href=\"https:\/\/webstepper.io\/contact-us\/\">Contact Webstepper<\/a><\/li>\n<li>Privacy policy: <a href=\"https:\/\/webstepper.io\/privacy-policy\/\">Privacy Policy<\/a><\/li>\n<li>Terms: <a href=\"https:\/\/webstepper.io\/terms-of-service\/\">Terms of Service<\/a><\/li>\n<\/ul>\n\n<h4>Get Started<\/h4>\n\n<p>Install Smart Cycle Discounts, launch your first campaign in minutes, and move from manual discount edits to <strong>repeatable, automated WooCommerce promotions<\/strong>.<\/p>\n\n<h4>Need Help?<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/webstepper.io\/docs\/smart-cycle-discounts\/\">Documentation<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/support\/plugin\/smart-cycle-discounts\/\">Support Forum<\/a><\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20schedule%20woocommerce%20sales%20automatically%3F\"><h3>How do I schedule WooCommerce sales automatically?<\/h3><\/dt>\n<dd><p>Install Smart Cycle Discounts, create a campaign using the 5-step wizard, and set your start and end dates in the Schedule step. The plugin automatically activates your sale prices at the scheduled time and removes them when the campaign ends. No manual work required - your WooCommerce sale prices update themselves on schedule.<\/p><\/dd>\n<dt id=\"what%20woocommerce%20discount%20types%20are%20supported%3F\"><h3>What WooCommerce discount types are supported?<\/h3><\/dt>\n<dd><p>The free version supports percentage discounts, fixed amount discounts, and BOGO deals (Buy One Get One) on any WooCommerce product. The Pro version adds tiered quantity discounts (volume-based dynamic pricing), spend threshold discounts (minimum cart value offers), and bundle discounts (buy a set of products together for a deal). All discount types work with the automated scheduling system.<\/p><\/dd>\n<dt id=\"is%20this%20a%20woocommerce%20dynamic%20pricing%20plugin%3F\"><h3>Is this a WooCommerce dynamic pricing plugin?<\/h3><\/dt>\n<dd><p>Yes. Smart Cycle Discounts supports dynamic pricing through multiple discount types. The free version includes percentage discounts, fixed amount discounts, and BOGO deals. The Pro version adds tiered quantity pricing (buy more, save more), spend threshold discounts, and bundle deals - all the dynamic pricing options you need for a WooCommerce store.<\/p><\/dd>\n<dt id=\"can%20i%20set%20up%20bogo%20deals%20in%20woocommerce%20with%20this%20plugin%3F\"><h3>Can I set up BOGO deals in WooCommerce with this plugin?<\/h3><\/dt>\n<dd><p>Yes. BOGO (Buy One Get One) deals are included free. You can create Buy 1 Get 1 Free, Buy 2 Get 1 at 50% off, or any custom buy\/get combination with your chosen discount percentage. BOGO campaigns run on the same automated schedule as all other discount types.<\/p><\/dd>\n<dt id=\"how%20do%20i%20create%20bulk%20discounts%20for%20woocommerce%3F\"><h3>How do I create bulk discounts for WooCommerce?<\/h3><\/dt>\n<dd><p>Use the Tiered Quantity Discounts feature (Pro). Set quantity breaks like: Buy 5+ get 10% off, Buy 10+ get 20% off, Buy 25+ get 30% off. The discount applies automatically at checkout based on the quantity in the cart. Perfect for wholesale, B2B, and volume-based WooCommerce pricing.<\/p><\/dd>\n<dt id=\"how%20do%20i%20automate%20black%20friday%20and%20cyber%20monday%20sales%3F\"><h3>How do I automate Black Friday and Cyber Monday sales?<\/h3><\/dt>\n<dd><p>Create a campaign with your desired discount, select your products, and schedule it for your Black Friday dates (e.g., November 29 12:00 AM to December 2 11:59 PM). You can set this up weeks in advance using Draft mode. The campaign activates and deactivates automatically - no midnight price editing required.<\/p><\/dd>\n<dt id=\"is%20smart%20cycle%20discounts%20compatible%20with%20my%20theme%3F\"><h3>Is Smart Cycle Discounts compatible with my theme?<\/h3><\/dt>\n<dd><p>Yes. Smart Cycle Discounts is a backend plugin that works with any properly coded WordPress theme. It integrates with WooCommerce's native sale price system, so your theme's existing sale price styling applies automatically. No theme modifications needed.<\/p><\/dd>\n<dt id=\"can%20i%20schedule%20campaigns%20in%20advance%3F\"><h3>Can I schedule campaigns in advance?<\/h3><\/dt>\n<dd><p>Yes. Use the Schedule step in the wizard to set specific start and end dates\/times. Campaigns activate and deactivate automatically based on your schedule. You can create campaigns weeks or months in advance using Draft status, then set them to Scheduled when ready.<\/p><\/dd>\n<dt id=\"how%20many%20campaigns%20can%20i%20create%3F\"><h3>How many campaigns can I create?<\/h3><\/dt>\n<dd><p>There are no campaign limits - you can create and run <strong>unlimited campaigns<\/strong> in both the free and Pro versions. Run as many simultaneous promotions as your store needs.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20the%20discount%20types%3F\"><h3>What's the difference between the discount types?<\/h3><\/dt>\n<dd><p><strong>Free Version:<\/strong>\n- <strong>Percentage<\/strong>: Reduce price by a percentage (e.g., 25% off = $100 product becomes $75)\n- <strong>Fixed Amount<\/strong>: Reduce price by fixed amount (e.g., $10 off = $100 product becomes $90)\n- <strong>BOGO<\/strong>: Buy One Get One offers with flexible configurations (e.g., Buy 2 Get 1 Free)<\/p>\n\n<p><strong>Pro Version:<\/strong>\n- <strong>Tiered<\/strong>: Quantity-based dynamic pricing (e.g., Buy 5 get 10% off, Buy 10 get 20% off)\n- <strong>Spend Threshold<\/strong>: Discount based on cart total (e.g., Spend $100 get 15% off)\n- <strong>Bundle<\/strong>: Product bundle deals (e.g., Buy shampoo + conditioner + mask for 20% off)<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20site%3F\"><h3>Will this slow down my site?<\/h3><\/dt>\n<dd><p>Smart Cycle Discounts is designed for performance with optimized database queries, efficient caching, and admin-scoped asset loading. In most stores, frontend impact is minimal while campaign operations remain reliable at scale.<\/p><\/dd>\n<dt id=\"can%20i%20run%20multiple%20discount%20campaigns%20at%20the%20same%20time%3F\"><h3>Can I run multiple discount campaigns at the same time?<\/h3><\/dt>\n<dd><p>Yes. You can run unlimited campaigns simultaneously. Use the Priority field (1-5, where 5 is highest priority) to control which campaign takes precedence when multiple campaigns affect the same product. This prevents discount stacking and gives you full control.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20%22all%20products%22%2C%20%22specific%20products%22%2C%20and%20%22random%20products%22%3F\"><h3>What's the difference between \"All Products\", \"Specific Products\", and \"Random Products\"?<\/h3><\/dt>\n<dd><ul>\n<li><strong>All Products<\/strong> - Applies discount to your entire product catalog. Best for store-wide sales.<\/li>\n<li><strong>Specific Products<\/strong> - You manually select which products to discount using the AJAX-powered product search. Best for targeted promotions.<\/li>\n<li><strong>Random Products<\/strong> - Plugin automatically selects X random products from your catalog each day. Best for \"deal of the day\" promotions that drive repeat visits.<\/li>\n<\/ul><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%20hpos%20%28high-performance%20order%20storage%29%3F\"><h3>Does it work with WooCommerce HPOS (High-Performance Order Storage)?<\/h3><\/dt>\n<dd><p>Yes. Smart Cycle Discounts is fully compatible with WooCommerce HPOS and has been tested with custom order tables. It works with both the legacy post-based storage and the new High-Performance Order Storage system.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%20subscriptions%3F\"><h3>Does it work with WooCommerce Subscriptions?<\/h3><\/dt>\n<dd><p>Yes. Subscription products are fully supported. On the free tier, discount campaigns apply to the recurring subscription price automatically - no special setup needed. Your subscription product pages show strikethrough pricing just like regular products (e.g., ~~$29\/month~~ $23.20\/month). The Pro version adds advanced subscription controls: choose whether to discount the recurring price, the sign-up fee, or both. You can also limit discounts to the first X renewal payments - for example, \"20% off for the first 3 months, then full price.\" If WooCommerce Subscriptions is not installed, the subscription settings simply don't appear in the wizard.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%20block-based%20cart%20and%20checkout%3F\"><h3>Does it work with WooCommerce block-based cart and checkout?<\/h3><\/dt>\n<dd><p>Yes. Smart Cycle Discounts fully supports WooCommerce block cart and checkout pages (WooCommerce 8.3+). Discounted prices display correctly with strikethrough formatting in both classic templates and the new block-based cart\/checkout. The plugin automatically detects which template you're using and applies the appropriate discount display logic. No configuration needed - it just works.<\/p><\/dd>\n<dt id=\"can%20i%20duplicate%20an%20existing%20campaign%3F\"><h3>Can I duplicate an existing campaign?<\/h3><\/dt>\n<dd><p>Yes. On the Campaigns list page, hover over any campaign and click the \"Duplicate\" action. This creates a copy of the campaign with all settings intact, which you can then modify as needed. Great for creating seasonal promotions based on previous campaigns.<\/p><\/dd>\n<dt id=\"how%20does%20the%20priority%20system%20work%3F\"><h3>How does the priority system work?<\/h3><\/dt>\n<dd><p>When multiple campaigns affect the same product, the campaign with the highest priority (5 = highest, 1 = lowest) takes precedence. This lets you run multiple campaigns without conflicts - for example, a high-priority flash sale can override a lower-priority seasonal discount.<\/p><\/dd>\n<dt id=\"can%20i%20export%20campaign%20data%3F\"><h3>Can I export campaign data?<\/h3><\/dt>\n<dd><p>Campaign analytics and export features are available in the <strong>Pro version<\/strong>. Pro users can export campaign performance data in CSV or JSON format, and schedule automated reports.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20campaign%20ends%3F\"><h3>What happens when a campaign ends?<\/h3><\/dt>\n<dd><p>When a campaign reaches its end date\/time, it automatically deactivates and removes the sale prices from affected products. The campaign remains in your list as \"Expired\" and can be duplicated or reactivated with new dates. Your original product prices are restored automatically.<\/p><\/dd>\n<dt id=\"is%20there%20a%20way%20to%20test%20campaigns%20before%20activating%20them%3F\"><h3>Is there a way to test campaigns before activating them?<\/h3><\/dt>\n<dd><p>Yes. Use the <strong>Draft<\/strong> status to create and configure campaigns without activating them. You can review the campaign settings, check the health score, and preview which products will be affected. When ready, change the status to Active or Scheduled.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%20variable%20products%3F\"><h3>Does it work with WooCommerce variable products?<\/h3><\/dt>\n<dd><p>Yes. Smart Cycle Discounts fully supports WooCommerce variable products. When you apply a discount to a variable product, all variations receive the discount automatically. The sale price displays correctly on both the main product page and individual variation selections.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20products%20that%20are%20already%20on%20sale%3F\"><h3>Can I exclude products that are already on sale?<\/h3><\/dt>\n<dd><p>Yes. The plugin respects existing sale prices. If a product already has a manual sale price set in WooCommerce, you can configure your campaign to skip those products or override them based on your preference.<\/p><\/dd>\n<dt id=\"can%20i%20offer%20free%20shipping%20with%20discount%20campaigns%3F\"><h3>Can I offer free shipping with discount campaigns?<\/h3><\/dt>\n<dd><p>Yes. Enable free shipping for any campaign with a single toggle in the Discounts step. When enabled, customers receive free shipping on qualifying orders. You can apply free shipping to all shipping methods or select specific methods like flat rate or local pickup. This is included in the free version.<\/p><\/dd>\n<dt id=\"can%20i%20create%20wholesale%20or%20member-only%20discounts%3F\"><h3>Can I create wholesale or member-only discounts?<\/h3><\/dt>\n<dd><p>Yes. Use the User Role Targeting feature to restrict discounts to specific WordPress user roles. Choose \"Include\" mode to give discounts only to selected roles (e.g., \"Wholesale Customer\" or \"Premium Member\"), or \"Exclude\" mode to give discounts to everyone except certain roles. This makes it easy to create B2B pricing, membership discounts, or role-based promotions - all from the same WooCommerce store.<\/p><\/dd>\n<dt id=\"does%20it%20work%20alongside%20woocommerce%20coupons%3F\"><h3>Does it work alongside WooCommerce coupons?<\/h3><\/dt>\n<dd><p>Yes. Campaign discounts and WooCommerce coupons work independently. Campaign discounts apply to product prices (shown as sale prices), while coupons apply at checkout. Customers can use both together unless you configure specific restrictions.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20two%20campaigns%20affect%20the%20same%20product%3F\"><h3>What happens if two campaigns affect the same product?<\/h3><\/dt>\n<dd><p>The campaign with the higher priority wins. Each campaign has a priority setting from 1 (lowest) to 5 (highest). When multiple active campaigns include the same product, only the highest-priority discount applies. This prevents discount stacking and gives you full control over which promotions take precedence.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20woocommerce%27s%20built-in%20sale%20price%20feature%3F\"><h3>How is this different from WooCommerce's built-in sale price feature?<\/h3><\/dt>\n<dd><p>WooCommerce's built-in sale prices are set per product - you need to edit each product individually. Smart Cycle Discounts lets you manage discounts at the campaign level: select hundreds of products at once, set a schedule, and the plugin handles everything automatically. You also get features like priority management, health monitoring, random product rotation, and campaign intelligence that WooCommerce doesn't offer natively.<\/p><\/dd>\n<dt id=\"can%20i%20create%20recurring%20weekly%20or%20monthly%20promotions%3F\"><h3>Can I create recurring weekly or monthly promotions?<\/h3><\/dt>\n<dd><p>Yes. Recurring campaigns are available in the free version with two modes. <strong>Continuous mode<\/strong> toggles your campaign active\/inactive based on time windows - perfect for daily happy hours or weekend specials without creating hundreds of database entries. <strong>Instances mode<\/strong> creates separate campaign copies for each occurrence with individual analytics. Set up a \"Weekend Flash Sale\" once and schedule it to repeat every weekend, or create monthly promotions that run automatically.<\/p><\/dd>\n<dt id=\"is%20there%20a%20limit%20on%20how%20many%20products%20i%20can%20discount%3F\"><h3>Is there a limit on how many products I can discount?<\/h3><\/dt>\n<dd><p>No. You can apply discounts to your entire product catalog or select specific products. The plugin is optimized with efficient database queries and caching to handle stores with thousands of products without performance issues.<\/p><\/dd>\n<dt id=\"can%20i%20set%20minimum%20order%20requirements%20for%20discounts%3F\"><h3>Can I set minimum order requirements for discounts?<\/h3><\/dt>\n<dd><p>Yes (Pro). Application rules let you fine-tune when discounts apply. Set minimum quantity requirements (e.g., \"discount only applies when buying 3+ items\"), minimum order value thresholds, and choose whether to exclude products already on sale. These rules give you precise control over discount eligibility.<\/p><\/dd>\n<dt id=\"how%20do%20i%20control%20discount%20stacking%20with%20coupons%3F\"><h3>How do I control discount stacking with coupons?<\/h3><\/dt>\n<dd><p>Pro users can configure combination policies for each campaign. Choose whether your campaign discount can be combined with WooCommerce coupon codes or if it should be mutually exclusive. This prevents over-discounting and protects your margins when running multiple promotions.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.8.22<\/h4>\n\n<ul>\n<li>Improvement: CTA labels now resolve exclusively through the vocabulary service \u2014 policy map stripped of all cta_label entries, eliminating dual-source conflicts.<\/li>\n<li>Improvement: 12 reason codes gained specific CTA labels in vocabulary (previously only in policy map): priority conflicts, stock signals, economics, reliability, strategy codes.<\/li>\n<li>Fix: 8 vocabulary entries corrected \u2014 misleading copy on monitor_campaign, optimize_live_campaign, health_fair, stock_conflict, and 4 other codes.<\/li>\n<li>Fix: Priority conflict codes (blocked_by_higher_priority, overriding_lower_priority, priority_tie, priority_collision) now have explicit CTA labels instead of generic fallbacks.<\/li>\n<li>Cleanup: Removed 55 translatable cta_label strings from policy map and dead fallback branch in CTA resolution chain.<\/li>\n<li>UI: Scoped campaigns page header selectors to prevent style leaks into other admin pages.<\/li>\n<li>UI: Extracted card header design tokens into dashboard CSS custom properties.<\/li>\n<li>UI: Moved shared header icon styles from page-specific CSS to shared components.<\/li>\n<\/ul>\n\n<h4>1.8.21<\/h4>\n\n<ul>\n<li>Performance: Replaced transient-based caching with WordPress object cache API \u2014 eliminates transient bloat and orphaned rows.<\/li>\n<li>Performance: Batched category queries and removed redundant preloading on admin page loads.<\/li>\n<li>Fix: Campaigns with no products, no discount, or no schedule are now correctly blocked on all surfaces \u2014 previously only caught during wizard review.<\/li>\n<li>Fix: Post-activation campaigns with zero orders no longer show \"Ready\" \u2014 capped to \"Good\" until real order data arrives.<\/li>\n<li>Fix: Store-wide analytics no longer count on-hold orders as confirmed revenue.<\/li>\n<li>Fix: Dashboard product count no longer double-counts and override intensity uses store-wide denominator.<\/li>\n<li>Fix: Health score uses campaign average instead of worst-campaign minimum.<\/li>\n<li>Improvement: Intelligence cache invalidates immediately on campaign changes instead of waiting for TTL expiry.<\/li>\n<li>Improvement: Policy profiles simplified to three deterministic presets (conservative, balanced, aggressive) \u2014 removes adaptive interpolation that caused threshold drift between page loads.<\/li>\n<li>Improvement: 105 reason codes now have explicit functional impact classifications \u2014 eliminates silent fallback behavior in the diagnostic contract.<\/li>\n<li>Improvement: ~30 reason codes completed with all 7 vocabulary dimensions \u2014 state-specific impact copy (risk vs caution) now covers blocking, conflict, stock, discount, schedule, coverage, economics, and reliability codes.<\/li>\n<li>Cleanup: Removed ~380 lines of adaptive policy code, legacy compile branches, and dead Store Provider methods.<\/li>\n<li>UI: Tools page cache card now honestly reports cache state and disables Clear Cache when no persistent object cache is available.<\/li>\n<\/ul>\n\n<h4>1.8.20<\/h4>\n\n<ul>\n<li>Feature: 16 new intelligence recommendations \u2014 override intensity, dependency notice, predicted uplift (weak\/negative), revenue trend (up\/down), margin exposure, category saturation, and 8 wizard cross-field checks (discount depth vs duration, fixed discount vs product prices, spend threshold vs AOV, priority collision, recurring idle gap, bundle incentive, user role reach).<\/li>\n<li>Feature: Wizard CTA button now renders in the review step \u2014 clicking navigates directly to the relevant wizard step.<\/li>\n<li>Feature: All 31 diagnostic codes now have explicit action-oriented titles instead of generic family fallbacks.<\/li>\n<li>Fix: 15 intelligence logic correctness fixes \u2014 cache key mismatch, missing compile refresh guard, confidence cap bypass, guardrails wrong threshold, shared reason code, launch-ready linked check, score saturation, risk default asymmetry, double penalty, threshold ordering, health source mismatch, zero-activity default, economics code divergence, post-activation filtering, wizard health status.<\/li>\n<li>Fix: CTA button labels now match the recommended action across all surfaces (14 mismatches fixed).<\/li>\n<li>Fix: Surface adapter prefers vocabulary action titles over diagnostic messages for the \"Best Next Action\" display.<\/li>\n<li>Fix: Centralized margin economics code list prevents overflow cap from dropping important economics signals.<\/li>\n<\/ul>\n\n<h4>1.8.19<\/h4>\n\n<ul>\n<li>Feature: Health gauge now reflects actual diagnostic health instead of a composite formula that mixed opportunity scores into health. A campaign with critical issues always scores low.<\/li>\n<li>Feature: Store-wide dashboard intelligence \u2014 the dashboard verdict now aggregates health across ALL active campaigns instead of analyzing a single focus campaign. Conflicts between any campaigns are surfaced immediately.<\/li>\n<li>Feature: Override Intensity operational signal \u2014 replaces Discount Coverage (already shown in Catalog Snapshot) with a new intelligence metric showing what percentage of overlapping products have their discount silently overridden by higher-priority campaigns.<\/li>\n<li>Feature: Bidirectional conflict detection \u2014 campaigns now detect both directions of overlap: higher-priority campaigns blocking them AND lower-priority campaigns they override. Direction-aware messaging tells merchants exactly what's happening.<\/li>\n<li>Fix: Actions no longer trigger from synthetic metric thresholds alone \u2014 all metric-triggered actions (reduce overlap, protect stock, improve timing, protect margin, high discount load) now require diagnostic evidence from actual health analysis before firing.<\/li>\n<li>Fix: Free-tier confidence no longer penalized for missing Pro order data \u2014 evidence scoring split into diagnostic (free) and economic (Pro) sub-scores so free users see honest confidence based on their diagnostic data quality.<\/li>\n<li>Fix: Phantom metric computation gated \u2014 margin_impact and predicted_uplift no longer produce meaningless values when inputs are zeroed (free tier). Returns null instead of fake numbers driven by calendar month.<\/li>\n<li>Fix: Empty reason codes on pre-launch timing and overlap actions now properly assigned, fixing family deduplication.<\/li>\n<li>Fix: Badge and free shipping toggles use delegated events and live DOM lookups to prevent stale state.<\/li>\n<li>Fix: Clearing all conditions during campaign edit now persists to database.<\/li>\n<li>Fix: Incomplete campaigns can now be saved as draft via the wizard UI.<\/li>\n<li>Fix: Campaign ended hook fires when active campaign transitions to any non-active state.<\/li>\n<li>Fix: Stop recurrence button now cancels pending ActionScheduler events and cache entries.<\/li>\n<li>Feature: Resume Recurring button added to campaigns list for paused recurring campaigns.<\/li>\n<li>Maintenance: Removed deprecated code, zombie reason codes, legacy status string emissions, and dead code from the intelligence system.<\/li>\n<\/ul>\n\n<h4>1.8.18<\/h4>\n\n<ul>\n<li>Feature: Store-Aware Opportunity Intelligence \u2014 Upcoming Opportunities generates suggestions based on your store's actual campaign history and product data, not just calendar events.<\/li>\n<li>Feature: Campaign Drought, Best-Selling Category, Category Gap, Discount Coverage Gap, and Repeat Winner detections with Opportunity Chains and intelligence-aware suppression.<\/li>\n<li>Feature: Category-based wizard pre-fill \u2014 clicking a category-based store opportunity opens the wizard with the category pre-selected and all steps completed for quick review and launch.<\/li>\n<li>Feature: Intelligence now monitors free shipping configuration, user role targeting, location targeting, combination policies, and usage limits \u2014 previously invisible features are now covered by health checks with actionable signals.<\/li>\n<li>Feature: Usage limit proactive alerts \u2014 75% early warning before the 90% near-exhaustion signal, plus lifetime usage cap tracking with exhaustion detection.<\/li>\n<li>Feature: \"Campaign performing well\" positive signal \u2014 active campaigns with 7+ days of usage and no issues now show a positive health status instead of generic \"all checks passed.\"<\/li>\n<li>Feature: Adaptive inactivity detection \u2014 the \"no activity detected\" threshold adjusts to your store's order frequency (3 days for high-volume, 7 days for medium, 14 days for low-volume stores).<\/li>\n<li>Feature: Campaign age context in dashboard verdict \u2014 active campaigns show \"Running for X days\" alongside the health status.<\/li>\n<li>Feature: Conflict resolution guidance now explains which campaign wins: \"Campaign X has higher priority and overrides this campaign on shared products\" or \"The oldest campaign wins on ties.\"<\/li>\n<li>Feature: Bundle product picker now respects Products step filters \u2014 categories, tags, and advanced conditions from the Products step scope the bundle's available products.<\/li>\n<li>Fix: BOGO campaign creation failed with \"BOGO configuration is invalid\" after contract cleanup \u2014 <code>validate_compiled_campaign<\/code> now reads complex discount structures from <code>discount_rules<\/code> instead of stripped top-level keys.<\/li>\n<li>Fix: Intelligence showed false \"inventory problems\" on campaigns with no stock issues \u2014 <code>resolve_reason_code_family<\/code> substring fallback mapped <code>'product'<\/code> to <code>'stock'<\/code> family; now correctly maps to <code>'coverage'<\/code>.<\/li>\n<li>Fix: Health score stuck at 75 regardless of actual health \u2014 hardcoded default dimension scores (75), unlinked context scores (76\/80\/70), and decision_readiness computed before action severity replacement all contributed; defaults changed to 100, decision ordering fixed.<\/li>\n<li>Fix: \"Discounted products have inventory problems\" shown when all operational signals are green \u2014 cross-validator's <code>cross_bogo_all_products<\/code> warning triggered for category-filtered BOGO campaigns; now only fires for entirely unfiltered catalogs and uses <code>info<\/code> severity.<\/li>\n<li>Fix: Bundle strategy <code>variation_id<\/code> used as parent ID in cart quantity tracking \u2014 now correctly reads <code>product_id<\/code> as the parent for WooCommerce variations.<\/li>\n<li>Fix: Bundle <code>get_maximum_discount()<\/code> returned flat_price value instead of savings \u2014 now calculates <code>(total_regular_price - flat_price)<\/code> using <code>get_regular_price()<\/code> consistently.<\/li>\n<li>Fix: Bundle sanitizer allowed negative <code>discount_value<\/code>, uncapped <code>product_data<\/code> arrays, and desynchronized <code>product_ids<\/code>\/<code>product_data<\/code> \u2014 now floors at 0, caps at 50 entries, and filters <code>product_data<\/code> to match <code>product_ids<\/code>.<\/li>\n<li>Fix: <code>$threshold_mode<\/code> undefined variable in discounts step validator \u2014 Rule 6 (fixed discount exceeding spend amount) was dead code; now reads from the first threshold's <code>discount_type<\/code> field.<\/li>\n<li>Fix: Intelligence cache not invalidated on campaign create\/update\/delete \u2014 <code>invalidate_campaign()<\/code> now clears the <code>wsscd_dashboard_ci<\/code> prefix alongside other cache groups.<\/li>\n<li>Fix: <code>usage_limit_exhausted<\/code> and <code>usage_limit_nearly_exhausted<\/code> signals never fired \u2014 <code>usage_count<\/code> was read from the campaign array but never joined from the database; now resolved via <code>WSSCD_Customer_Usage_Repository<\/code>.<\/li>\n<li>Improvement: Canonical backend data schema with <code>WSSCD_Campaign_Data_Schema<\/code> \u2014 compiler emits canonical payloads, hydrator handles reverse boundary, deprecated top-level keys stripped after compilation.<\/li>\n<li>Improvement: Campaign Intelligence decision service now uses numeric health scores and boolean issue flags instead of Health Service vocabulary strings \u2014 eliminates cross-layer vocabulary dependency.<\/li>\n<li>Improvement: Health service product ID resolution consolidated \u2014 single <code>wc_get_product()<\/code> loop per analysis (was 2x per product), product IDs resolved once and threaded through all checks (was 3 separate resolutions).<\/li>\n<li>Improvement: View Model passes pre-normalized data to Decision Service \u2014 eliminates duplicate normalization of scores, diagnostics, actions, and reliability per pipeline call.<\/li>\n<li>Improvement: <code>resolve_reason_code_family()<\/code> memoized with static cache \u2014 reduces ~30 repeated lookups per pipeline call to ~8 unique lookups.<\/li>\n<li>Improvement: Quality guard inspects only the primary action instead of normalizing the entire action list (result was discarded).<\/li>\n<li>Improvement: All diagnostic messages now describe problems only \u2014 action advice (\"Consider...\", \"Ensure...\", \"Verify...\") removed from health service and cross-validator messages; IS vocabulary is the sole owner of fix text.<\/li>\n<li>Improvement: Full vocabulary coverage for all 6 discount types \u2014 40+ reason codes added to family map, reason labels, impact text, action titles, and CTA labels.<\/li>\n<li>Improvement: Operational signal panels now scan <code>risk_flags<\/code> alongside <code>critical_issues<\/code> and <code>warnings<\/code> \u2014 eliminates contradictions between the verdict and the signal cards.<\/li>\n<li>Improvement: <code>build_schedule_risk_state<\/code> now matches <code>recurring<\/code> category items alongside <code>schedule<\/code> items.<\/li>\n<li>Feature: Email notifications now include Campaign Intelligence verdicts \u2014 Campaign Started, Ending Soon, and Ended emails show the IS health score, verdict, reason, and recommended action.<\/li>\n<li>Feature: Health Alert email notification (free) \u2014 triggered when Campaign Intelligence detects critical health issues on an active campaign. Enabled by default.<\/li>\n<li>Feature: Usage Limit Alert email notification (free) \u2014 triggered when campaign usage reaches 75%, 90%, or 100% of the configured limit. Enabled by default.<\/li>\n<li>Feature: Conflict Alert email notification (Pro) \u2014 triggered when same-priority or higher-priority campaign conflicts are detected, including which campaign wins.<\/li>\n<li>Feature: Zero Activity Alert email notification (Pro) \u2014 triggered when an active campaign has no discount usage after the adaptive inactivity threshold.<\/li>\n<li>Improvement: Notification hooks use transient-based deduplication \u2014 each signal fires at most one email per campaign per day to prevent alert fatigue.<\/li>\n<li>Feature: Campaign Overview Panel actions (Activate\/Pause, Duplicate, Delete) now work via AJAX from any page \u2014 dashboard, campaigns, analytics \u2014 without navigating away. Page reloads in place after action completes.<\/li>\n<li>Feature: Campaign list action buttons show animated loading spinner on click while the page navigates to process the action.<\/li>\n<li>Feature: Tools page cache clear, log clear, and table optimization now work without page refresh \u2014 counters and displays update inline via AJAX.<\/li>\n<li>Feature: Unsaved changes indicator on Settings and Notifications pages \u2014 \"Unsaved changes\" badge appears next to the Save button when form fields are modified, with browser leave warning.<\/li>\n<li>Fix: Campaign Overview Panel footer buttons (Close, Edit, Activate, etc.) crashed on every use due to stale <code>footerName<\/code> reference in <code>resetPanel()<\/code> after incomplete refactor.<\/li>\n<li>Fix: Overview panel action URLs contained HTML-encoded <code>&amp;amp;<\/code> entities (from <code>wp_nonce_url<\/code>) which broke query parameters when used in JavaScript <code>window.location.href<\/code> \u2014 replaced with raw URL builder for JSON\/JS contexts.<\/li>\n<li>Fix: Log Viewer \"View Log\" returned <code>[object Object]<\/code> instead of log text \u2014 <code>handle_view_logs<\/code> double-wrapped the result from <code>view_logs()<\/code> which already returns <code>array('logs' =&gt; string)<\/code>.<\/li>\n<li>Fix: Button loading spinner did not animate \u2014 <code>@keyframes<\/code> was defined in a separate CSS file; spinner now uses self-contained <code>@keyframes wsscd-button-spin<\/code> in <code>_buttons.css<\/code> with hardcoded fallbacks and explicit SVG icon hiding.<\/li>\n<li>Improvement: Notifications page merged FREE and PRO sections into single \"Notification Types\" section with \"Advanced Notifications PRO\" divider \u2014 eliminates duplicate section headers and 6 repetitive PRO badges.<\/li>\n<li>Improvement: Campaigns page localizer now includes all operational button i18n keys (activate, pause, duplicate, moveToTrash, confirmDelete) \u2014 previously missing, relied on JS fallback strings.<\/li>\n<\/ul>\n\n<p>For the complete changelog of earlier versions, visit <a href=\"https:\/\/webstepper.io\/wordpress\/plugins\/smart-cycle-discounts\/changelog\/\">the full changelog<\/a>.<\/p>","raw_excerpt":"WooCommerce discount plugin for automated campaigns: dynamic pricing, BOGO, product bundles, tiered pricing, scheduled sales, and conflict safeguards.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/265799","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=265799"}],"author":[{"embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webstepper"}],"wp:attachment":[{"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=265799"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=265799"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=265799"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=265799"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=265799"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/scn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=265799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}