Bulk Editor for WooCommerce changelog
Every version, newest first, with the date it was released. Updates install from your Plugins screen.
1.7.0
- New Open a supplier's CSV file in Paste a list. Open a file… reads a .csv or .txt file in your browser, without uploading it, and fills the list as a paste would. Commas, semicolons (as Excel saves a CSV in much of Europe, with prices like 12,50), tabs and vertical bars are recognised, and the dialog says which it used. Accents come through from CSV UTF-8 and from an older Excel's CSV. Files of up to 5 MB and 5,000 lines are read; an .xlsx file is asked to be saved as CSV first.
- Fixed Change capitals no longer breaks an ampersand in a name. WordPress saves the & in a name a shop manager types as a short code, and UPPER CASE changed the code as well, so the cart and emails showed "SALT & PEPPER". Codes like it, for an ampersand, a space or a trademark sign, are now kept as they are, an accented letter saved that way changes with the rest, and the word after one gets its capital. A name already saved wrong can be put right with Find and replace.
- Fixed Change capitals is no longer offered on an order's state and postcode. "CA" made "Ca" is no state WooCommerce knows, so the address showed Ca instead of California, and SW1A 1AA became Sw1a 1aa.
- Fixed The editor never sends an out-of-date small copy of the grid's libraries. A minified copy is sent only while it was built from the library file beside it; otherwise the full file is.
1.6.0
- New Add text and change capitals across many records. In Bulk tools, Add text puts words before or after what each selected cell holds, and Change capitals turns text into Capitalise Each Word, Sentence case, lower case or UPPER CASE, in your site's language. Descriptions take a paragraph of their own. A preview shows the first row, and All N records in this list does the whole filtered list with one Undo.
- Improved The Products editor opens faster on shops with many customers. The people listed in the Author filter and column are no longer looked up on every page. The list is kept and built again when someone's role or display name changes.
- Improved The editor screens download about 31 KB less. The grid's own libraries are now sent minified.
- Improved Faster pages on sites in Spanish or French. The translations now also ship as PHP files, which WordPress 6.5 and later reads from PHP's code cache instead of reading the translation file again on every page. Measured on a French site with all fifteen of our plugins: 6.3 ms and 0.8 MB of memory less on every request. Older WordPress reads the translations as before.
- Improved Opening the plugin's screens asks less of your server. To make switching tabs instant, the plugin loads its other screens in the background while you read the first one. It now loads at most four, the plugin's own tabs first, and none while the browser tab is in the background; a tab past the fourth loads as your pointer reaches it.
- Fixed A variation's description and a variable product's default attributes keep their backslashes when you change them in the grid. WordPress took one level of backslashes out of both for everyone, administrators included, so
C:\TempbecameC:Tempand a block setting such as\u003cb\u003ebroke. They are now saved as typed, and for a shop manager a script is still taken out, as on WooCommerce's product screen. Text saved before stays as it is until you type it again. - Fixed An order note added from the grid keeps its backslashes. WordPress took one level out, so "Left at C:\Door" was saved as "Left at C:Door". The email a customer note sends was already right.
- Fixed Tags typed into the grid keep their backslashes. A new tag "C:\Temp" was made as "C:Temp", and an existing tag with a backslash was not found, so a second one was made without it. The same goes for an attribute term added from the attributes editor.
- Fixed Notes that should be hidden stay hidden. A hint or note a screen had hidden could still show, because the style that lays hints out outranked the browser's own rule for hidden things. Hidden things on the plugin's screens now always stay hidden.
1.5.2
- Fixed Shop managers no longer lose backslashes when they save from the grid. Up to 1.5.1 only administrators kept them: for a shop manager, or a site administrator on a network, a product's name and descriptions, a coupon's description and an order's customer note lost them, so C:\Temp became C:Temp and a block setting such as \u003cb\u003e broke. They are now kept for everyone, and WordPress still takes out what that person may not post, such as a script. A variation's description still lost them, for everyone, until 1.6.0.
- Fixed A variation keeps the backslashes in its summary of attributes when the grid saves it.
Earlier versions
September 2026 34 versions
1.5.1
- Fixed An export no longer repeats a row or leaves one out when orders come in while it is written. A list sorted by stock, units sold or last modified moves with every order, so a large export could write one record twice and never write the one that moved. The file is now the list as it was when you pressed download, each record once; a record deleted meanwhile, or one that stops matching your filters, is left out, and a line at the end says how many were.
- Fixed Custom fields keep what you type. Text, Date, Select, list and JSON custom fields went through WordPress's cleaner for prose, which took out a % followed by two characters 0 to 9 or A to F (so Yoast's %%category%% became %tegory%%), folded spaces and wrote a lone < as <; product, coupon and review fields also lost their backslashes. They are now saved as typed. Values saved before stay as they are until you type them again.
- Changed HTML in a Text, Date or Select custom field is kept for administrators, as WordPress's own Custom Fields box does. For everyone else HTML is still cleaned.
- Fixed A product password set in the grid keeps its % signs, backslashes and spaces, so Trade%2026 is no longer saved as Trade26. Passwords saved before stay as they are, so set them again.
- Fixed Saving from the grid no longer takes backslashes out of a product's name or descriptions (a variation's description apart, until 1.6.0), a coupon's description or an order's customer note, even when you changed only another cell (until 1.5.2, only for administrators: a shop manager, or a site administrator on a network, still lost them).
- Fixed Save view pressed while the list is still loading says so. Just after saving Display or pressing a sort arrow, on a slow or large shop, it used to answer with an error blaming another tab. It now says the list is still loading and keeps the form and its name, so the next press saves the view.
- Fixed Filters look for what you type. A coupon code such as 30%BFRIDAY lost its %BF in the filter, so Code is found nothing and Code contains 30%BF listed every code with 30 in it. A view saved from such a filter keeps the shortened text, so type the condition again and save the view.
1.5.0
- New Sort the whole list from a column heading. Press the arrow in a heading to sort every page of the list on the server, not only the rows on screen: lowest stock first, best sellers first, or what changed most recently. Products sort by prices, stock, units sold, ratings, dates, dimensions and custom fields; Orders by total; Coupons by amount, expiry and usage; Reviews by rating. Records without a value come last and are never left out, and a saved view keeps the sort.
- New Units sold, Average rating, Review count and Last modified columns on Products. They are read only and hidden until you pick them in Display, so your grid does not change.
- Changed Direction names its two ways for what you sort by, such as A to Z, Highest first or Newest first. The sort buttons in the headings are one more stop in the Tab order after the grid; Left and Right move between them and Enter sorts.
- Fixed Sorting by price or SKU no longer leaves out products without one, and records with the same value keep one order from page to page.
- Fixed A long save keeps to the columns it started with. While a save, a Paste a list or a change to every record in the list is being written, saving Display, paging, reloading, filtering and opening a view wait until it has finished. If the columns change part of the way through anyway, in another tab say, the rest of the save stops instead of writing values into another column.
- Fixed A save stopped part of the way says how many records it saved, so you know to press Undo on it before running a change such as Increase by 10% again.
- Improved A change to every record in the list no longer stops when a price, stock level or units sold figure changes while it reads, such as an order coming in while the list is sorted by stock. It still stops if records join or leave the list.
1.4.3
- Fixed A change to every record in the list keeps to the list you were asked about. If another tab has changed the filters, columns, sort or rows per page since this page showed its list, or the list now has a different number of records, the change stops before writing anything and shows the list as it now is. Until now it carried on through whatever list was stored by then, the whole shop included. A save also stops, instead of writing values into other columns, when another tab has changed the columns since the page loaded.
- Changed On Orders, the editor asks before it saves a new status. WooCommerce may email each customer about a new status, and setting Refunded makes it record a refund without sending any money back. History can put the status back but cannot take back the email or the refund record, so saving a new status from the grid, with Set all selected or for every order in the list now asks first.
- Changed A page of the editor left open while the plugin updated asks you to reload before it saves. Such a page cannot say which columns its changes belong to, so nothing is written from it. Reload the page and make the change again.
- Fixed Saving a view asks before replacing one saved in another tab, and saves only the list on screen. If another tab has changed the filters, columns, sort or rows per page since this page showed its rows, the view is not saved and the message says to reload.
- Fixed Columns changed in another tab now show under the right headings in this one. Moving to another page, reloading, Apply filters, Clear filters and saving Display build the grid on the columns as they are stored.
1.4.2
- Fixed Replying twice to a review says it already has that reply. Instead of "Replied to 0 reviews.", and nothing is posted a second time, even when the reply has a link or a list in it. Choosing Reply while your last reply is still being posted says so. Reviews that could not be replied to are counted with the reason, and a review waiting for moderation is approved only when its reply is posted.
- Fixed Reply to selected reviews leaves out spam and binned reviews, and says why. Until now the reply went on the product on its own, where shoppers could see it, and the message said the review had been replied to.
1.4.1
- Fixed Price endings never make a paid product free. End in and Round to a step no longer round a paid price down to 0: where the nearest ending or step is 0, the next one up is used, so 0.30, or even 0.01, to the nearest .00 becomes 1.00.
- Fixed Paste a list finds every product the database matches. A line the database matched is no longer left out as "No product has this SKU", such as STRAßE-1 for STRASSE-1, or a SKU whose accent was pasted as a separate mark.
- Improved Paste a list asks which column holds the SKU. Whenever a spreadsheet paste has two columns or more it asks, and a sheet headed Price, SKU is read the right way round.
1.4.0
- New Paste a supplier's list. On Products, copy a supplier's SKUs with new prices or stock from a spreadsheet, check every change in a preview before anything is saved, and undo the whole run in one go.
- New Price endings. When Calculate raises or lowers prices, you can round them to end in .99, .95 or an ending you choose, or to a step such as 0.05, starting from the price your shop shows. Free products stay free.
- Changed The description says what the plugin does now. The Plugins screen now says you can paste supplier lists by SKU. There is still no file import.
- Fixed The Decimals box shows only where it is used. In Calculate it no longer shows under None, Round up and Round down, which do not use it.
1.3.1
- Changed Round to decimals keeps its zeros everywhere, as 1.3.0 said. Calculate from This column and Sale price from regular price now keep the decimals you ask for too, so 10 raised by 10% is written 11.00 rather than 11. A price that already holds the result, such as 20 where the result is 20.00, is left as it is and not saved again.
- Fixed The keyboard stays with you after editing a cell. Once Enter or Escape closes a cell, Tab leaves the grid again, and keys pressed on the message after a save act on the message: Tab goes from Undo to Dismiss, Enter on Dismiss closes it, and Delete no longer empties the cell behind it and takes the Undo away.
1.3.0
- New Saved views. Save the filters, columns, sort and rows per page you use as a named view, and open it again in one click from the new Views menu. Keep a view to yourself or share it with everybody who can use that editor, and start from four ready-made product views: no image, no SKU, out of stock and low stock, which follows the low stock threshold in your WooCommerce inventory settings. Tools → Erase Personal Data also removes a customer's email address from saved views and kept filters.
- New Calculate from another column. Calculate can now start from another number column on screen, so you can set regular prices from a cost column plus a margin, or sale prices a percentage below the regular price, across a selection or the whole filtered list. A worked example from the first selected row shows the result before anything is written, and the run is one History point you can undo.
- Changed Round to decimals rounds a half up and keeps its zeros. A value exactly halfway now rounds up, as a spreadsheet does, so 2.05 plus 10% gives 2.26 where it gave 2.25. The decimals you ask for are also kept, so a price of 10 raised by 10% is stored as 11.00 rather than 11, as if typed on WooCommerce's own product screen. Round up and Round down still give whole numbers.
1.2.15
- Fixed Erase Personal Data now reaches the edit history. History on the Orders and Reviews editors keeps customers' old names, addresses, phone numbers and emails so a save can be undone, and Tools → Erase Personal Data left them there. An erasure now takes the person's orders and reviews, and any record whose old values hold their address, out of every history point, and Undo and Revert leave an order WooCommerce has anonymised as it is, so its old details cannot be put back. Export Personal Data does not list the history.
- Fixed Our plugins on one site use the newest licence code among them. With several of our plugins on one site, licensing and updates for all of them now run on the newest licence code any of them carries, whatever order WordPress loads them in. The one exception is while the first of our plugins that WordPress loads (usually the alphabetically first) is on a release from before this one: its older code still serves them all until that plugin is updated. An older plugin of ours on the same site can also no longer stop this plugin's admin screens loading.
1.2.14
- Fixed A failed activation no longer throws away the licence key you entered. When the licence server could not be reached, or sent back something that could not be read, the Licence screen cleared the stored key and the list of sites using it, and asked you to go and find the key again. Only an answer from the server about the key itself changes what is stored now.
- Fixed A key the licence server does not recognise leaves the key box open. When a key is reissued or deleted while this site still holds it, the notice on every admin page sends you to the Licence screen to enter it again, and the box was locked there with nothing to press but "Deactivate this site". The box stays editable now, so the right key can be pasted straight in.
- New A "Check again" button on the Licence screen. Renew your licence, or have it put right by support, and one press picks it up instead of waiting for the next automatic check. If the check cannot be made, the screen says why and changes nothing.
- Fixed "Deactivate this site" and "Free" work with the key box empty. Neither of them reads the box, but clearing it answered both with "Enter your licence key first." and sent nothing. "Check again" works the same way.
1.2.13
- Fixed A sale date the editor cannot read is refused instead of ending the sale. The Sale starts and Sale ends cells are read as
YYYY-MM-DD, the way the date picker in the cell writes them. A date written another way round, such as31/12/2026pasted from a supplier's sheet, used to be stored as 1 January 1970, so the sale ended the moment the row was saved, on every product in the paste, and nothing said so. The editor now reports the cell it could not read, leaves the date already stored exactly as it was, and saves the rest of the row. Leading zeroes are optional, so2026-9-3is read too, and a time after the date is kept. - Fixed Undoing a change to nothing but a review's rating updates the product's stars again. The product page, the shop loop, "sort by average rating" and the review markup search engines read all went on showing the average from before the Undo, until something else happened to touch a review on that product. The same held for a ratings save with every other review column hidden.
- Fixed Undo finishes on a change made to a whole list. Undoing a run over thousands of records was attempted in one go, which on a large catalogue timed out and left the shop half put back, with nothing saying how far it had got. The undo now goes back twenty records at a time until there is nothing left, and the message at the end counts the whole of it rather than the last step.
- Fixed Undo puts back everything a long save changed. A save records the previous values it is replacing, and one line in History holds a quarter of a megabyte of them, which is thousands of prices, stock figures or dates. A run longer than that, in practice one over long descriptions, now carries on in a second line instead of rewriting one ever-growing entry. Undo on the message at the end puts back every line the run made; Revert on a line in History still covers that line only, which is what the line counts.
- Fixed A part of a save the database refused is never offered as something to undo. When a batch could not be recorded, the message still offered an Undo, and what it would have put back was an earlier part of the same run rather than the records in front of you. A batch the database refuses now starts a line of its own in History so its records are recorded somewhere, and where nothing could be recorded at all there is no Undo to press.
- Fixed A History entry covering a whole list opens. Viewing an entry reads every record it lists to show what is stored now, so an entry made by a run over thousands of them never finished loading. It is now shown twenty records to a page.
- Fixed After an undo that stops part way, the grid shows what the shop actually holds. The records already put back are read again, so editing one of them can no longer write the old value straight back over it.
- Fixed Switching the plugin off across a network leaves nothing behind, and takes nothing it should not. The daily tidy-up of old history was cleared only on the site the network admin happened to be on, so every other site went on waking its scheduler each day for a job with nothing listening. It is now cleared on every site of the network, while a site that also has the plugin switched on for itself keeps it, including the site the network admin was on.
- Fixed Network activation only prepares the sites of the network you switched it on for. On an installation running more than one network, switching the plugin on for one of them also created its history table and wrote its settings on the other network's sites, which never load it and whose rows nothing ever clears.
- Fixed Deleting the plugin clears away history tables from network sites that are gone. When a site is deleted from Network Admin, WordPress asks the plugins that site is running which tables to take with it, and a plugin switched on for that site alone is not running at that moment. Its history table stayed in the database with nothing but its name to say it had ever been ours. Deleting the plugin now removes those too, after checking that the site really has gone.
- Fixed "Check again" on the Updates screen asks straight away. A minute of trouble reaching our server shut that button for a quarter of an hour, for this plugin and for every other one of ours on the site, with nothing on screen saying why. Pressing it now clears the wait and asks.
- Improved The dashboard counts reviews in one pass over the comments table. The reviews figure and the awaiting-moderation figure came from two separate counts, and WordPress does not index comments by their kind, so each of those counts read most of the table. Both numbers now come out of the same pass. It is the shops with years of comments that feel this.
- Improved Filtering by price, stock, size, weight, sale dates or SKU asks the database directly. Each of those filters used to collect every matching product and variation into the page first, then look up each variation's parent, then hand the whole list of them back to the database, and it did all of that again for the count, for every page of the grid and for every page of an export. The condition now goes into the query itself and neither extra lookup happens. The same products match, filter for filter.
1.2.12
- Fixed Exports include every variation. A page of products with many variations could run out of memory part-way through an export, and variations past the page's limit were dropped without a word. Exports are now written in small batches, and if any variation still has to be left out, the file says so at the end and how to include it.
- Improved Pages with pictures, tags, linked products or order notes load faster. The editor and its exports now fetch those for the whole page at once, instead of one product or order at a time.
- Fixed Deleting the plugin on a network removes its daily clean-up from every site, including sites that chose to keep their data.
1.2.11
- Improved Fewer database queries on every admin page. Each of our plugins checks its licence on every admin screen, to know whether to show the licence notice, and read its saved licence and its "Remind me later" flag with a query each. With the whole range installed that was thirty separate lookups on every admin page, most of them for rows that do not exist yet. They are now read together in one query (on WordPress 6.4 or later). Measured on a test site with all fifteen plugins: the WordPress Dashboard went from 41 queries of ours to 12. A small value this plugin reads on every admin screen is also now loaded with the rest of the settings, rather than on its own.
1.2.10
- Improved One update check for all of our plugins on a site, instead of one each. Every plugin of ours used to ask our server about updates separately — fifteen requests in a row on a site with the whole range, twice a day and every time you press "Check again". The first plugin asked now asks for all of them at once, and the rest read the answer. Measured on a site with all fifteen: fifteen requests became one, and the whole check took a third of a second. If our server refuses or cannot be reached, every plugin waits the same fifteen minutes before trying again, rather than each trying in turn.
1.2.9
- Fixed An exported file could run a formula on your computer. Orders carry what a customer typed at the checkout and reviews what a visitor wrote, and a spreadsheet runs a cell that begins with =, +, - or @ as a formula the moment the file is opened — on your machine, with your logins. Every such cell in an export now begins with an apostrophe, the spreadsheet's own mark for "show as written", which is what our other exports have always done.
1.2.8
- Fixed Screen readers announced an unlabelled edit field on every editor screen. The spreadsheet keeps one hidden text box on the page for copy and paste — reachable by script only, never meant to be read — and it had no name, so a screen reader met a nameless field on Products, Orders, Coupons and Reviews. It is now hidden from assistive technology, since it is a clipboard, not a field. Found once the admin accessibility sweep read all six of this plugin's screens rather than one.
1.2.7
- Fixed A wp-admin that would not load when our licence server could not be reached. Each of our plugins checked for its own updates, and if the server was unreachable each one waited out its own fifteen-second timeout — so a site with several of them could spend minutes on a single admin page, twice a day, for something entirely outside its control. The first one to find the server unreachable now says so for the whole site, and the others stand down until it is worth trying again. Measured on a site with fifteen installed: fifteen waits became one.
1.2.6
- Fixed A save message was registered for a screen that does not exist. Harmless, and it meant a translated sentence shipped that nothing could ever show.
1.2.5
- Fixed A setting that is waiting on another one is readable again. A field held back until you switch something else on is dimmed, so it does not look identical to one you simply have not used — but it was dimmed so far that its label and explanation fell below the contrast a person with ordinary eyesight needs. Measured on the rendered screen at 2.55:1 against the 4.5:1 minimum, and now 4.75:1 and 5.02:1. The greying, the sunken background and the blocked cursor carry the rest of the signal.
1.2.4
- Fixed The daily tidy-up no longer holds the table while it runs. Clearing old rows from the edit history was a single statement, however many rows matched. Measured on 300,000 of them: 6.63 seconds, and for all of it nothing else could write to the table. Worse, a host that cuts long queries off rolled the whole thing back — so nothing was deleted, there was more to delete the next day, and it quietly never caught up. It now goes a thousand rows at a time and stops after five seconds, leaving the rest for the next run.
1.2.3
- Fixed A site deleted from a network no longer leaves its tables behind. WordPress asks every plugin for the tables it owns when a site is removed, and this one never answered, so its edit history stayed in the database for ever with nothing left to say which site it had belonged to. On a network that creates and removes sites regularly that is thousands of orphan tables and a database that stops fitting in its backup window. Deleting a site now takes its edit history with it.
1.2.2
- Fixed Exporting a spreadsheet on PHP 8.4 could put a warning inside the file. PHP 8.4 deprecated the way this plugin was asking for a CSV row, and a host with error display switched on prints that notice into whatever is being sent — which for a download is a corrupt spreadsheet. It asks the new way now.
1.2.1
- Fixed A link could put words of its own into an admin notice. The bar at the top of a screen built its sentence out of the address itself, so a link crafted by somebody else could show an administrator any message in this plugin's own house style — and printed English over a Spanish or French screen while it did it. Only the sentences the plugin itself registers are shown now.
- Improved A save that cannot count what it changed still says what it saved. It said "Changes saved.", which leaves you to work out what was; it now names the records on the screen you are on.
- Improved The help text under each setting can be read at a glance. A settings screen is scanned, not read, and several notes here had grown into paragraphs. They say the same thing in a line or two, in Spanish and French as well as English.
- Removed A message that was translated into three languages and shown to nobody. Nothing in the plugin ever asked for it.
1.2.0
- New The Licence screen now shows which sites are using your key. "You have used all your activations" used to leave you to work out which sites those were, in your account, on another tab. Every site on the licence is listed now — the date it was added, when it last checked in, and a Free button beside it — so you can let go of a site you no longer run and put this one on without leaving the page. "Last seen" is the column that decides it: a copy that stopped checking in months ago is the one to free. The list appears on a refused activation too, directly under the key you just typed, with the same buttons. Local and staging copies are listed as well, marked free, so the count adds up.
- Improved Updates follow the activation, not just the key. Freeing a site now really does free it: that site is still told when a new version exists, but it is not handed the download, and its own Licence screen says plainly that it is no longer on the licence and offers to activate again.
- Fixed Two things on the Licence screen were never translated — the screen's own heading, and the "2 of 3" activation count. Both read in your language now.
1.1.0
- New Download what you are looking at. The toolbar has an export button: it writes the current view to a
.csvfile — the filters you have on, the columns you are showing, in the order you have them, sorted the way the grid is sorted. Not the whole table, the view, which is the only definition you can check by looking at the screen. It is for reading rather than for a round trip: the products with no image to send to a photographer, everything under five in stock for a supplier, last week's orders for an accountant. Categories, tags and attributes come out as their names rather than their numbers, and the file carries the mark Excel looks for so accented characters survive. Each editor exports only the records you may edit, and a very large export stops at fifty thousand rows and says so on the last line rather than ending quietly.
1.0.50
- Improved Plainer words on every screen. Somebody who runs a shop and has never written code read the whole plugin and said what they could not follow. The Settings panel called "Compatibility Hooks", with boxes labelled
save_post, is now Tell other plugins about a save, each box named in words with the hook name after it so a plugin's instructions can still be matched. The custom fields panel no longer explains "custom field" with "post meta", the two data cell types say they are advanced, and the box that asks for choices shows the shape it wants instead of hiding it in a placeholder that vanishes as you type. - Fixed Messages that named the wrong thing. The empty grid offered an Add button on the Reviews screen, which has not got one. "Not found or not allowed" gave two reasons at once and no next step; it is now three messages, each saying which happened and what to do. The Server Readiness table said "Active" against a value that merely passes, where it means High enough or Too low. And a setting that only affects products said it affected everything.
1.0.49
- Fixed Tabbing onto a "Remove" or "Undo" link showed the wrong ring, or none. Those quiet link-shaped buttons in a table row are WordPress's own kind, and WordPress rings them in its blue with a rule stronger than the one this plugin writes — strong enough that it also cancelled the ring the plugin draws. Somebody working down a screen with the keyboard either saw a colour that belongs to no part of this plugin, or lost sight of where they were altogether. They now wear the same ring as every other control here.
1.0.48
- Fixed The spreadsheet no longer traps the keyboard. The first Tab on the page used to land in the grid and no Tab ever left it, so Save changes, Filters and the WordPress menu were out of reach. Tab now moves into the grid and out again, the arrow keys move between cells, and Shift+F10 or the menu key opens the bulk tools, which you can move through with the arrow keys and run with Enter.
- New A Bulk tools button in the toolbar opens the bulk tools for the cells you have selected, so Calculate, Find and replace and the rest now work on tablets and phones, which have no right click.
- New Change every record in the list, not only this page. Calculate, Set all selected and Find and replace can now apply to all the records your filters match, across every page. The whole change is one point in History, with one Undo. On Orders, Undo puts a status back but cannot take back an email WooCommerce sent, or the refund it records when an order is set to Refunded. Until 1.4.3 the change could also run through a list another tab had changed since you were asked.
- Fixed Calculate's Increase and Decrease now leave empty cells empty. A product with no sale price, "decreased by 5", used to get a sale price of 0, which put it on sale for free.
- Fixed Variable products with many variations load faster. A page's variations now come in one request instead of one per product, up to 500 variation rows a page; a page with more says how many it left out. The count in the toolbar is in products again, so it no longer reads "1–26 of 230" or runs past the total, and the number of rows is shown beside it.
- Fixed On a phone, Save changes, Full screen and Add product were cut off the edge of the toolbar. It now wraps, with Save changes first. On screens narrower than 1100px the record count no longer disappears.
- Fixed The Undo button after a save no longer vanishes after nine seconds. It stays until you use it, dismiss it, open a panel or make your next edit, and its close button is now called Dismiss.
- Fixed Columns, custom fields, attributes and gallery images can be put in order without dragging, with Move up and Move down buttons, and a gallery image's Remove button no longer appears only on hover.
- Fixed Screen readers now hear a name for every control in the bulk tools, the Custom fields panel and both pagers (Previous page and Next page were both called "Page"), each cell's column heading, the new position of a moved column, and error messages straight away.
- Fixed Feed and sync plugins no longer run twice per save. The woocommerce_update_product and woocommerce_update_product_variation hooks are gone from Settings, because WooCommerce already fires them on every save, and save_post, save_post_product and edit_post are no longer fired again when WordPress has just fired them.
- Fixed A save of more than twenty rows now records each batch in History as it goes, so if a later batch fails, the rows already saved can still be undone.
- Fixed Messages after a save and the row count now come in your own admin language when it is not the site's language.
- Improved New shops open the Products editor on the columns most edits need: image, SKU, prices, stock, status and categories, with the rest one choice away in Display. Shops that already use the plugin keep their columns. Unless you have set your own order, prices and stock now come before the descriptions and gallery.
- Improved The warning under Delete selected rows is easier to read.
- Improved Admin screens are easier to read: faint help text and switched-off toggles now meet WCAG AA contrast.
- Improved Checkboxes show a clear focus ring when you reach them with the keyboard, and the tick in a ticked box draws correctly on phones.
1.0.47
- Fixed Reverting a product's type from History did nothing. Undo, or Revert in History, now puts the old type back the same way changing the Type cell does, so a product turned from variable into simple becomes variable again, and one turned from simple into external becomes simple. Variations WooCommerce removed when the product stopped being variable are not recreated: add them again from the grid or the product screen.
- Fixed Undoing an SKU change from History now puts the old SKU back. It used to change nothing while reporting the record as reverted. An SKU another product already has is left as it is, and the other fields still go back.
1.0.46
- Fixed Saving a row no longer rewrites the cells you did not touch. The editor sent every column of a changed row, so changing one price also saved the description again — removing an embedded video or form — turned "&" in the product name into "&", dropped the seconds from the publish date and rewrote custom fields in a different shape. It could also put back an older price a colleague had just saved. Only the cells you edited are sent now.
- Fixed Someone who could only moderate reviews could create products and coupons by adding one parameter to the editor's requests. Those actions now always check the permission for products, coupons, orders or reviews.
- Fixed Descriptions and rich-text custom fields keep embedded videos, forms and other HTML for administrators, as they do on WooCommerce's own product screen. Other users' HTML is still cleaned.
- Fixed A filter you had just applied could switch itself off. The admin loads the plugin's screens in the background to make tabs instant, and that background load cleared the filter, so the next save or page change listed every product again. Filters are now cleared only when you open the editor yourself, and not at all when "Keep filters" is on.
- Fixed A row held back for a sale price above the regular price lost every edit in it once the other rows saved. It now keeps its edits, stays counted on Save changes, and the message names it until you lower the price.
- Fixed Changing a product's type now goes through WooCommerce: a variable product turned into a simple one has its variations removed, and a price typed in the same save is kept instead of thrown away.
- Fixed Custom fields whose key has capital letters or spaces, such as
_EANor WooCommerce's ownPayment type, showed blank and could overwrite the real value when saved. Keys are now used exactly as stored. If you added such a field before, remove it in Custom fields and switch it on again from Find fields. - Fixed On a multisite network, your editor preferences — columns, widths, filters, custom-field columns — followed you from one shop to the next, and "Delete all data on uninstall" on one site removed them on every site. They are now kept per site.
- Fixed Order date, coupon expiry and sale-date filters now count your store's days instead of UTC ones, so a filter for the 10th finds everything that happened on the 10th where your shop is.
- Fixed Reverting a save put plain-text descriptions and notes back as a single line. Line breaks now come back as they were.
- Fixed Changing an order's payment method now also changes the payment title that emails and invoices print, and a status change is noted on the order as made by you, as on WooCommerce's order screen.
- Fixed Rows you are not allowed to delete are now listed in the save message instead of being skipped without a word.
- Fixed The full-screen button showed the browser's grey tooltip on top of the plugin's own, and the plugin's tip still said "Full screen" while in full screen.
- Improved The price calculator now rounds prices and amounts to your store's number of decimals unless you choose otherwise, as WooCommerce's own bulk edit does, instead of storing values such as 21.989.
- Improved Save messages say what was saved — "12 products updated." rather than "Settings saved.", and whether deleted rows were moved to the Trash or, like variations, deleted permanently — with correct singular and plural in every language, and History reads "1 record" instead of "1 records".
- Improved The help pages now match the screens: how long messages stay, "Type" rather than "Kind" on Reviews, and the uninstall setting's real name.
- New Cells you have changed are tinted until you save, so you can check what you touched before pressing Save changes.
- New The message after a save has an Undo button, and the grid reloads itself after any revert so it shows the values that are stored now.
- Fixed Activating the plugin from an older WP-CLI or a site-management tool could stop with a fatal error.
1.0.45
- Improved When more than one Traslatability plugin is waiting for its licence key, the admin shows one notice naming them all, each name linking to its own licence screen, instead of a separate notice per plugin at the top of every admin page. "Remind me later" quietens all of them for a week. An expired or revoked licence still gets a notice of its own.
- Fixed "Delete all data on uninstall" now also removes the licence key and the update records, which were left behind in the database.
1.0.44
- Fixed A filter's text box stayed live when Match was set to "Is empty". "Is empty" and "contains shirt" cannot both be true, so the typed word was thrown away — but the box gave no sign of it, and the Filters badge still counted the field. A merchant who typed a word and left Match on "Is empty" got an unrelated list with no explanation. The box is now greyed while Match says "Is empty": Name, SKU, Slug, Description and Short description on Products, Customer note on Orders, and Description on Coupons.
- Improved A setting can now depend on another field simply being filled in — a date typed, a picture chosen — rather than only on it holding one particular value. Several screens in the range needed exactly that and had no way to say it.
1.0.43
- Improved Values arriving from the browser are now unslashed before use, the way WordPress expects. WordPress adds a backslash in front of every quote and apostrophe in a submitted value, and it is up to each plugin to take them off again. In most places here that changed nothing you could see, because the value was being cleaned in a way that discarded them anyway — but it is what WordPress's own plugin checker looks for, and it removes a whole class of quoting bug before it has a chance to appear.
1.0.42
- Improved Settings that depend on two answers at once now stay greyed out until both are met. Where one greyed group sits inside another, the inner one used to switch its own fields back on whenever its own condition was satisfied, whatever the group around it had decided. No screen in this plugin is arranged that way today; the safeguard is in place before one is.
August 2026 42 versions
1.0.41
- Improved The Reviews editor's "Kind" column and filter now read "Type", which is the word WordPress uses.
1.0.40
- Improved Wording across the admin now follows WordPress conventions. The uninstall setting reads "Delete all data on uninstall", the history comparison columns read "Current" and "Previous", and a save with nothing to write answers "No changes to save." Nothing about how the editors work has changed.
1.0.39
- Fixed In the section bar's two-row layout, the first section now lines up with the plugin icon above it, and the sections fill the height of their row instead of sitting against the top edge.
1.0.38
- Fixed The section bar no longer breaks onto a second line when a plugin has several sections. It is two tiers by default — the plugin name and the Documentation button on top, the sections on a full-width row beneath — and collapses to one row where everything fits.
1.0.37
- Improved Field labels are shorter and every save button reads "Save changes", matching WordPress itself.
1.0.36
- Improved Every screen has been reworded to WordPress conventions. Section names, field labels and help text are shorter and say plainly what they do, and a save now answers "Settings saved." rather than describing what was saved. Nothing about how the plugin works has changed.
1.0.35
- Fixed The changelog inside the plugin listed only a handful of the releases there have been. It is generated from the same source as the one on the website now, so "View details" on the Plugins screen shows every release rather than stopping months ago.
- Improved Every changelog entry says what kind of change it is: new, improved, fixed or removed.
1.0.34
- Fixed A stylesheet a screen sends deliberately switched off is no longer switched on when you move between tabs.
1.0.33
- Fixed The floating Save button comes back after changing tabs. It appeared on a freshly opened screen and never again once you moved between tabs.
1.0.32
- Fixed A site that cannot reach the update server now waits a few minutes before asking again, instead of asking on every admin page load. Nothing changes when the server is reachable; pressing "Check again" still asks at once.
1.0.31
- Improved Saving now says what was saved. Every screen answered with the same word — “Saved.” — which tells you the one thing you already knew, that you pressed the button. Each screen names what it kept.
- Improved The confirmation message has no close button and more room at both ends: it leaves on its own after four seconds, and clicking anywhere on it dismisses it.
1.0.30
- Improved Confirmation and error messages are easier to see: rounder, and coloured by what they are saying — green for saved, red for something rejected, amber for something to look at — each with a mark of its own.
- Improved A licence message now looks like one. Activating a key answered in an unmarked grey box, whatever it said; it carries the right colour and a mark like every other message on the screen.
- Improved A licence key that could not be a key is refused on the spot, without a request to the licence server and without reloading the screen. An empty box used to mean a wait, and on an offline site it meant being told the licence server could not be reached.
- Improved A key pasted out of an email in lower case, or with the dashes lost, is put right rather than reported as wrong.
1.0.29
- Fixed Confirmation messages line up properly and sit on rounder corners: they were top-aligned with the text nudged down two pixels to meet the icon, which on a one-line message read as a misalignment because it was one.
1.0.28
- Improved Confirmations are easier to see. The message after a save is bordered in the colour of what it is telling you, sized to the words rather than stretched to a fixed card, and it now says what was saved rather than just "Saved".
- Improved It stays for four seconds instead of three — long enough to read a sentence — and hovering it holds it open.
1.0.27
- Improved Tab changes are instant. The plugin's other screens are fetched quietly in the background while you read the first one, so by the time you click a tab there is nothing left to wait for — tens of milliseconds instead of a second and a half.
- Improved One at a time, never in parallel, started only once the screen you are on is ready and the browser says it is idle, stopped the moment you navigate, and skipped entirely on a metered connection.
1.0.26
- New An admin that never reloads. Every screen arrives without a page load and every save happens where you are standing — and the screen you are heading for is usually already fetched, because moving a pointer to a menu item takes long enough to fetch it.
- New Saved, and told so where you are looking. A save answers in a small message in the top-right corner that clears itself after a few seconds, instead of reloading the page and putting a notice above the header.
- Improved It is an enhancement, not a dependency: if a fetch fails or scripting is off, links navigate and forms submit exactly as they always did, and the server side is unchanged.
1.0.25
- Improved Notices redesigned: a quiet bordered card at 14px with the tone carried by a tinted icon, rather than a block of colour in coloured type.
1.0.24
- Improved Every notice this plugin prints now looks the same: a white box with a coloured rule down its edge — orange for something to do, red for something wrong, green for something that worked. WordPress tinted a warning cream and an error pink and gave each one its own border colour, so a few notices in a row read as a few different kinds of box.
- Fixed The message on the licence screen after activating or deactivating a key now stays where it is printed, rather than jumping down the page a second after the screen has loaded.
1.0.23
- Fixed A notice from this plugin no longer jumps after the page has loaded. WordPress lifts any notice out of the page once it is ready and drops it under the page heading, so the screen settled and then everything below moved by the height of a notice — and painted once in WordPress's colours before ours arrived. Ours stay where they are put, styled from the first paint.
1.0.22
- Improved Tooltips are ours rather than the browser's. They appear the moment you hover or focus instead of after a second, they are styled like the rest of the screen, and somebody using a keyboard gets them too. That covers the toolbar buttons and the full value behind a truncated cell in the grid.
1.0.21
- Improved Every dropdown now draws its own arrow. A native select is nearly invisible against our surface on macOS and sometimes has no arrow at all elsewhere, so a dropdown could read as a text box — and a text box invites typing rather than clicking.
1.0.20
- Improved WordPress's own plugin details window now says what the plugin is, not only what changed in the last version.
- Fixed Settings screens have the two-column layout the shared stylesheet was missing.
1.0.19
- Fixed The plugin mark in the section bar is versioned by file time, so a redrawn icon actually reaches you instead of the browser serving the one it cached first.
1.0.18
- Improved The plugin icon has lost the decorative braces that used to sit either side of the mark. They crowded it at every size, and the mark is drawn larger now — which is what makes it legible at the 20px WordPress shows it at.
1.0.17
- Fixed The section bar no longer scrolls sideways when the window is narrow, and no longer raises a stray scrollbar over itself.
- Improved The licence chip has gone from the bar — Licence is still a click away in the nav beside it.
1.0.16
- Improved "Apply filters to variations too" is greyed until variations are being shown. With them off no variation query runs, so the option had nothing to act on.
1.0.15
- Improved Checkbox options now sit several to a row instead of one per line, so settings screens use the space properly.
1.0.14
- Improved Clearer section bar: larger, darker labels and icons, and it now stays in place instead of following the page as you scroll.
- Fixed Summary tables read as two columns again rather than stacking each value under its label.
1.0.13
- Improved Bigger, clearer admin type throughout, and larger controls to match — easier on the eyes on a long settings page.
1.0.12
- Improved Easier on the eyes: slightly larger text, clearer colours and bigger buttons throughout the admin. Shorter plugin name in the menu and plugin list.
1.0.11
- Fixed The licence reminder now sits at the top of the screen instead of halfway down some WooCommerce pages.
1.0.10
- Fixed The licence screen is now translated in Spanish and French, like the rest of the plugin.
1.0.9
- Improved The floating Save button is larger and easier to hit.
1.0.8
- Fixed Clicking a link no longer leaves a stray blue focus box; keyboard focus now shows the brand ring.
1.0.7
- Improved The floating Save button is now a clean single pill, keeps the normal Save button at the foot of the form, and steps aside the moment you scroll down to it.
1.0.6
- New Settings: a floating Save button now follows you down the page, with an “unsaved changes” hint.
1.0.5
- Improved Admin: cleaner colour pickers and a nicer focus state on the section tabs.
1.0.4
- New Updates: unlicensed sites now see when a new version is available (installing still needs an active licence). The version check is anonymous — no licence key or site details are sent.
1.0.3
- Fixed Admin: toggle switches now render correctly.
- Improved Admin: the plugin's header icon now matches the brand.
1.0.2
- New Full WordPress Multisite support: network-activate across a whole network, and sites added later are set up automatically.
- Improved Refreshed plugin icon.
1.0.1
- Improved Renamed to Bulk Editor for WooCommerce by Traslatability.
- Improved The licence check now rides along with the six-hourly update check — one request instead of two, and none until a licence key has been entered.
- Improved Dashboard counts are no longer underlined; the licence reminder keeps one colour and gives its links room.
1.0.0
- New First release: spreadsheet editors for products and variations, orders, coupons and reviews.
- New Filters, per-user display settings, custom fields as columns, extra taxonomies as columns.
- New Right-click bulk tools: calculate, fill a series, set many, find and replace, dates, images, attributes, tags and options, variations, duplicates, order actions and notes, coupon codes, review replies.
- New History points with per-field, per-record and whole-point revert, with configurable retention.
- New Saves through WooCommerce's own APIs; works on high-performance order storage and on post storage.
- New Spanish and French translations.
Pricing
Every plan includes every feature. Choose how many domains, and whether to pay yearly or once.
Pay yearly renews until you cancel
1 domain
One year of updates and support
5 domains
One year of updates and support
Unlimited domains
One year of updates and support
Pay once (lifetime) no renewals
5 domains
Updates and support for as long as we publish it
Unlimited domains
Updates and support for as long as we publish it
- Every plan includes every feature. You choose only the number of domains.
- 30-day refund, no reason needed. Refund policy
- Licence key and download straight after payment, by Stripe.
- A lapsed licence stops updates and support. It never switches a feature off.
- Local, development and staging copies are free and do not count against your domains.
- Yearly plans renew at the then-current price until you cancel. Cancel any time from your account.
- Where tax applies it is calculated at checkout and shown before you pay.