{"id":383094,"date":"2026-10-13T03:10:49","date_gmt":"2026-10-13T03:10:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/writeleash\/"},"modified":"2026-10-13T07:44:51","modified_gmt":"2026-10-13T07:44:51","slug":"writeleash","status":"publish","type":"plugin","link":"https:\/\/ary.wordpress.org\/plugins\/writeleash\/","author":23581832,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.1","stable_tag":"0.2.1","tested":"7.1.3","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"WriteLeash","header_author":"Duy Tran","header_description":"Preview WooCommerce bulk price changes, preserve newer edits, resume interrupted jobs, and undo eligible changes.","assets_banners_color":"142c43","last_updated":"2026-10-13 07:44:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/MrDarkRoot\/WriteLeash","header_author_uri":"https:\/\/profiles.wordpress.org\/duyytrann","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"duyytrann","date":"2026-10-13 03:10:38","revision":3742817},"0.2.1":{"tag":"0.2.1","author":"duyytrann","date":"2026-10-13 07:44:51","revision":3743191}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3742817,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3742817,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3742817,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3742817,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3742817,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.0","0.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3742817,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3742817,"resolution":"2","location":"assets","locale":"","width":1238,"height":1442},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3742817,"resolution":"3","location":"assets","locale":"","width":1280,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3742817,"resolution":"4","location":"assets","locale":"","width":1238,"height":1600},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3742817,"resolution":"5","location":"assets","locale":"","width":1240,"height":480},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3742817,"resolution":"6","location":"assets","locale":"","width":1280,"height":900}},"screenshots":{"1":"Earlier selection-screen example: choose products by name, SKU or category. Current category selection also offers nested subcategories.","2":"Review exact before-and-after Sale Price values, variations, warnings and skips in this earlier Preview example.","3":"Background-job example with 24 products: see changed and remaining products, and Resume interrupted work. This capture predates live progress updates.","4":"Review completed changes and explained skips; one invalid price does not stop the useful result.","5":"A later price or setting change becomes a conflict instead of a blind overwrite. Regular Price example: expected $100, planned $80, current $120 remains unchanged.","6":"Review History outcomes and eligible Undo availability in this earlier example. Availability does not guarantee that every product will restore."}},"plugin_section":[],"plugin_tags":[11143,4393,18329,6602,286],"plugin_category":[45],"plugin_contributors":[286307],"plugin_business_model":[],"class_list":["post-383094","plugin","type-plugin","status-publish","hentry","plugin_tags-bulk-edit","plugin_tags-prices","plugin_tags-undo","plugin_tags-variations","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-duyytrann","plugin_committers-duyytrann"],"banners":{"banner":"https:\/\/ps.w.org\/writeleash\/assets\/banner-772x250.png?rev=3742817","banner_2x":"https:\/\/ps.w.org\/writeleash\/assets\/banner-1544x500.png?rev=3742817","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/writeleash\/assets\/icon.svg?rev=3742817","icon":"https:\/\/ps.w.org\/writeleash\/assets\/icon.svg?rev=3742817","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/writeleash\/assets\/screenshot-1.png?rev=3742817","caption":"Earlier selection-screen example: choose products by name, SKU or category. Current category selection also offers nested subcategories."},{"src":"https:\/\/ps.w.org\/writeleash\/assets\/screenshot-2.png?rev=3742817","caption":"Review exact before-and-after Sale Price values, variations, warnings and skips in this earlier Preview example."},{"src":"https:\/\/ps.w.org\/writeleash\/assets\/screenshot-3.png?rev=3742817","caption":"Background-job example with 24 products: see changed and remaining products, and Resume interrupted work. This capture predates live progress updates."},{"src":"https:\/\/ps.w.org\/writeleash\/assets\/screenshot-4.png?rev=3742817","caption":"Review completed changes and explained skips; one invalid price does not stop the useful result."},{"src":"https:\/\/ps.w.org\/writeleash\/assets\/screenshot-5.png?rev=3742817","caption":"A later price or setting change becomes a conflict instead of a blind overwrite. Regular Price example: expected $100, planned $80, current $120 remains unchanged."},{"src":"https:\/\/ps.w.org\/writeleash\/assets\/screenshot-6.png?rev=3742817","caption":"Review History outcomes and eligible Undo availability in this earlier example. Availability does not guarantee that every product will restore."}],"raw_content":"<!--section=description-->\n<p><strong>Bulk edit WooCommerce prices. Never overwrite a price someone changed after you reviewed it.<\/strong><\/p>\n\n<p>You prepare a 20% sale for 300 products. While you review, a colleague fixes one price by hand. Many bulk editors apply your number anyway, and the fix is silently lost.<\/p>\n\n<p>WriteLeash checks every product again at the moment of Apply. If a price changed after your Preview, it keeps the newer value, marks the product as a conflict, and carries on with the rest.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Select products by name, SKU, category or ID.<\/li>\n<li>Preview every change in exact before-and-after prices.<\/li>\n<li>Approve separately, then Apply in the background.<\/li>\n<li>Review History and restore eligible prices with Undo.<\/li>\n<\/ol>\n\n<h4>Built for stores where a wrong price costs money<\/h4>\n\n<ul>\n<li><strong>Nothing changes until you approve it.<\/strong> Preview first, then a separate Approve step. Change any setting and you get a new Preview.<\/li>\n<li><strong>See what shoppers would pay after Apply.<\/strong> Before-and-after prices, delta and percent change, and a plain-language reason for every skipped product.<\/li>\n<li><strong>Safety limits you control.<\/strong> Cap how many products can change, set maximum increase and decrease percentages, get warnings on big swings, and block zero prices.<\/li>\n<li><strong>Runs in the background.<\/strong> Follow live progress, or close the tab and come back later. Resume skips work that is already done.<\/li>\n<li><strong>History and eligible Undo.<\/strong> See who changed what and when, and restore eligible prices within the Undo window (30 days by default).<\/li>\n<li><strong>Presets and Repeat.<\/strong> Save a price-operation setup as a reusable preset, or repeat an eligible job from History as a fresh, editable Preview.<\/li>\n<\/ul>\n\n<h4>Choose products your way<\/h4>\n\n<p>Search by product name or SKU, pick a category (optionally including nested subcategories), enter exact IDs, or choose a variable parent to target all of its variations. Narrow the list with an inclusive Regular Price or Sale Price range, and exclude individual products or variations before approval; confirmed exclusions are left out of Apply and Undo.<\/p>\n\n<h4>Bulk edit Regular Price and Sale Price<\/h4>\n\n<p>Set a price, add or subtract a fixed amount, or increase or decrease by a percentage. Choose Regular Price or Sale Price. A Regular Price change preserves the existing Sale Price and sale schedule. Use Set to add a first Sale Price, or calculate a sale discount from each product's reviewed Regular Price. Clear Sale Price makes the sale price blank, not zero, and keeps its dates.<\/p>\n\n<p>Use optional .99, .95, .90 or whole-number Price Endings where store precision allows. Sale dates, stock and orders are not changed.<\/p>\n\n<h4>Preserve newer edits<\/h4>\n\n<p>If the stored price WriteLeash is changing or another checked setting no longer matches the preview, WriteLeash leaves the newer value alone and marks that product as a conflict. Other eligible products can continue.<\/p>\n\n<p>Product name, SKU and category are reference details only; changing them alone does not conflict.<\/p>\n\n<p>Example: reviewed Regular Price $100, target $80; another edit sets it to $120 before Apply. WriteLeash leaves $120 unchanged. Proceed only through a fresh Preview and separate approval.<\/p>\n\n<h4>Good to know<\/h4>\n\n<ul>\n<li>Preview shows planned stored prices, not guaranteed shopper prices. Invalid or unsupported items are skipped where safe, and a safety-limit blocker refuses the whole Preview.<\/li>\n<li>Download Preview CSV before approval; it reflects the saved Preview, not the live catalog, and does not apply changes.<\/li>\n<li>Undo availability does not guarantee restoration. Failed current price\/setting checks leave the product alone as a conflict, and Undo does not reverse orders, completed sales, emails, webhooks, remote requests, external queues or other plugins' effects.<\/li>\n<\/ul>\n\n<h4>Respects your store and your data<\/h4>\n\n<p>No tracking, no ads, no upgrade nags, no remote code and no auto-updater. Declares WooCommerce HPOS (custom order tables) compatibility. Uninstalling never changes your products or prices.<\/p>\n\n<h3>Supported scope<\/h3>\n\n<ul>\n<li>Up to 1,000 selected products per new job in the tested configuration. Variations count individually.<\/li>\n<li>Published core simple products and published variations of published core variable products, in the base store currency. Parent prices are not edited directly.<\/li>\n<li>Custom product types and universal extension compatibility are unsupported.<\/li>\n<li>WooCommerce 10.0 through 11.x (version 10.0.0 or newer, below 12.0.0).<\/li>\n<li>WordPress 7.0.1 and 7.1.2 were exercised. Requires WordPress 7.0 or newer.<\/li>\n<li>PHP 7.4.33, 8.0.30, 8.1.34 and 8.2.34 were exercised. Requires PHP 7.4 or newer.<\/li>\n<li>MySQL 8.0.44 and MariaDB 10.11.15 were exercised, with default and Redis Object Cache 2.7.0 (Redis 7.4.2) persistent cache modes.<\/li>\n<li>WooCommerce refreshes variable parent price ranges after each variation change.<\/li>\n<li>Multisite is unsupported.<\/li>\n<li>Real managed or shared hosting has not been tested.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce 10.0 through 11.x.<\/li>\n<li>Install and activate WriteLeash.<\/li>\n<li>Open Products \u2192 Bulk Prices.<\/li>\n<li>Select products, price field and operation.<\/li>\n<li>Review Preview prices and warnings, then approve separately and Apply.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20writeleash%20free%3F\"><h3>Is WriteLeash free?<\/h3><\/dt>\n<dd><p>Yes. Every feature is free: no paid tier, no account and no credit card. Preview, conflict protection, Presets, Repeat, background jobs, History and eligible Undo are all included.<\/p><\/dd>\n<dt id=\"can%20i%20bulk%20edit%20sale%20prices%20and%20variation%20prices%3F\"><h3>Can I bulk edit sale prices and variation prices?<\/h3><\/dt>\n<dd><p>Yes, within the supported scope above. Nonblank sale targets must be below Regular Price; regular targets must remain above an existing sale.<\/p><\/dd>\n<dt id=\"does%20writeleash%20change%20prices%20automatically%3F\"><h3>Does WriteLeash change prices automatically?<\/h3><\/dt>\n<dd><p>No. Every change needs a Preview and a separate approval. Presets and Repeat only prefill settings; they never schedule or apply anything.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20price%20changes%20after%20preview%3F\"><h3>What happens if a price changes after Preview?<\/h3><\/dt>\n<dd><p>Target-price, product\/parent eligibility, currency and precision checks can refuse a change. Review conflicts in a fresh Preview with separate approval. Checks compare current values: changes away and back may not be detected.<\/p><\/dd>\n<dt id=\"can%20i%20review%20the%20preview%20without%20changing%20prices%3F\"><h3>Can I review the Preview without changing prices?<\/h3><\/dt>\n<dd><p>Yes. Preview and its CSV do not change prices or approve changes. Review the final products, prices, warnings and skips before approving.<\/p><\/dd>\n<dt id=\"can%20undo%20reverse%20everything%3F\"><h3>Can Undo reverse everything?<\/h3><\/dt>\n<dd><p>No. Only confirmed eligible prices can be restored. Missing evidence, ineligible products, changed relevant values, uncertain outcomes or an expired window can prevent Undo. Orders, sales and external effects are not reversed.<\/p><\/dd>\n<dt id=\"should%20i%20back%20up%20my%20store%20before%20a%20large%20update%3F\"><h3>Should I back up my store before a large update?<\/h3><\/dt>\n<dd><p>Yes. Back up and test on staging first. Undo and backups are not the same: a backup is a full point-in-time snapshot restored through your host or backup plugin, and no backup is a 100% guarantee. Undo restores only eligible prices WriteLeash changed, within its window. WriteLeash keeps a mistake contained: Preview first, conflict protection and safety limits. It creates no backups.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Refreshed the plugin listing with clearer benefits, a How it works summary and an FAQ entry confirming every feature is free.<\/li>\n<li>No price-change behavior changed in this release.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added live read-only Apply and Undo progress without page reloads.<\/li>\n<li>Added Conflict to fresh Preview for conflicted products at current prices.<\/li>\n<li>Added optional nested subcategories and clearer selection counts; Preview freezes reviewed product IDs.<\/li>\n<li>Added Clear Sale Price and sale discounts from reviewed Regular Price.<\/li>\n<li>Added optional Price Endings, subject to precision, eligibility and safety limits.<\/li>\n<li>Added save\/load editable price-operation presets; fresh Preview and separate approval required.<\/li>\n<li>Added individual product exclusions before final Preview approval.<\/li>\n<li>Added Repeat from eligible History jobs into an editable fresh Preview with separate approval; previously excluded targets stay out of its suggestions.<\/li>\n<li>Added frozen saved-Preview CSV export before approval; no prices changed.<\/li>\n<li>Added inclusive stored Regular\/Sale Price range selection.<\/li>\n<li>Updated public-cache compatibility for default and persistent object-cache modes.<\/li>\n<li>Updated merchant-facing PHP and JavaScript translation readiness.<\/li>\n<li>Requires WooCommerce 10.0 through 11.x.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Bulk Regular Price and Sale Price changes for simple products and variations, with exact Preview before Apply and protection for relevant newer edits.<\/li>\n<li>Select by product name, SKU or category, with up to 1,000 selected products per new job in the tested configuration.<\/li>\n<li>Background processing, saved progress, Resume, History and eligible Undo.<\/li>\n<li>Requires WooCommerce 10.0 through 11.x.<\/li>\n<\/ul>","raw_excerpt":"Bulk edit WooCommerce prices safely: exact Preview, newer-edit conflict protection, background jobs, History and eligible Undo. No ads or tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/383094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=383094"}],"author":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/duyytrann"}],"wp:attachment":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=383094"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=383094"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=383094"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=383094"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=383094"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=383094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}