{"id":386397,"date":"2026-10-13T16:18:51","date_gmt":"2026-10-13T16:18:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sazcancel-auto-cancel-stale-on-hold-orders-release-stock-for-woocommerce\/"},"modified":"2026-10-13T16:57:28","modified_gmt":"2026-10-13T16:57:28","slug":"sazcancel-auto-cancel-on-hold-orders","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sazcancel-auto-cancel-on-hold-orders\/","author":23561562,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"SazCancel \u2013 Auto-Cancel On-Hold Orders","header_author":"Sazonov Studio","header_description":"Automatically cancel abandoned On-Hold orders (BACS, check, offline invoices) under merchant-defined rules to release stuck inventory.","assets_banners_color":"0d1729","last_updated":"2026-10-13 16:57:28","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/sazonov-studio.com\/","header_plugin_uri":"","header_author_uri":"https:\/\/sazonov-studio.netlify.app\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":56,"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":"alexsazonov","date":"2026-10-13 16:57:28","revision":3744484}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3744484,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3744484,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3744484,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3744484,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3744432,"resolution":"1","location":"assets","locale":"","width":972,"height":435},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3744432,"resolution":"2","location":"assets","locale":"","width":972,"height":435},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3744432,"resolution":"3","location":"assets","locale":"","width":972,"height":435}},"screenshots":{"1":"SazCancel Live HUD Dashboard in Simulation Mode showing eligible On-Hold orders and locked stock.","2":"Activity Audit Log showing safe Read-Only Preview Check with safe legacy baseline detection.","3":"Native WooCommerce stock restoration verification showing stock automatically restored upon cancellation."}},"plugin_section":[],"plugin_tags":[286509,244945,282842,59098,286],"plugin_category":[45],"plugin_contributors":[281453],"plugin_business_model":[],"class_list":["post-386397","plugin","type-plugin","status-publish","hentry","plugin_tags-auto-cancel","plugin_tags-cancel-orders","plugin_tags-on-hold-orders","plugin_tags-stock-management","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-alexsazonov","plugin_committers-alexsazonov"],"banners":{"banner":"https:\/\/ps.w.org\/sazcancel-auto-cancel-on-hold-orders\/assets\/banner-772x250.png?rev=3744484","banner_2x":"https:\/\/ps.w.org\/sazcancel-auto-cancel-on-hold-orders\/assets\/banner-1544x500.png?rev=3744484","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sazcancel-auto-cancel-on-hold-orders\/assets\/icon-128x128.png?rev=3744484","icon_2x":"https:\/\/ps.w.org\/sazcancel-auto-cancel-on-hold-orders\/assets\/icon-256x256.png?rev=3744484","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sazcancel-auto-cancel-on-hold-orders\/assets\/screenshot-1.png?rev=3744432","caption":"SazCancel Live HUD Dashboard in Simulation Mode showing eligible On-Hold orders and locked stock."},{"src":"https:\/\/ps.w.org\/sazcancel-auto-cancel-on-hold-orders\/assets\/screenshot-2.png?rev=3744432","caption":"Activity Audit Log showing safe Read-Only Preview Check with safe legacy baseline detection."},{"src":"https:\/\/ps.w.org\/sazcancel-auto-cancel-on-hold-orders\/assets\/screenshot-3.png?rev=3744432","caption":"Native WooCommerce stock restoration verification showing stock automatically restored upon cancellation."}],"raw_content":"<!--section=description-->\n<p>Tired of abandoned <strong>On-Hold<\/strong> orders indefinitely blocking your product inventory?<\/p>\n\n<p>In WooCommerce Core, the built-in <em>Hold stock (minutes)<\/em> setting <strong>only applies to \"Pending payment\" orders<\/strong>. When customers order via <strong>Direct Bank Transfer (BACS)<\/strong>, <strong>Cheque<\/strong>, or offline invoices, the order is placed in <strong>On-Hold<\/strong> status and stock is deducted from your shelves. If the customer never pays, the order sits in your store forever \u2014 keeping products in a false \"Out of Stock\" state and costing you sales.<\/p>\n\n<p><strong>SazCancel<\/strong> solves this exact gap. It safely and automatically cancels stale On-Hold orders after your chosen delay (e.g., 48 hours or 3 days), allowing WooCommerce Core to <strong>natively restock your products<\/strong>.<\/p>\n\n<h3>\ud83d\udee1\ufe0f Built for Merchant Safety (Zero-Disaster Guard)<\/h3>\n\n<p>SazCancel is built on strict safeguards to protect merchant orders and store inventory:<\/p>\n\n<ul>\n<li><strong>Simulation Mode (Dry Run) Enabled by Default:<\/strong> Upon installation, Dry Run is ON. SazCancel simulates the process, calculating how many orders and stock units would be released, recording events into an Activity Log without modifying real orders.<\/li>\n<li><strong>Eligible Gateways Whitelist:<\/strong> You decide which payment methods are subject to auto-cancellation (e.g. BACS and Cheque). Orders from PayPal, Stripe, COD, or other gateways are <strong>never touched<\/strong>.<\/li>\n<li><strong>Precise On-Hold Age Tracking:<\/strong> SazCancel measures order age strictly from the exact moment the order entered <code>On-Hold<\/code> status (not from creation date). If a manager temporarily toggled an order to On-Hold 10 minutes ago, it won't be prematurely cancelled!<\/li>\n<li><strong>Last-Moment Status Revalidation:<\/strong> Before executing cancellation, SazCancel revalidates the order in real time. If the order was paid or moved to <code>Processing<\/code> or <code>Completed<\/code>, the job immediately exits.<\/li>\n<li><strong>Safe Legacy Recovery Baseline:<\/strong> Old On-Hold orders placed prior to plugin installation receive a fresh, full grace period from the moment they are first detected. No sudden cancellations!<\/li>\n<li><strong>Native WooCommerce Restock:<\/strong> SazCancel lets WooCommerce Core handle stock restoration via <code>$order-&gt;update_status('cancelled')<\/code>. The core <code>wc_maybe_increase_stock_levels()<\/code> function safely returns the exact items back to stock.<\/li>\n<li><strong>Action Scheduler Event Queue:<\/strong> Powered by WooCommerce's native Action Scheduler with duplicate job prevention (<code>unique = true<\/code>). No heavy cron database scans.<\/li>\n<li><strong>Activity Audit Log:<\/strong> See the last 30 automated events, cancellations, and simulations right on your settings screen.<\/li>\n<li><strong>100% HPOS Native:<\/strong> Fully compatible with High-Performance Order Storage (<code>custom_order_tables<\/code>) and Cart\/Checkout Blocks.<\/li>\n<li><strong>100% On-Premise PHP:<\/strong> Self-contained code with zero external tracking, no third-party APIs, and no subscriptions.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/sazcancel-auto-cancel-on-hold-orders<\/code> directory, or install through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Go to <strong>WooCommerce &gt; SazCancel<\/strong> to review your settings.<\/li>\n<li>Select your eligible payment gateways (e.g., BACS), set your cancellation delay (e.g., 72 hours), and test via Simulation (Dry Run) mode.<\/li>\n<li>When ready, click <strong>Activate Live Mode<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20sazcancel%20cancel%20orders%20immediately%20after%20installation%3F\"><h3>Does SazCancel cancel orders immediately after installation?<\/h3><\/dt>\n<dd><p>No. SazCancel activates in <strong>Dry Run (Simulation Mode)<\/strong> by default. It analyzes your store and shows you a live preview of which orders would be affected, without changing any order statuses or inventory. You can switch to Live Mode whenever you are ready.<\/p><\/dd>\n<dt id=\"does%20woocommerce%20automatically%20restore%20product%20stock%20when%20an%20order%20is%20cancelled%3F\"><h3>Does WooCommerce automatically restore product stock when an order is cancelled?<\/h3><\/dt>\n<dd><p>Yes! When SazCancel transitions an eligible order to <code>Cancelled<\/code>, WooCommerce Core natively triggers <code>wc_maybe_increase_stock_levels()<\/code>. Any inventory previously deducted for that order is automatically added back to your active stock.<\/p><\/dd>\n<dt id=\"what%20if%20a%20customer%20pays%20by%20bank%20transfer%20right%20before%20the%20timeout%3F\"><h3>What if a customer pays by bank transfer right before the timeout?<\/h3><\/dt>\n<dd><p>If an admin or payment webhook marks the order as <code>Processing<\/code> or <code>Completed<\/code>, SazCancel's <strong>Last-Moment Status Revalidation<\/strong> will see that the order is no longer <code>On-Hold<\/code> and will instantly exit without making any changes.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20cash%20on%20delivery%20%28cod%29%20or%20specific%20gateways%3F\"><h3>Can I exclude Cash on Delivery (COD) or specific gateways?<\/h3><\/dt>\n<dd><p>Yes. SazCancel includes a payment gateway whitelist. Only the payment gateways you check (e.g., Direct Bank Transfer BACS) will be monitored. All unselected gateways are completely ignored.<\/p><\/dd>\n<dt id=\"does%20sazcancel%20support%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Does SazCancel support High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. SazCancel is 100% compatible with HPOS (<code>custom_order_tables<\/code>) and WooCommerce Blocks.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>Event-Driven Action Scheduler queue with duplicate prevention (<code>unique = true<\/code>).<\/li>\n<li>Last-Moment Status Revalidation.<\/li>\n<li>Safe Legacy Recovery Baseline for existing orders.<\/li>\n<li>Simulation Mode (Dry Run) by default.<\/li>\n<li>Activity Audit Log in admin settings.<\/li>\n<li>Native WooCommerce stock restoration support.<\/li>\n<li>Full WooCommerce HPOS compatibility.<\/li>\n<\/ul>","raw_excerpt":"Automatically cancel abandoned On-Hold orders (BACS, check, offline invoices) under merchant-defined rules to release stuck inventory.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/386397","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=386397"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alexsazonov"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=386397"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=386397"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=386397"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=386397"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=386397"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=386397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}