=== SwiftGrid - Bulk Edit Products for WooCommerce ===
Contributors: puro
Tags: woocommerce, bulk edit, spreadsheet, products, ai
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 7.4
WC requires at least: 8.2
WC tested up to: 11.2
Stable tag: 1.0.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Bulk edit WooCommerce products in a spreadsheet grid: prices, stock and variations, with no product limit. Your AI assistant can edit them too.

== Description ==

https://www.youtube.com/watch?v=tVV68Ysm3j4

SwiftGrid shows your WooCommerce products as a spreadsheet inside the WordPress admin. Edit prices, stock, SKUs and more across hundreds of products on one screen, then save once.

The free version has no product limit. It gives you the grid with 17 product columns, inline editing, variation editing, filters, the price calculator, and CSV import and export. A connected AI assistant can work in it too, through the WordPress Abilities.

= Edit like a spreadsheet =

* Inline editing across 17 product columns: title, SKU, regular and sale price, stock quantity and stock status, status, categories, tags, featured image, weight, length, width, height, shipping class, tax class and purchase note
* Keyboard-first: navigate with arrows, save with Ctrl+S
* Undo and redo, then save when you are ready
* Unsaved edits show a corner mark in the grid, so you can check them before you save or discard

= Bulk edit hundreds of products at once =

* Select rows and apply bulk changes in one action
* Price calculator: set prices, raise or lower them by amount or percentage, or round them, across a selection
* Search, then filter by status, category, tag, stock status or product type to scope exactly the products you want

= Variation editing =

* Expand variable products and edit variations inline
* Cross-product variation mode: edit variations from many products in one view
* Bulk variation images

= CSV import and export =

* Export your filtered view, or only the rows you tick, to CSV
* Round-trip: export, edit externally, import back
* Create new simple products via CSV import

= Organize your workspace =

* Show, hide and reorder columns
* Edit Cost of Goods (COGS) inline when WooCommerce's Cost of Goods Sold feature is enabled

= Connect your AI assistant =

The connector lets your AI assistant read products, or read and edit them, depending on the access you choose. Turn it on at SwiftGrid > Access > Connections. Paste the connector URL into Claude or ChatGPT as a custom connector. Log in through your store's WordPress login page and choose the assistant's access. The connector requires WordPress 6.9 or later, HTTPS, and pretty permalinks. This version doesn't support multisite.

* WordPress Abilities (WordPress 6.9+): connect Claude or another AI assistant to your store through the WordPress MCP Adapter plugin. The assistant can find products, edit up to 50 rows per call, and change prices for up to 1000 products per call by filter. Edits save straight to your store, without clicking **Save changes**
* Grid saves, CSV imports and assistant edits are recorded, each as one change with each product's value before and after. Your assistant can look up a change and undo it. A field edited since keeps its new value, and a product that a CSV import created stays in your store. Changes are kept for 90 days

= Privacy and compatibility =

* Works with WooCommerce High-Performance Order Storage (HPOS)
* No accounts, no tracking, no advertising. Nothing contacts an outside service until you set it up yourself. See External services below

= SwiftGrid Pro =

Bulk edit with AI inside your product grid: describe a change, review it, apply it, and undo it from History.

SwiftGrid Pro has everything in the free version, plus:

* Bulk edit with AI: click **Edit with AI** and describe the change in plain English, such as "Raise prices 10%". Check the preview, with a sample of products before and after, then apply the edit and undo it in one click. It uses the AI provider connected in **Settings > Connectors** and needs WordPress 7.0
* Per-product variation generation: generate missing variations for one product or across a selection
* Excel (.xlsx) export
* Saved column views, for repeat jobs such as a pricing view or a stock-take view
* Custom-field and ACF columns: add your own fields to the grid, edit them, and round-trip them through CSV
* Scheduled edits with auto-revert: pick the date and time your edits apply, see every pending edit, and cancel one before it runs
* Change history and bulk rollback: browse the newest 50 recorded changes, with each product's value before and after, and roll a whole change back in one click. A field edited since is left alone and named

Follow development at [purothemes.com](https://purothemes.com/plugins/swiftgrid/).

== Installation ==

1. Upload the `swiftgrid` folder to `/wp-content/plugins/`, or install via Plugins → Add New.
2. Activate the plugin through the Plugins menu.
3. Click **SwiftGrid** in the admin sidebar. Your products load in the grid, ready to edit.

== Frequently Asked Questions ==

= Does SwiftGrid require WooCommerce? =

Yes. WooCommerce 8.2 or later must be installed and active.

= Is there a product limit in the free version? =

No. The free version edits unlimited products, with all 17 product columns, bulk edits, variation editing, and CSV import and export.

= Can I bulk edit prices by a percentage? =

Yes. Select the products, open the calculator, and increase or decrease regular or sale prices by a fixed amount or percentage.

= Does it work with variable products and variations? =

Yes. Expand a product to edit its variations inline, or switch to variation mode to edit variations across many products at once.

= Can I import and export CSV files? =

Yes. Export your current filtered view, or only the rows you tick, to CSV, edit externally, and import back. CSV import can also create new simple products.

= When are my grid edits saved? =

When you click **Save changes** or press Ctrl+S (Cmd+S on a Mac). Until then, you can undo, redo or discard them.

= Is SwiftGrid compatible with HPOS? =

Yes. SwiftGrid declares full compatibility with WooCommerce High-Performance Order Storage.

= Does SwiftGrid send any data off my site? =

Not on its own. There is no account, no tracking and no phone-home, and nothing is sent until you set it up yourself.

The free version contacts an outside service in one case, once you turn on the connector: it fetches the connecting app's client metadata when a store manager opens the consent screen. SwiftGrid Pro sends data in two more cases, once you set them up: its **Edit with AI** panel sends the command you type to the AI provider connected in **Settings > Connectors**, and it checks your license and looks for updates with the Puro license service once you enter a license key. See External services below for the details of each.

== Screenshots ==

1. The SwiftGrid spreadsheet: your whole catalog in one editable grid.
2. Bulk edit a selection: change status, stock, or run the price calculator across many products at once.
3. Variation editing: expand a variable product or edit variations across products in one view.
4. Filter and search to scope the exact products you want to work on.
5. CSV import/export with round-trip editing.
6. Show, hide, and reorder columns.

== Third-party libraries ==

AG Grid Community 35.1.0 (MIT licensed).

Shipped unmodified from the official npm release:

* assets/js/vendor/ag-grid-community.min.js
  = dist/ag-grid-community.min.js
* assets/css/vendor/ag-grid-community.min.css
  = styles/ag-grid.min.css + styles/ag-theme-quartz.min.css, concatenated in that order

Source and non-minified builds:

* https://github.com/ag-grid/ag-grid/tree/release-35.1.0
* https://github.com/ag-grid/ag-grid
* https://registry.npmjs.org/ag-grid-community/35.1.0

The exact shipped bytes can be reproduced with:

  npm pack ag-grid-community@35.1.0

License text: licenses/ag-grid-community.txt

== Changelog ==

= 1.0.1 =
* Initial release.

== Upgrade Notice ==

= 1.0.1 =
Initial release.

== External services ==

SwiftGrid contacts no external service on its own. There is no account, no tracking and no phone-home, and nothing below happens until you set it up.

Once you have, almost every request is the direct result of something you just did. The one exception is SwiftGrid Pro's update check, which runs on WordPress's normal update schedule after you enter a license key; it is listed below.

Every request SwiftGrid makes identifies itself only as "SwiftGrid". It does not carry your WordPress version, and it does not carry your site address unless a section below says otherwise.

= AI Assistant Connector =

When a store manager opens the consent screen, SwiftGrid fetches the connecting app's client metadata from the app's address (claude.ai for Claude or chatgpt.com for ChatGPT). SwiftGrid sends no store data in this request. The metadata lists the app's name and return addresses.

= AI providers in SwiftGrid Pro =

This section does not apply to the free version from WordPress.org. The free version does not contain the **Edit with AI** panel and never contacts an AI provider.

The **Edit with AI** panel is optional and sends nothing until WordPress has a key for an AI provider. An administrator saves that key in **Settings > Connectors**, or sets it as a PHP constant or environment variable such as `ANTHROPIC_API_KEY`. WordPress keeps the key and sends it with each request; SwiftGrid never stores it and has no account with any provider.

When you open the **Edit with AI** panel, WordPress fetches the list of models from each connected provider to check that one can answer. When you preview a command, SwiftGrid sends the command you typed, a short summary of what the command applies to, and the schema SwiftGrid asks the answer to follow. The summary holds the number of matching products, the filters you have set, and the text in the grid search box, up to 40 characters. WordPress sends the request to the connected provider it picks, and prefers the models SwiftGrid lists.

SwiftGrid never attaches your product rows. It does not send your product fields or values, your WordPress username or email address, or any customer or order records. What you type yourself, in the command field or the grid search box, is sent as described above. The API key belongs to your account with the provider, so the provider can connect the request to that account.

WordPress includes connectors for these providers:

* [Anthropic](https://www.anthropic.com) (api.anthropic.com): [terms](https://www.anthropic.com/legal/commercial-terms), [privacy](https://www.anthropic.com/legal/privacy)
* [Google](https://ai.google.dev) (generativelanguage.googleapis.com): [terms](https://ai.google.dev/gemini-api/terms), [privacy](https://policies.google.com/privacy)
* [OpenAI](https://openai.com) (api.openai.com): [terms](https://openai.com/policies/terms-of-use), [privacy](https://openai.com/policies/privacy-policy)

Other connector plugins send requests to their own services, under their own terms.

= License and updates in SwiftGrid Pro =

This section does not apply to the free version from WordPress.org. The free version does not contain the licensing code and never contacts Puro.

SwiftGrid Pro checks your license with the Puro license service at licenses.purothemes.com. It sends your license key, your site address, the product name, and the installed plugin version. Your site address is sent on purpose here: your license is registered to the sites you activate it on, up to the limit of your plan (1 site, 5 sites or unlimited).

That happens when you:

* activate a license, which sends the key you just entered;
* deactivate a license;
* press "Check for updates" on the SwiftGrid license screen;
* press "Check again" on the WordPress Updates screen;
* open the plugin details window;
* or when WordPress runs its normal update check.

Everything except activation needs a license key already saved on the site. Update results are cached for three hours.

* [Puro](https://purothemes.com) (licenses.purothemes.com): [terms](https://purothemes.com/terms), [privacy](https://purothemes.com/privacy)
