{"id":360930,"date":"2026-09-03T16:55:18","date_gmt":"2026-09-03T16:55:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/flash-sale-stock-guard-for-woocommerce\/"},"modified":"2026-09-03T16:54:47","modified_gmt":"2026-09-03T16:54:47","slug":"flash-sale-stock-guard-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/flash-sale-stock-guard-for-woocommerce\/","author":20545557,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Flash Sale Stock Guard for WooCommerce","header_author":"Akshat Saxena","header_description":"Stop overselling during flash sales and limited drops. Locks stock at add-to-cart on the products you choose, with an optional countdown.","assets_banners_color":"9474b7","last_updated":"2026-09-03 16:54:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/akshat009\/flash-sale-stock-guard-for-woocommerce","header_author_uri":"https:\/\/github.com\/akshat009","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"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":"developerakshat","date":"2026-09-03 16:54:47","revision":3680099}},"upgrade_notice":{"1.0.0":"<p>Initial release version.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3680082,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3680082,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.gif":{"filename":"banner-1544x500.gif","revision":3680082,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.gif":{"filename":"banner-772x250.gif","revision":3680082,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3680271,"resolution":false,"location":"assets","locale":"","contents":"{\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=flash-sale-stock-guard-for-woocommerce\",\"preferredVersions\":{\"php\":\"8.0\",\"wp\":\"latest\"},\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"flash-sale-stock-guard-for-woocommerce\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3680082,"resolution":"1","location":"assets","locale":"","width":2784,"height":2314},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3680082,"resolution":"2","location":"assets","locale":"","width":2784,"height":2874},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3680082,"resolution":"3","location":"assets","locale":"","width":2784,"height":1756},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3680082,"resolution":"4","location":"assets","locale":"","width":2784,"height":1562},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3680082,"resolution":"5","location":"assets","locale":"","width":2848,"height":1616}},"screenshots":{"1":"Settings screen under WooCommerce \u2192 Stock Guard.","2":"The \"Always guard this item\" checkbox on a product's Inventory tab.","3":"Live countdown shown on the cart page.","4":"Live countdown shown on the checkout page.","5":"The pop-up shown on the cart or checkout page when a reservation expires."}},"plugin_section":[],"plugin_tags":[50558,279057,59098,279058,286],"plugin_category":[45],"plugin_contributors":[273671],"plugin_business_model":[],"class_list":["post-360930","plugin","type-plugin","status-publish","hentry","plugin_tags-flash-sale","plugin_tags-prevent-overselling","plugin_tags-stock-management","plugin_tags-stock-reservation","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-developerakshat","plugin_committers-developerakshat"],"banners":{"banner":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/banner-772x250.gif?rev=3680082","banner_2x":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/banner-1544x500.gif?rev=3680082","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/icon-128x128.gif?rev=3680082","icon_2x":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/icon-256x256.gif?rev=3680082","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/screenshot-1.png?rev=3680082","caption":"Settings screen under WooCommerce \u2192 Stock Guard."},{"src":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/screenshot-2.png?rev=3680082","caption":"The \"Always guard this item\" checkbox on a product's Inventory tab."},{"src":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/screenshot-3.png?rev=3680082","caption":"Live countdown shown on the cart page."},{"src":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/screenshot-4.png?rev=3680082","caption":"Live countdown shown on the checkout page."},{"src":"https:\/\/ps.w.org\/flash-sale-stock-guard-for-woocommerce\/assets\/screenshot-5.png?rev=3680082","caption":"The pop-up shown on the cart or checkout page when a reservation expires."}],"raw_content":"<!--section=description-->\n<p>Overselling isn't just a flash-sale problem. Any product with more people watching it than units left \u2014 a restock, a handmade batch, a limited print run, a popular size running low \u2014 can sell the same last unit to two customers within seconds of each other. <strong>Flash Sale Stock Guard for WooCommerce<\/strong> closes that window for good: the instant a guarded product is added to cart, its stock is held against that shopper, so nobody else can check out with units that are already spoken for. If they don't complete checkout in time, the hold expires automatically and the stock goes back into circulation \u2014 no manual cleanup, no oversold orders to refund and apologize for.<\/p>\n\n<p>It's named for the moment it matters most, but it runs every day, on every guarded product \u2014 quietly protecting stock whether or not a sale is even happening.<\/p>\n\n<p>Stock holds like this are usually locked behind premium inventory or checkout add-ons. Here, that protection is built in and free from the moment you activate the plugin \u2014 no upsell, no \"Pro\" version required for concurrency-safe locking, per-variation targeting, order-status-aware release, or the developer filters below.<\/p>\n\n<h4>How it works<\/h4>\n\n<ul>\n<li><strong>Hold on add-to-cart.<\/strong> Adding a guarded item reserves that quantity immediately, before checkout even starts.<\/li>\n<li><strong>Race-condition safe.<\/strong> When two shoppers fight over the last unit at the same instant, a database-level lock scoped to that exact product decides it \u2014 not a stock check that was already stale by the time it ran.<\/li>\n<li><strong>Automatic expiry.<\/strong> Holds release themselves after a duration you set (1 minute to 24 hours) \u2014 long enough to check out, short enough that an abandoned cart doesn't sit on your inventory.<\/li>\n<li><strong>A clear hand-off when a hold expires.<\/strong> When the countdown reaches zero the released item is removed from the shopper's cart and a short pop-up explains that the reservation lapsed, with a button back to the shop \u2014 the pattern ticketing and limited-drop sites use, instead of leaving a stale cart behind.<\/li>\n<li><strong>Order-aware.<\/strong> A completed order converts the hold so it stops expiring; a cancelled, failed, or refunded order releases it back to stock.<\/li>\n<\/ul>\n\n<h4>Choose what gets guarded<\/h4>\n\n<ul>\n<li><strong>Every stock-managed product<\/strong> \u2014 a store-wide safety net.<\/li>\n<li><strong>Only products at or below a low-stock threshold you set<\/strong> (the default) \u2014 guard scarce items automatically without a manual checklist before every drop.<\/li>\n<li><strong>Only products you mark individually<\/strong> \u2014 a checkbox right on the product's Inventory tab, with its own checkbox per variation, so one variation of a size or color can be protected without guarding the whole product.<\/li>\n<li>Per-item checkboxes always guard that item, no matter what the store-wide mode says \u2014 a manual override on top of the automatic rule, not instead of it.<\/li>\n<\/ul>\n\n<h4>Built for how customers actually shop<\/h4>\n\n<ul>\n<li>Works on both the classic shortcode-based Cart\/Checkout <strong>and<\/strong> the block-based Cart\/Checkout \u2014 no separate setup for either.<\/li>\n<li>An optional live countdown on the cart and checkout pages tells shoppers exactly how long their hold is good for. When it reaches zero it becomes a pop-up \u2014 background, text, and button colours and text size all set from the settings screen \u2014 that sends them back to the shop to start again.<\/li>\n<li>Turn the countdown off entirely and the stock protection still runs invisibly in the background.<\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<ul>\n<li><code>fssgw_hold_ttl<\/code> filter \u2014 vary hold duration per product or globally.<\/li>\n<li><code>fssgw_is_product_guarded<\/code> filter \u2014 decide guarding programmatically, by category, campaign, or anything the settings screen doesn't cover.<\/li>\n<li><code>fssgw_release_statuses<\/code> filter \u2014 control which order statuses release a converted hold.<\/li>\n<li><code>fssgw_providers<\/code> filter \u2014 register additional service providers without touching plugin files.<\/li>\n<li><code>fssgw_holds_expired<\/code> action \u2014 fires after each cron expiry sweep, for logging or metrics.<\/li>\n<li>WP-CLI: <code>wp fssgw status<\/code>.<\/li>\n<\/ul>\n\n<p>See the plugin's <a href=\"https:\/\/github.com\/akshat009\/flash-sale-stock-guard-for-woocommerce#filters--actions\">GitHub README<\/a> for parameters and code examples for each hook.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Make sure WooCommerce is installed and active \u2014 this plugin requires it.<\/li>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/flash-sale-stock-guard-for-woocommerce<\/code>, or install it through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Stock Guard<\/strong> to choose which products are guarded, set the hold duration, turn the countdown on or off, and style the expiry pop-up.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20stop%20overselling%20on%20woocommerce%3F\"><h3>How do I stop overselling on WooCommerce?<\/h3><\/dt>\n<dd><p>Overselling happens because WooCommerce only checks stock at checkout \u2014 two shoppers can add the last unit to their carts at the same time, and both are allowed to try to pay. Turn on Flash Sale Stock Guard for a product (or let the low-stock default catch it automatically), and stock is held the moment it's added to cart instead \u2014 so only one of those two shoppers can ever complete the order.<\/p><\/dd>\n<dt id=\"is%20this%20only%20useful%20during%20flash%20sales%3F\"><h3>Is this only useful during flash sales?<\/h3><\/dt>\n<dd><p>No \u2014 that's just the scenario overselling happens fastest in. The same hold-on-add-to-cart protection runs every day for any product you guard, sale or no sale: low-stock items, one-off restocks, made-to-order or limited-run products, anything where two people could otherwise grab the same last unit.<\/p><\/dd>\n<dt id=\"does%20this%20require%20woocommerce%3F\"><h3>Does this require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. It has no purpose without it, and won't do anything if WooCommerce isn't active.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20customer%27s%20hold%20expires%3F\"><h3>What happens when a customer's hold expires?<\/h3><\/dt>\n<dd><p>The held quantity is released back to available stock automatically, and the item is removed from that shopper's cart. On the cart or checkout page the countdown turns into a pop-up telling them the reservation lapsed, with a button back to the shop. If the item is still in stock, adding it again starts a fresh hold.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20variable%20products%3F\"><h3>Does this work with variable products?<\/h3><\/dt>\n<dd><p>Yes \u2014 holds are tracked per variation, not just per product.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20store%3F\"><h3>Will this slow down my store?<\/h3><\/dt>\n<dd><p>No. Stock checks use a lightweight database lock scoped to the specific product being held, so shoppers buying different items never wait on each other.<\/p><\/dd>\n<dt id=\"does%20the%20countdown%20work%20with%20the%20block-based%20cart%20and%20checkout%3F\"><h3>Does the countdown work with the block-based Cart and Checkout?<\/h3><\/dt>\n<dd><p>Yes, alongside the classic shortcode-based versions.<\/p><\/dd>\n<dt id=\"can%20i%20turn%20off%20the%20countdown%20but%20keep%20the%20stock%20protection%3F\"><h3>Can I turn off the countdown but keep the stock protection?<\/h3><\/dt>\n<dd><p>Yes \u2014 the countdown display and the hold logic are controlled by separate settings.<\/p><\/dd>\n<dt id=\"can%20i%20change%20how%20the%20expiry%20pop-up%20looks%3F\"><h3>Can I change how the expiry pop-up looks?<\/h3><\/dt>\n<dd><p>Yes. <strong>WooCommerce \u2192 Stock Guard \u2192 Expiry popup<\/strong> sets its background colour, text colour, button colours, and text size. The wording and the \"back to shop\" destination are fixed.<\/p><\/dd>\n<dt id=\"will%20uninstalling%20the%20plugin%20delete%20my%20data%3F\"><h3>Will uninstalling the plugin delete my data?<\/h3><\/dt>\n<dd><p>Not by default. Your guard settings and per-product overrides stay in the database in case you reinstall. Data is only wiped if you tick \"Delete data on uninstall\" in the settings screen first.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Prevent overselling in WooCommerce \u2014 hold stock on add-to-cart, flash sale or any day, with a live countdown for shoppers.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360930","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=360930"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/developerakshat"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360930"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360930"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360930"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360930"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360930"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}