=== Ambikly – Sell Online: Cart, Checkout & Digital Downloads ===
Contributors: ambikly
Tags: ecommerce, online store, shopping cart, digital downloads, checkout
Requires at least: 5.4
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.1.0
License: GPLv3+
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Sell physical and digital products with one fast, self-hosted store plugin — no required add-ons, no transaction fees, no page builder needed.

== Description ==

**Ambikly is a complete store, not a framework you have to assemble.** Install it, run the setup wizard, and you have products, a cart, checkout, orders, coupons, shipping, tax, and customer accounts working the same day — no separate payments extension, no separate "core" plugin to hunt down first.

**Website:** [ambikly.com](https://ambikly.com/) · **Docs:** [docs.ambikly.com](https://docs.ambikly.com/) · **Free vs Pro:** [ambikly.com/free-vs-pro](https://ambikly.com/free-vs-pro/)

= What you can sell =

* **Physical products** — simple or with variants, each variant carrying its own price, image, SKU and stock
* **Digital downloads** — token-protected file delivery with per-product download limits and expiry, plus optional pricing plans so one file can be sold as several licenses
* **B2B / wholesale** — company accounts with net-terms billing (Net 7, 15, 30, 60 or 90), a credit limit, a tier discount, and several buyers sharing one account
* **Subscriptions, gift cards, bundles and more** — available when you need them through [Ambikly Pro](https://ambikly.com/pricing/), not a rewrite

= A checkout that's actually finished =

* Cart, checkout, and a customer account area — orders, downloads, saved addresses, profile — all included, not a separate purchase
* **Stripe** and **PayPal** built in, with webhook signatures verified server-side before any order is marked paid — plus Cash on Delivery, Direct Bank Transfer and Check Payments for offline sales
* Shipping zones with flat rate, free shipping and local pickup
* Tax rates by country, state, postcode or city — inclusive or exclusive, with compound rates and per-class rules
* Coupons with percentage or fixed discounts, minimum and maximum spend, total and per-customer usage limits, product include/exclude rules, customer-email restrictions, and free shipping

= Run the back office from one screen =

* Orders with line items, notes, a guarded status workflow, partial and full refunds, and printable invoices and packing slips
* Products, categories, customers, companies and coupons, each with search, filtering, sorting and bulk actions
* Reports — sales by day, order-status breakdown, best sellers, and CSV export
* Product reviews with moderation
* Transactional emails with editable subjects and bodies, smart tags like `{{order_number}}`, a one-click test send, and a preview that opens in a new tab
* Outgoing webhooks to Zapier, Slack or any HTTPS endpoint, HMAC-signed with automatic retries and a delivery log
* CSV import and export for products and orders
* Dark mode and a responsive admin that works on a phone

= Built for developers, not around them =

* A REST API under `/wp-json/ambikly/v1/`, authenticated the same way as any other WordPress endpoint — no separate API key system to manage
* **Eight block-editor blocks** — Product Grid, Featured Product, Add to Cart, Mini Cart, Cart, Checkout, Customer Account and Product Reviews — each with its own settings panel and a live preview in the editor, plus shortcodes for classic themes and page builders
* WP-CLI commands for database upgrades, CSV exports and recomputing customer totals
* A real PHP hook/filter system through checkout, orders and pricing — extend behavior without forking core files
* Your data lives in your own database tables, in your own WordPress install — export it, query it, or move hosts whenever you want

= Zero transaction fees, ever =

Ambikly never takes a cut of your sales. You keep 100% of what you charge, minus only whatever your payment processor itself charges. There is no hosted-checkout tier and no fee schedule that changes as you grow.

= Need more? 35 add-ons, one license =

[Ambikly Pro](https://ambikly.com/pricing/) is a single add-on pack: one license activates every add-on below, with no per-feature upsells. All 35 are already listed inside this free plugin under **Ambikly → Addons**, so you can see exactly what the pack contains before you buy — and each one runs inside the screens you already use, rather than adding a second plugin to configure.

**Store experience**

* [Advanced Variations](https://ambikly.com/addons/advanced-variations/) — Color and image swatches for product variations.
* [AJAX Filters](https://ambikly.com/addons/ajax-filters/) — Faceted filter widgets that refresh the shop grid without a reload.
* [Product Badges](https://ambikly.com/addons/product-badges/) — Show On Sale / New / Hot ribbons on product cards driven by a rules engine.
* [Product Compare](https://ambikly.com/addons/compare/) — Floating compare tray with a side-by-side product comparison table.
* [Quick View](https://ambikly.com/addons/quick-view/) — Open a fast product preview modal from any shop page, with no page navigation.
* [Recently Viewed](https://ambikly.com/addons/recently-viewed/) — Track and resurface products a visitor has browsed.
* [Size Chart](https://ambikly.com/addons/size-chart/) — Per-category size guide modal triggered from product detail pages.
* [Smart Search](https://ambikly.com/addons/smart-search/) — Predictive search with live product suggestions and category filtering.
* [Sticky Add to Cart](https://ambikly.com/addons/sticky-add-to-cart/) — Pin the Add to Cart button to the screen so customers can buy without scrolling back.
* [Wishlist](https://ambikly.com/addons/wishlist/) — Let shoppers save favourite products to a personal list.

**Marketing**

* [Abandoned Cart Recovery](https://ambikly.com/addons/abandoned-cart/) — Win back customers who left items in their cart with a sequence of automated emails.
* [Affiliate System](https://ambikly.com/addons/affiliate/) — Track referrals and record commissions for affiliate partners.
* [Dynamic Pricing](https://ambikly.com/addons/dynamic-pricing/) — Rule-based discounts: tiered, role-based, cart-quantity and scheduled.
* [Flash Sales](https://ambikly.com/addons/flash-sales/) — Countdown-driven, limited-time sale banners on product pages and storefront sections.
* [Gift Cards](https://ambikly.com/addons/gift-cards/) — Sell stored-value gift cards and let customers redeem them at checkout.
* [Loyalty Points](https://ambikly.com/addons/loyalty-points/) — Earn-and-redeem loyalty program with a per-customer ledger and cart redemption.
* [Order Bumps](https://ambikly.com/addons/order-bumps/) — Show one-click add-on offers on the checkout page to boost average order value.
* [Popup Campaigns](https://ambikly.com/addons/popup-campaigns/) — Email capture or announcement popup with delay, scroll, and exit-intent triggers.

**Merchandising**

* [Product Bundles](https://ambikly.com/addons/bundles/) — Package multiple products under a single SKU at a fixed or computed price.

**Checkout & sales**

* [Checkout Field Editor](https://ambikly.com/addons/checkout-field-editor/) — Add, remove, reorder, and relabel fields on the checkout form.
* [One Page Checkout](https://ambikly.com/addons/one-page-checkout/) — Cart and checkout combined onto a single page for faster conversion.
* [Post-purchase Upsells](https://ambikly.com/addons/post-purchase-upsells/) — One-click upsell offer shown on the order confirmation page.
* [Subscriptions](https://ambikly.com/addons/subscriptions/) — Recurring billing for memberships, SaaS, and subscription boxes.

**Digital products**

* [Download Analytics](https://ambikly.com/addons/download-analytics/) — Per-file download metrics: counts, unique customers, timestamps.
* [PDF Stamping](https://ambikly.com/addons/pdf-stamping/) — Watermark delivered PDFs with the buyer name and order number.
* [Software Licensing Pro](https://ambikly.com/addons/license-pro/) — Activation/deactivation API, per-site enforcement, and auto-updates for digital products you sell.

**Physical products**

* [Advanced Shipping](https://ambikly.com/addons/advanced-shipping/) — Conditional shipping rules driven by cart subtotal, weight, destination, or contents.
* [Multi-vendor](https://ambikly.com/addons/multi-vendor/) — Vendor onboarding, per-vendor dashboards, commissions on each sale.
* [Shipment Tracking](https://ambikly.com/addons/shipment-tracking/) — Add tracking numbers to orders, with carrier links and customer notifications.

**Customer features**

* [Social Login](https://ambikly.com/addons/social-login/) — Single sign-on with Google and Facebook.
* [Store Credit Wallet](https://ambikly.com/addons/store-credit/) — Per-customer wallet for refunds, gift credit, and goodwill, spendable at checkout.

**Admin & analytics**

* [Advanced Reports](https://ambikly.com/addons/advanced-reports/) — Cohort retention, RFM segmentation, top-customers, and CSV exports.
* [CRM Sync](https://ambikly.com/addons/crm-sync/) — Push customers and orders to Mailchimp or HubSpot.

**AI**

* [AI Product Descriptions](https://ambikly.com/addons/ai-descriptions/) — Generate SEO-friendly product copy with Claude or GPT.
* [Frequently Bought Together](https://ambikly.com/addons/ai-recommendations/) — "Customers who bought this also bought…" recommendations driven by purchase co-occurrence.

Browse the [full add-on catalog](https://ambikly.com/addons/) or see the [free vs. Pro comparison](https://ambikly.com/free-vs-pro/).

== Installation ==

**Minimum requirements**

* WordPress 5.4 or greater
* PHP 7.4 or greater
* MySQL 5.6 or greater

**Automatic installation**

1. Go to **Plugins → Add New** in your WordPress admin and search for "Ambikly."
2. Click **Install Now**, then **Activate**.
3. Go to **Ambikly** in the admin menu and follow the setup wizard to set your country, currency, shipping, tax and first payment method. It also creates your Shop, Cart, Checkout, My Account and Order Received pages.
4. Add your first product under **Ambikly → Products**, or use **Ambikly → Tools → Add sample products** to get a working catalog to look at straight away.

**Manual installation**

1. Upload the `ambikly` folder to `/wp-content/plugins/`.
2. Activate the plugin through the **Plugins** screen.
3. Follow the same setup wizard steps above.

Need a hand? Full setup guides live at [docs.ambikly.com](https://docs.ambikly.com/).

== Frequently Asked Questions ==

= Does this require another e-commerce plugin? =

No. Ambikly is a standalone store — it does not require, extend, or run on top of any other e-commerce plugin.

= Will this work with my theme? =

Yes. Ambikly's storefront pages (shop, cart, checkout, account) render inside your active theme's normal page template, so they inherit your theme's fonts, colors and layout. If your theme constrains page content to a narrow reading width, the storefront widens itself so the product grid isn't squeezed into a column. The eight blocks work in any block theme, and shortcodes cover classic themes and page builders.

= Which payment gateways are supported? =

Stripe and PayPal are built in, along with Cash on Delivery, Direct Bank Transfer and Check Payments for offline orders. Webhook signatures are verified server-side for both Stripe and PayPal before an order is ever marked paid.

= Does Ambikly take a cut of my sales? =

No. There are no transaction fees or revenue share of any kind — you pay nothing beyond your own payment processor's standard rates.

= Can I sell digital and physical products together? =

Yes. Each product is created as either a physical product (with shipping, stock and variants) or a digital product (with file downloads, download limits and optional pricing plans), and both can appear in the same shop and the same order.

= Will Ambikly slow down my site? =

Ambikly's admin is a separate React application that only loads on Ambikly's own admin screens — it never adds weight to your other wp-admin pages. The storefront ships plain, minimal JS and CSS with no framework dependency.

= Is there an API? =

Yes — a REST API under `/wp-json/ambikly/v1/` covering products, orders, customers, coupons and more, authenticated the same way as other WordPress REST endpoints. There are also `wp ambikly` WP-CLI commands. See the [developer docs](https://docs.ambikly.com/) for the full route reference.

= Can I customize the checkout or storefront templates? =

Yes. Every storefront screen is built from overridable templates and fires WordPress actions and filters at the points that matter (cart totals, checkout fields, order creation), so you can adjust behavior from a theme or a small companion plugin without touching Ambikly's own files.

= I'm moving away from another cart plugin — will my data still be mine? =

Yes. Ambikly stores everything in its own plain database tables inside your own WordPress install. There's no hosted service holding your orders or customer list hostage — export, query or migrate whenever you want.

= What's the difference between Ambikly and Ambikly Pro? =

Ambikly (this plugin) is a complete, free store: products, checkout, orders, coupons, shipping, tax and reviews. [Ambikly Pro](https://ambikly.com/pricing/) is an optional add-on pack for stores that need subscriptions, gift cards, marketplaces, bundles and 30+ other modules — one license, everything included. Compare them at [ambikly.com/free-vs-pro](https://ambikly.com/free-vs-pro/).

= What happens to my data if I deactivate or delete the plugin? =

Deactivating never touches your data. Deleting the plugin from the Plugins screen also keeps every product, order, customer and setting by default, so you can reinstall later without loss. If you want a full wipe, first turn on **Ambikly → Settings → Features & Addons → "Remove all data when the plugin is deleted"**: uninstalling will then drop every Ambikly table, option, scheduled task and the Store Manager / Support Agent roles (users holding only one of those roles are left without a role). Shop pages and uploaded files are never deleted.

= Where can I get support? =

Community support is available on the [wordpress.org support forum](https://wordpress.org/support/plugin/ambikly/). Pro customers get priority email support — see [ambikly.com/support](https://ambikly.com/support/).

== Screenshots ==

1. Dashboard — sales trend, best sellers, and recent orders at a glance
2. Products — your whole catalog with stock, price, and status in one list
3. Product editor — photos, pricing, category, and stock in one screen
4. Orders — every purchase, filterable by status and payment state
5. Order detail — line items, totals, addresses, and order notes
6. Reports — sales by day, order status breakdown, and top products
7. Storefront shop — the product grid your customers see
8. Product page — gallery, price, reviews, and add to cart
9. Checkout — billing details, shipping options, and payment methods

== Changelog ==

= 1.1.0 =
**New: Audit Log.** An administrator-only screen recording who changed what, when and from where — refunds, store credit, loyalty adjustments, payouts, coupon changes, and attempts that were refused. Entries are kept for a year by default and the log is read-only: there is no API that can edit or delete an entry.

**New: a separate finance permission.** A Store Manager can still process orders and run promotions, but can no longer issue store credit, adjust loyalty points, approve a payout, or create a 100%-off coupon. Administrators keep all of it; the new permission is granted to administrators only, and is filterable.

* Fixed: per-product tax settings were never applied. A product marked non-taxable was taxed anyway, and a product in a non-standard tax class was charged the standard rate — so zero-rated and reduced-rate goods could not be configured at all. Tax is now worked out per line, grouped by each line's own tax class, with a cart discount shared across lines by value. Stores where every product is standard and taxable are unaffected.
* Fixed: the account Downloads tab offered a working Download button after the allowance was used up or access had expired, which could only ever fail. It now reads "Limit reached" or "Expired".
* Fixed: the plugin declares Requires PHP and Requires at least, so WordPress can refuse activation on an unsupported host instead of letting it fail. A matching runtime check covers a host moved to an older PHP after installation.
* Fixed: role names were translated during activation, which triggered WordPress 6.7's "translation loaded too early" notice on a first install. Role names are now stored untranslated, as WordPress core stores its own.
* Fixed: admin links in the dark theme kept their light-theme colour (2.36:1), and the "New" product badge on the storefront was 2.27:1. Both now meet WCAG AA.
* Fixed: keyboard focus did not move into a dialog that contains no form fields, leaving keyboard and screen-reader users behind the overlay.
* Fixed: a 100% coupon, a tax rate above 100%, and repeated variation generation were each accepted when they should not have been.
* Fixed: several Upgrade Notice entries were long enough to be truncated mid-sentence.

= 1.0.5 =
Makes the block-editor blocks usable, and corrects the documentation.

* Fix: all eight block-editor blocks were registered on the server only, so WordPress would render one already present in a page but never offered it in the inserter — no title, no icon, no category. Adding one meant hand-writing `<!-- wp:ambikly/mini-cart /-->` into the code editor. Each block now appears in the inserter under Widgets, with its own settings panel and a live server-rendered preview in the editor.
* Docs: the uninstall opt-in was documented as living under "Settings → Advanced", a tab that no longer exists. It is under **Settings → Features & Addons**.
* Docs: coupons were described as supporting category restrictions. They restrict by product, by customer email, and by minimum/maximum spend — not by category.
* Docs: the email template preview opens in a new tab rather than rendering inline, and the description now says so.
* Docs: readme rewritten so every capability listed is one the plugin actually ships — variant images, local pickup, Net 7–90 terms, postcode and city tax rules, WP-CLI commands and CSV import/export were all present but undocumented.

= 1.0.4 =
Correctness and contrast fixes found in a full click-through audit of every screen.

* Fix: a manual order created in wp-admin attached to whichever customer record was linked to the logged-in administrator's own account, not the customer the merchant picked. The chosen customer kept an empty order history, and the admin-linked record had its name and phone overwritten with the buyer's details.
* Fix: on Reports, switching "Compare to previous period" on showed nothing at all when the previous period had no activity — a percentage change from zero is undefined, so the card rendered blank and the comparison looked broken. It now says so. (Regression introduced in 1.0.3.)
* Fix: `wp ambikly recompute customer-totals` counted orders differently from every screen that displays them — it excluded refunded orders, so a customer with one fully-refunded order was stored as having none while the admin and My Account both showed one. It also reported "0 customer(s)" on runs that had just reset a row.
* Fix: the "Explore Ambikly Pro" button rendered wp-admin's dark gray on orange instead of white, and the "Unlock Ambikly Pro" heading rendered near-black on its orange banner. Both were losing a CSS cascade fight to wp-admin's own unlayered element styles.
* Fix: in dark mode the selected tab on the Emails screen was effectively invisible (dark orange text on a dark orange fill). Several colors at the darker end of each palette had no dark-mode equivalent at all.
* Fix: the "Out of stock" and variant-count badges, and the short-description character counter, were below the AA contrast threshold.
* Fix: invoices showed only their own sequential number, with nothing tying them back to the order. Packing slips have always shown it.

= 1.0.3 =
Interface, accessibility, and refund-integrity fixes.

* Fix: every money figure in the admin was printed without thousands separators — the Dashboard and Reports headline numbers read "$2656383.23" instead of "$2,656,383.23".
* Fix: the admin ignored the store's "Currency position" setting, so a store configured for a right-hand symbol saw it on the left everywhere in wp-admin while the storefront showed it correctly.
* Fix: report chart axis labels were raw fractions of the largest value ("$2582617.78"); they now round to readable steps and abbreviate ("$2.6M").
* Fix: chart gridlines, axis and tick labels were hardcoded light-theme grays and stayed light in dark mode.
* Fix: on the Products list the Actions column painted over the Status column — the header read "Sta" and every status pill was clipped to a single letter.
* Fix: Reports stat cards printed "vs previous period" under every figure even with comparison switched off.
* Fix: the Store Description field's placeholder promised "Press Enter to save, Ctrl+Enter for new line"; no such handling existed.
* Fix: order emails, invoices and packing slips used indigo for links and buttons instead of the Ambikly brand color.
* Fix: shop-grid cards let their buttons float at different heights when product names wrapped to different line counts; long titles also stretched the grid.
* Fix: the storefront was squeezed into the narrow reading-width container some themes apply to page content, rendering a three-column grid at a third of the available width. It now centres on the viewport, and does nothing on themes that already give it room.
* Fix: "7066 product(s)" and "3 review(s)" are now properly pluralised and digit-grouped ("7,066 products", "3 reviews").
* Fix: the "Out of stock" button was white text on a faded orange fill (~1.9:1) — the least readable text on the shop grid. It now uses a legible neutral disabled style.
* Fix: the missing-image placeholder was a 📦 emoji, which renders differently on every operating system. It is now a plain SVG icon.
* Fix: importing a CSV that omits optional columns — the documented, ordinary case — emitted around 22 PHP warnings per row, which on sites that display errors corrupted the import response and made a successful import report a failure.
* Fix: a webhook could be saved against an event name Ambikly never emits. It stayed "Active", logged no deliveries and reported no error. Unknown events are now rejected at save time.
* Fix: 48 form controls across the Coupon, Company, Category, Order, Tools and digital-product screens had a visible label that was never associated with the field, so screen readers announced them as unnamed. The shared field wrappers now bind label to control automatically.
* Fix: refunds were capped by the order total rather than by the amount actually captured, so an unpaid bank-transfer or cheque order could be "refunded" — restoring stock and emailing the customer a refund notice for money they had never sent. The Refund button is now disabled on such orders, and the server refuses the request.
* Fix: the variant grid and the manual-order line-item table had header cells without `scope`, which is what associates the unlabeled per-variant price and stock inputs with their column.
* New: nine replacement plugin-directory screenshots taken from a clean store.

= 1.0.2 =
* Fix: fatal error on PHP 7.4 whenever an order, product or other record was JSON-encoded or accessed as an array (`mixed` return types are PHP 8 only). Affects every 1.0.1 site on PHP 7.4.
* Fix: guest buyers returning from Stripe or PayPal landed on a generic thank-you page — their cart was never cleared and the order-completed event never fired. Both return URLs now carry the order key.
* Fix: a cart line could reference another product's variation and, at order time, decrement that other product's stock.
* Security: editing a customer linked to a WordPress account no longer lets a Store Manager change that account's login email (administrators only).
* Fix: any REST route with an id in the URL could be pointed at a different record by adding an `id` to the request body (e.g. editing customer A saved customer B).
* Fix: a checkout billing name containing HTML/script landed unescaped in the order confirmation and admin notification emails.
* Fix: logging in with items in a guest cart deleted the account's existing cart instead of merging it.
* Fix: two simultaneous checkout submissions for the same cart created two orders and decremented stock twice.
* Fix: an order's status could be set straight to "Refunded" from the dropdown or API without any refund happening; a refunded order could later be moved to another status.
* Fix: tax-inclusive pricing charged tax on top of the inclusive price.
* Fix: digital products created from the quick-add modal, the REST API, CSV import or the sample importer were unpurchasable ("Out of stock") by default.
* Fix: bulk-editing variations always failed with a database error; clearing a variation price saved 0 instead of empty.
* Fix: exporting products to CSV and re-importing the file cleared every SKU.
* Fix: Stripe refunds issued from the Stripe dashboard were recorded with the cumulative refunded amount; the second partial refund was over-recorded or rejected. Refunds are now idempotent per gateway refund id, so an admin refund echoed back by the gateway webhook is not recorded twice.
* Fix: cancelling and later reopening an order left stock overstated and B2B credit under-reserved; cancelled or failed orders kept their coupon usage forever.
* Fix: deleting an order left its refunds, coupon usage and still-working download links behind.
* Fix: Stripe/PayPal checkouts the buyer never finished held stock indefinitely — they now expire to "Failed" after 24 hours (filter `ambikly_pending_gateway_order_ttl`).
* Fix: a missing column on the categories table caused the upgrade routine to drop and recreate the table; columns are now added in place.
* Fix: paid card orders emailed the customer twice and declined attempts emailed the merchant a "new order".
* Fix: variable-product cart lines never recorded which variation was chosen; sold-out variations kept "Add to Cart" enabled; the mobile cart clipped the totals and checkout button off-screen.
* Fix: logged-in customers' cart actions failed with a 403 once their nonce went stale mid-session.
* Fix: a WordPress account checking out with a different billing email created a second, disconnected customer record and broke address prefill.
* Fix: the "Create an account during checkout" setting had no effect.
* Fix: duplicate canonical tags and a per-product meta title that never reached `<title>` on product pages; unstable product sort order across pages; plan-priced digital products sorted as $0.
* Fix: the setup wizard could create duplicate My Account / Order Received pages when re-run; wizard settings are now saved under the same keys the Settings screen reads.
* Fix: `Install::create_tables()` could reset the database version and re-run the full migration on every request.
* Security: hardened cart/checkout input (quantity ceiling, nested address payloads, client-controlled `created_via`), added a coupon brute-force throttle, sanitized customer name/phone/email at write time, and stopped a raw database error leaking on duplicate tag/brand slugs.
* Accessibility: product-editor drawers are keyboard-reachable, every form control has a label, visible focus rings, skip-to-content link, `aria-current` navigation markers, table header scopes, live region for add-to-cart, reduced-motion support, and contrast fixes throughout the admin and storefront.
* Add: Settings → Advanced → "Remove all data when the plugin is deleted" (the uninstall opt-in previously had no UI). Removed three Advanced toggles that had no effect.
* Add: manual orders support coupons; Stripe key format validation; name/SKU length and negative-stock validation with clear errors.
* Dev: 147 PHPUnit regression tests covering the fixes above; PHP 8.4 deprecation fixes.

= 1.0.1 =
* Fix: two admin links (the setup wizard's "Add a product" button and the low-stock/out-of-stock email's "Manage product" link) pointed at an unregistered admin page and returned a 403 instead of opening the product editor.
* Add: a "Add sample products" tool (Setup Wizard finish step and Tools screen) that creates 5 example products — simple, variable with real variations, digital download, digital with multiple pricing plans, and one on sale.
* Add: a "Rerun setup wizard" shortcut on the Tools screen.

= 1.0.0 =
* First stable release.

== Upgrade Notice ==

= 1.1.0 =
Adds an Audit Log and a separate finance permission, so a Store Manager can no longer issue credit or create a 100%-off coupon. Also fixes per-product tax settings, which were ignored — non-taxable products were taxed and tax classes were ignored. Default tax setups are unaffected.

= 1.0.5 =
The eight block-editor blocks now appear in the inserter with settings panels and live previews — previously they were server-registered only and could not be added from the editor at all. Documentation corrected throughout.

= 1.0.4 =
Fixes manual orders in wp-admin attaching to the wrong customer, a Reports comparison that appeared to do nothing when the previous period was empty, a WP-CLI command whose totals contradicted every screen, and several unreadable text/background combinations (most visibly in dark mode).

= 1.0.3 =
Interface, accessibility and refund-integrity fixes. Admin money figures now use thousands separators and your currency position, the Products list keeps its Status column, 48 unlabeled form controls gained accessible names, and an order that was never paid can no longer be refunded.

= 1.0.2 =
Important: fixes a fatal error on PHP 7.4, a Store Manager to administrator takeover path, guest Stripe/PayPal thank-you handling, duplicate orders on double-submit, cross-product stock decrements, a REST id-precedence issue, and email HTML injection. All 1.0.1 sites should update.

= 1.0.1 =
Fixes two broken admin links and adds a one-click sample-product importer.

= 1.0.0 =
First stable release.

== External services ==

This plugin connects to the following third-party services when you enable the corresponding payment gateway:

* **Stripe** — card and wallet payments are processed by Stripe when the Stripe gateway is enabled. Checkout data (amount, currency, and billing details you provide) is sent to stripe.com to create and confirm the payment. See [Stripe's Privacy Policy](https://stripe.com/privacy) and [Terms of Service](https://stripe.com/legal).
* **PayPal** — payments are processed by PayPal when the PayPal gateway is enabled. Order and buyer details are sent to paypal.com to create and capture the transaction. See [PayPal's Privacy Policy](https://www.paypal.com/privacy) and [Terms of Service](https://www.paypal.com/legalhub).

Neither service is contacted unless the corresponding gateway is enabled and used at checkout.
