CoCart Plus 1.6 Release Notes

Update: The minimum requirement for PHP has been reset to version 7.4, CoCart Plus 1.6.1 provides the reset – read why the revert for more

CoCart Plus 1.6.0 is ready, and it brings login security, richer product data, and a batch of REST API fixes worth knowing about before you upgrade. Here’s what’s changed.

Two-Factor Authentication support

CoCart Plus now supports Two-Factor Authentication during login. If your store already uses a 2FA plugin to protect customer or admin accounts, that same protection now extends to the CoCart login endpoint — no separate configuration needed on the API side.

This requires CoCart Community 4.6 or later. Full usage details are in the 2FA documentation.

Advanced Custom Fields: full product data

If you’re running Advanced Custom Fields alongside CoCart, the Products API now returns all of your ACF fields, not a partial set. If you’ve been working around missing fields on the frontend, you can drop that workaround with this release.

Add a coupon while adding an item

You can now pass a coupon code directly on an add-to-cart request instead of making a second call to apply it afterward — one less round trip for a common checkout pattern.

curl --request POST \
     --url https://example-store.com/wp-json/cocart/v2/cart/add-item \
     --header 'Content-Type: application/json' \
     --data '
{
  "id": "123",
  "quantity": "1",
  "coupon": "10OFF"
}
'

Licensing and updates

  • License activation has been rebuilt around Polar and now supports Polar customers only.
  • Pausing updates: if you need a window of stability during a big sale, you can now pause plugin updates for a set period instead of turning off update checks entirely.
  • Translations now update automatically, so localized stores stay current without a manual step.

Improvements

  • REST requests are a little faster — admin-only content no longer loads in the background on every API call.
  • Chosen shipping method and available packages now reset before a customer’s shipping address is set, rather than after, avoiding stale shipping state.
  • The Global Rate Limit can now be configured directly in wp-config.php, so it’s set once at the infrastructure level instead of per-environment in the dashboard. See the rate limiting documentation for the constants involved.
  • The WordPress dashboard got a semantic markup pass for better screen reader support.

Bug fixes

This release closes out a real cluster of REST API bugs, several of which were long-standing and only surfaced once we added proper test coverage for the plugin’s v1 controllers:

  • /customer now actually responds. This endpoint has existed in the codebase since CoCart Plus 1.0.0, but it was never registered with the REST API — every request to it 404’d. It’s wired up now.
  • POST /calculate?return=true returns clean totals. It was previously double-wrapping the response, so instead of a flat totals object you’d get one response nested inside another.
  • /totals/tax no longer errors. The route was registered but its handler method didn’t exist — every call to it failed. It’s implemented now.
  • Cross Sells no longer warns on products without a thumbnail. A missing product image used to trigger a PHP warning; it now degrades gracefully.
  • Setting a payment method no longer triggers a PHP warning caused by a missing type declaration on the request schema.
  • Shipping address validation is more reliable. Updating shipping country, postcode, or phone with invalid data used to fail silently and revert to the old value — you’ll now get a real error instead of silent data loss.
  • Shipping address mirroring fixed. Submitting billing-only details used to leave shipping address fields blank; billing now correctly mirrors to shipping when ship_to_different_address isn’t set, matching how WooCommerce’s own checkout behaves.
  • Shipping reset no longer runs redundantly. reset_shipping() was being called on every field iteration instead of once before the loop — harmless but wasteful; now it only runs once.
  • Fixed a fatal error that could occur when override_totals() ran before WC()->cart was initialized.

Compatibility and requirements

  • Tested up to WordPress 7.1
  • Tested with WooCommerce 11.0
  • CoCart Community 4.6 minimum required going forward
  • PHP 8.2 is now the minimum required version. PHP 7.4, 8.0, and 8.1 are all past end-of-life and no longer tested against. If you’re still on one of those, this is the release to plan your PHP upgrade around — 8.2 is also faster and more secure.

Upgrading

This is a standard upgrade — no breaking changes to the REST API surface, just fixes and additions.