Skip to content
Changelog

Release notes

Every notable change to the PimiPay Paddle for WooCommerce plugin, newest first.

v1.7.0

2026-09-10
  • New Pricing setting with an Order total mode. Instead of opening the checkout with the price synced to Paddle, the plugin creates the Paddle transaction from the WooCommerce order itself, so coupons, positive fees, shipping and dynamic or per-customer prices are all charged exactly as WooCommerce recorded them. The coupon guard from 1.6.3 is lifted in this mode.
  • Products still need to be synced to Paddle so each line can reference its Paddle product, but in Order total mode the synced price is no longer what is charged — only the amount on the order is billed. Tax follows your Paddle account setting, as synced catalog prices already do.
  • The transaction is prepared before the Paddle checkout opens and reused on reload; a changed order gets a fresh draft, and every draft issued for an order is recognised by the webhook, so a customer who completes an earlier draft is still marked paid. If the amount Paddle collected differs from the order total, the order still completes and gets a warning note.
  • Negative fees still make Paddle unavailable in both modes: Paddle has no way to represent a reduction line, so the plugin refuses rather than overcharge.
  • Catalog price stays the default — existing stores change nothing unless they opt in. Requirements are unchanged: WordPress 7.0.3 and PHP 8.3, tested up to WordPress 7.1 with WooCommerce 11.0.

v1.6.3

2026-09-10
  • Discounted carts no longer overcharge. The checkout opens with the price synced to Paddle, so a WooCommerce coupon never reached Paddle and the customer was charged the full catalog price. Paddle is now unavailable at checkout while the cart carries a coupon discount or a negative fee; positive fees are unaffected. The order-total pricing mode in 1.7.0 will charge what the order actually says.
  • Corrected the Discount Codes setting description and the README, which both said the order total was sent to Paddle.
  • Requirements are unchanged: WordPress 7.0.3 and PHP 8.3, tested up to WordPress 7.1 with WooCommerce 11.0.

v1.6.2

2026-08-20
  • Tested against WordPress 7.1 with WooCommerce 11.0.1 on a real install: activates clean, no PHP warnings. The compatibility declaration now says so.
  • No functional change: version strings and the compatibility declaration only. Requirements are unchanged: WordPress 7.0.3 and PHP 8.3, tested up to WordPress 7.1.

v1.6.1

2026-08-19
  • The 1.6.0 row-appearance settings are renamed "Payment method style" and "Payment method logo", so they can no longer be confused with the Checkout Display, Theme and Language settings that control Paddle's own hosted checkout. Nothing is stored differently — only the labels change.
  • A more descriptive default payment method description for fresh installs, naming card and PayPal payment.
  • The Paddle wordmark shown at checkout is 91% smaller (53KB → 5KB), trimming a little weight off every checkout page load.
  • Requirements are unchanged: WordPress 7.0.3 and PHP 8.3, tested up to WordPress 7.0.4.

v1.6.0

2026-08-19
  • New Checkout style setting: show the payment option row as logo only (the current look, still the default), title only, or logo and title together.
  • New Checkout logo setting: replace the Paddle wordmark on the checkout row with your own image — for example the card brands you accept — picked from the media library. If the image is ever deleted, the row falls back to the Paddle logo rather than breaking.
  • Whichever style you pick, the gateway keeps its real name on orders, admin columns, emails and for screen readers; when title and logo show together the image is marked decorative so screen readers do not announce the gateway twice.
  • Requirements are unchanged: WordPress 7.0.3 and PHP 8.3, tested up to WordPress 7.0.4.

v1.5.1

2026-08-19
  • WooCommerce is now declared as a required plugin. WordPress itself blocks activating the gateway until WooCommerce is installed and active, shows “Requires: WooCommerce” on the Plugins screen, and prevents deactivating WooCommerce while the gateway is running — instead of the plugin quietly doing nothing with only an admin notice to explain.
  • Requirements are unchanged: WordPress 7.0.3 and PHP 8.3, tested up to WordPress 7.0.4.

v1.5.0

2026-08-16
  • The checkout now shows the Paddle logo on its own. It used to print the payment method name beside a logo that already reads “paddle”, saying it twice. Your Title setting is unchanged and still names the gateway on the order, in the orders list and in customer emails — it is simply no longer drawn next to the logo.
  • A square Paddle icon in the WooCommerce Payments settings list, where the wide logo had been shrinking to illegibility, and the gateway is now listed as “PimiPay Paddle” so it is distinguishable from other Paddle plugins.
  • A “Test mode” badge appears beside the gateway whenever it is pointed at Paddle’s sandbox.
  • The product edit screen now warns you when the Physical Products setting is hiding Paddle for that product. Previously the gateway just did not appear at checkout, with nothing anywhere explaining why.
  • The Gateway Logo setting has been removed. Showing the Paddle logo was the only thing it was sensibly set to, and the media picker behind it loaded on every settings screen. A filter is available if you genuinely need a different mark.
  • Requirements are unchanged: WordPress 7.0.3 and PHP 8.3, tested up to WordPress 7.0.4.

v1.4.1

2026-08-13
  • Tested with WordPress 7.0.4. A compatibility release only — no functional changes. Requirements are unchanged: WordPress 7.0.3 and PHP 8.3.

v1.4.0

2026-08-12
  • New Discount Codes setting (off by default). When enabled, Paddle’s own discount-code field is removed from the checkout. That field is unrelated to WooCommerce coupons — a code typed there reduces what Paddle charges without WooCommerce ever learning about it, so the order completes as paid for less than its total. Hiding the field closes that accidental-underpayment path; WooCommerce coupons keep working as before.
  • Now requires WordPress 7.0.3 and PHP 8.3; tested up to WordPress 7.0.3.

v1.3.2

2026-08-09
  • Licensing: update checks now identify the plugin by a stable product ID instead of a numeric one, and existing customer licenses migrate to the new format automatically on update. No action needed.

v1.3.1

2026-08-06
  • New checkout theme and language settings — match the Paddle checkout to your site instead of always using Paddle’s defaults.
  • New Site Health checks that surface Paddle problems which otherwise fail silently: missing credentials, a webhook that has stopped verifying, and a scheduled sync that is not running. The warnings clear themselves once the problem is fixed.
  • The webhook signing secret returned by Paddle is now saved and filled in for you when you register the webhook, and cleared when the webhook is forgotten.
  • A Paddle Product ID that another WooCommerce product already owns is now rejected, and sync stops rather than overwriting the other product’s link.
  • Prices now sync even when the product-level update is rejected, so one bad field no longer blocks the whole price update.
  • Fixed: auto-sync could still run after the setting was switched off.
  • Fixed: the webhook health check judged “recent” by the last webhook received rather than the last one that actually succeeded, so a stream of failing deliveries looked healthy.
  • Fixed: stores without the mbstring PHP extension now fall back to WordPress’s own shims instead of erroring.
  • Licensing: an install now binds to its own license, and your license key is no longer deleted when a check is rejected.

v1.3.0

2026-07-29
  • Choose the Paddle tax category for each product, with a store-wide default. Everything was previously sent as “Standard”, which means pre-written software downloaded and installed locally — so if you sell ebooks, hosting, training or services, Paddle was collecting tax at the wrong rate on your behalf. Note that only Standard and SaaS are enabled on a Paddle account by default; the others must be requested in the Paddle dashboard first.
  • New option to hide Paddle when the cart contains a physical product. Paddle is a merchant of record for digital goods and its terms do not cover physical items, but nothing fails visibly when one is sold — the exposure turns up later as a rejected payout or an account review. Off by default.
  • Failed syncs now explain themselves. The reason is recorded on the product and shown on its Paddle tab, at the top of the product editor, and — for scheduled syncs — on the products list and in WooCommerce → Status. Previously it was only written to the debug log.
  • Paddle’s specific validation errors are shown instead of a generic “Invalid request.”, so a rejected field is named along with the rule it broke.
  • Fixed: a product with a description longer than 2,048 characters could never sync. Paddle rejects anything longer rather than shortening it, so affected products failed on every run indefinitely with no usable explanation. Product names and descriptions are now trimmed to Paddle’s limits.
  • Fixed: a product with no price no longer creates an entry in your Paddle catalogue. Paddle cannot delete products, only archive them, so this used to leave something behind that had to be tidied up by hand.
  • Fixed: a variable product with one unpriced variation now names that variation, instead of reporting that the whole product has no price.

v1.2.0

2026-07-29
  • Sync many products at once — select any number of products on the Products screen and choose "Sync with Paddle" from Bulk actions. If a large selection runs out of time, the remaining products are reported so you know exactly what still needs syncing.
  • A Paddle section in WooCommerce → Status showing your environment, whether credentials and the webhook are set up, when the last webhook arrived and how it went, when auto-sync next runs, how many products are synced, and any refunds awaiting Paddle approval. It never includes your API key or webhook secret, so the report is safe to paste into a support email.
  • Failed payments now explain themselves. Paddle’s decline codes are translated into plain English in the order notes, and customers see a message that tells them whether it is worth trying the same card again.
  • A warning now appears if two products point at the same Paddle price — a state that makes both products charge the same amount and lets syncing one silently change the other’s price.
  • Fixed: duplicating a product copied its Paddle IDs to the copy, so the duplicate pointed at the original’s Paddle product and price. Syncing the copy then rewrote the original’s price, which stayed invisible for as long as the two products cost the same. Duplicates are now created unsynced, including every variation.
  • Fixed: VND was treated as a zero-decimal currency. Paddle does not support VND at all, and the correct zero-decimal currencies are CLP, JPY and KRW.
  • Tested up to WordPress 7.0.2.

v1.1.0

2026-07-28
  • Refunds from the WooCommerce admin — issue full or partial refunds the standard way and they sync to Paddle. Refunds made in the Paddle dashboard sync back to WooCommerce automatically.
  • Paddle reviews some refunds manually instead of approving them instantly. Those are recorded as awaiting approval, and the WooCommerce refund is created only once Paddle approves — so a refund record never claims money that has not actually moved.
  • Full support for the WooCommerce Cart & Checkout Blocks, alongside the classic checkout.
  • New Checkout Display setting: embed the Paddle checkout inline in the page instead of the overlay modal. The overlay remains the default.
  • A "Manage Billing" link in My Account takes customers straight into the Paddle customer portal for payment history, invoices, and card updates — no second login.
  • Paddle transaction details now appear on the order screen: transaction ID linked to your Paddle dashboard, payment method, totals including Paddle’s fee and your earnings, and a link to the invoice PDF.
  • New webhook health panel in the gateway settings — see whether webhooks are arriving and verifying, when the last one landed, recent delivery counts, and a list of recent deliveries from Paddle, with the option to replay one.
  • Fixed: orders in zero-decimal currencies (JPY, KRW, CLP, VND) were sent to Paddle multiplied by 100, overcharging customers 100x.
  • Fixed: product sync could report success when Paddle returned no product ID, leaving the gateway silently unavailable at checkout.
  • Fixed: switching on scheduled auto-sync did not actually schedule it.
  • API keys and webhook secrets are no longer shown in plain text on the settings screen.

v1.0.5

2026-07-27
  • Security: transaction validation now verifies the transaction is linked to the order and that its line items match the order’s synced Paddle prices, closing a payment-confirmation bypass.
  • Security: webhooks without a configured webhook secret are rejected instead of accepted unverified — make sure your webhook secret is set in the gateway settings after updating.
  • Paid or refunded orders can no longer be flipped to failed by canceled / past-due webhooks.
  • Scheduled auto-sync no longer silently stops after its first run.
  • Checkout completion failures now show the actual error, and Paddle API authorization problems persist as an admin notice until resolved.
  • Frontend assets are cache-busted with the real plugin version (was stuck at 1.0.0).
  • Bumped shazzad/plugin-updater to 1.2.0 for improved license validation and auto-update reliability.
  • Compatibility refreshed: WordPress 6.9, WooCommerce 10.9, PHP 8.3 required.

v1.0.4

2026-03-17
  • Auto-open Paddle checkout modal automatically on the order-received page — one less click for the customer.

v1.0.3

2026-03-17
  • Integrated shazzad/plugin-updater for license management and automatic plugin updates from the WordPress admin.
  • Cleaned up leftover console.log statements from checkout.js.
  • Removed legacy wprepo-upgrader.php in favor of the new updater library.

v1.0.2

2026-03-17
  • Added automatic price synchronization — detects WooCommerce price changes and syncs them to Paddle without manual intervention.
  • Added "last price sync time" display in the product admin.
  • New "Paddle" product data tab in the product editor with Paddle-specific fields.
  • Switched to environment-specific meta keys (_paddle_production_product_id / _paddle_staging_product_id) to prevent cross-environment contamination.
  • Switched to the WooCommerce product meta API instead of update_post_meta for full HPOS compatibility.
  • Automatic migration of legacy meta keys on first sync.

v1.0.1

2025-11-04
  • Added custom logo upload for the Paddle payment gateway.
  • Added cart item synchronization check — customers are prevented from checking out with products that have not been synced to Paddle yet.
  • Settings page refactor: grouped fields by environment and purpose for clarity.

v1.0.0

2025-11-03
  • Initial release.
  • WooCommerce payment gateway powered by Paddle Billing (sandbox + production).
  • One-click product and variation sync to Paddle.
  • Paddle overlay checkout integration with pre-filled customer data.
  • HMAC SHA256 webhook signature verification.
  • Cart recovery link handling (Paddle recovery emails redirect customers back to their pending order).
  • HPOS (High-Performance Order Storage) compatibility.
  • Comprehensive debug logging under WooCommerce → Status → Logs.