Title: Australcode Loyalty Program, Points and Rewards for WooCommerce
Author: australcode
Published: <strong>June 27, 2026</strong>
Last modified: October 19, 2026

---

Search plugins

![](https://ps.w.org/australcode-points-rewards/assets/banner-772x250.png?rev=3755653)

![](https://ps.w.org/australcode-points-rewards/assets/icon-256x256.png?rev=3755653)

# Australcode Loyalty Program, Points and Rewards for WooCommerce

 By [australcode](https://profiles.wordpress.org/australcode/)

[Download](https://downloads.wordpress.org/plugin/australcode-points-rewards.1.5.5.zip)

 * [Details](https://kea.wordpress.org/plugins/australcode-points-rewards/#description)
 * [Reviews](https://kea.wordpress.org/plugins/australcode-points-rewards/#reviews)
 *  [Installation](https://kea.wordpress.org/plugins/australcode-points-rewards/#installation)
 * [Development](https://kea.wordpress.org/plugins/australcode-points-rewards/#developers)

 [Support](https://wordpress.org/support/plugin/australcode-points-rewards/)

## Description

Australcode Points and Rewards is a loyalty plugin for WooCommerce with one design
goal: a points program that stays fast and predictable as your store grows. Every
customer gets a points wallet backed by dedicated, append-only ledger tables, and
they redeem points in the cart or at checkout straight from that balance — no coupon
codes to manage. Customers earn on every order and you control earning, redemption
and display from a clean WordPress admin.

Switching from another loyalty plugin? A built-in importer migrates your customers’
point balances from **YITH WooCommerce Points and Rewards** — from the admin or 
with a WP-CLI command, dry-run included.

**Requires:** WordPress 6.5+ · PHP 8.1+ · WooCommerce 9.0+ (WooCommerce must be 
active).

**Free features**

 * Earn points on every order, at a rate you choose, awarded when the order is processing
   or completed.
 * Refunds give points back proportionally: cancel an order and the whole award 
   is reverted, refund part of it and only that share is — both for points earned
   and for points spent.
 * Per-product, per-category and per-role earning multipliers (e.g. 2× for wholesale
   customers), and per-product/category exclusions.
 * Redeem points straight from the wallet for a cart discount — no coupon code to
   manage — with a minimum-to-redeem and a cap on the share of the cart that points
   can pay (before or after tax — see the FAQ).
 * Redeem in the cart and at checkout — classic and block-based, both — and from
   the My Account rewards area. Customers who skip the cart (“Buy now”, a direct
   link to checkout) can still spend their points.
 * “Earn X points” message on product pages (guests are invited to create an account
   instead), and a “You’ll earn X points” line in the cart and checkout totals, 
   classic and block-based.
 * My Account rewards area with balance, lifetime totals and history.
 * Optional floating points widget — a compact pill that stays out of the way of
   the checkout and can be dismissed.
 * An Appearance tab: custom point labels (e.g. “stars”), an accent (the plugin’s,
   your theme’s or your own), a color scheme that follows your theme (or forced 
   light or dark), density, corner radius, and the wording of eight storefront texts.
 * Theme templates: copy any storefront template into your theme’s `acrwd/` folder
   to change its markup; Settings warns you when a copy falls behind a plugin update.
 * Shortcodes and Gutenberg blocks — balance, history, “earn X points” message and
   redeem box (`[acrwd_balance]`, `[acrwd_history]`, `[acrwd_earn_message]`, `[acrwd_redeem]`,`[
   acrwd_earn_line]` for a “You’ll earn X points” line in custom cart or checkout
   summaries, and `[acrwd_if_can_redeem]` to show a note only to customers who can
   redeem) — place them anywhere, including Elementor, Bricks or Divi layouts.
 * **Import from YITH WooCommerce Points and Rewards** — admin importer plus a `
   wp acrwd import yith` WP-CLI command, both with a dry-run preview, to migrate
   customer balances when switching.
 * **Rebuild balances from the ledger** — a `wp acrwd recalc` WP-CLI command, with
   a dry-run, that checks every wallet against its transaction history and repairs
   any that disagree. Useful after a database restore or a support script that touched
   the ledger directly.
 * Program dashboard — points in circulation, a 30-day trend and your top earners
   at a glance.
 * Customers screen with a CSV export of balances (semicolon-separated on Spanish-
   language sites, so Excel opens it in columns). A customer blocked with Pro shows
   as Blocked and can be unblocked here in the free version too.
 * Earning controls: rounding mode, exclude items on sale, roles that earn, guest
   orders placed with an existing account’s email, and guest orders linked to the
   customer’s points once they register.
 * Redemption controls: as a discount line or as a coupon, combine with other coupons
   or not, items on sale excluded or not, the cap measured with or without tax, 
   roles that can redeem, and where the redeem form goes in the cart and the checkout—
   applied without reloading the page.
 * Developer-friendly: `acrwd_*` actions and filters to wire points into your own
   logic.
 * Fully translated into Spanish — every Spanish locale (Spain, Mexico, Chile, Argentina
   and the rest) gets the whole plugin in its own language, admin and storefront
   alike.
 * HPOS-compatible (WooCommerce High-Performance Order Storage).
 * Built on custom tables for fast, scalable reads — no autoloaded option bloat.

**Pro features** (unlocked with a license)

 * Extra earning bonuses: signup, daily-login streak, first order, approved review,
   birthday, profile completion, order-count milestone, cart-total threshold and
   lifetime-spend milestone. Bonuses earned by an order are taken back if that order
   is cancelled or refunded.
 * Earning rules engine: multipliers or flat bonuses by category, customer role,
   order total and date range, applied first-match by priority, with a one-click
   dry-run preview over recent orders.
 * Advanced redemption: spend points on rewards you define — a fixed-amount coupon,
   a percentage discount, free shipping or a free product of your choosing — single-
   use, with restrictions, expiry and an automatic refund if a coupon goes unused.
 * Unlimited VIP tiers with per-tier earning multipliers, storefront badges (colour
   + icon) and a My Account progress bar, measured on points earned net of refunds;
   plus time-boxed campaigns (“double points weekend”) judged by the date the order
   was placed.
 * Two-sided referral program: customers share a link and both sides earn on the
   friend’s first order.
 * Pro customer management: bulk add/subtract/expire, CSV import of adjustments 
   with a dry-run preview, and block/unblock customers.
 * Dedicated transactional emails: a points-expiry reminder and an optional manual-
   adjustment notice (standard WooCommerce emails).
 * Points expiration with a configurable window, and a dashboard panel with the 
   points about to expire in the next 30 days.

[Get Pro ](https://points-rewards.australcode.io)

#### External services

This plugin uses Freemius to handle Pro licensing, checkout and plugin updates.

Freemius is the Merchant of Record for the Pro plan.

 * **What it does:** Freemius powers the in-dashboard pricing/checkout for the Pro
   
   plan and, once you own a license, activates and validates it so Pro features 
   can be unlocked on this site. It also serves automatic updates for the Pro build.
 * **What data is sent and when:** if you opt in on the activation screen, basic
   
   non-sensitive environment data (site URL, WordPress/PHP versions, active plugin/
   theme) is sent to api.freemius.com to support licensing and updates. Opt-in is
   optional — a **Skip** button is shown, and the free version is fully functional
   without it. When you buy or activate a Pro license, your license key and site
   identifier are sent to validate it. No personal data of your store’s customers
   is sent.
 * **Beyond the support links below, the service is only contacted for
    licensing/
   updates of the Pro plan
    (and only after opt-in). The free version
    does not 
   require contacting any external service to work.
 * **Support links:** the plugin menu includes a “Support Forum” link (to the
    plugin’s
   forum on wordpress.org) and a “Contact Us” link that opens the Freemius support
   form in a new browser tab. The address of that link carries your site URL, your
   site’s login URL, the wp-admin page you opened it from, and this plugin’s ID,
   public key and version — so that information reaches Freemius when you click 
   the link, before you type anything. If your site is connected to Freemius (opt-
   in), a signed site identifier is included too. If you then fill in and submit
   the form, your name, email address and message are sent to Freemius so they can
   route the request to us.

Service provider: Freemius, Inc.
 Terms of Service: https://freemius.com/terms/ 
Privacy Policy: https://freemius.com/privacy/

## Screenshots

[⌊Dashboard — points in circulation with a 30-day trend, top earners and the biggest
movers of the last 7 days, all from a fast custom-table ledger.⌉⌊Dashboard — points
in circulation with a 30-day trend, top earners and the biggest movers of the last
7 days, all from a fast custom-table ledger.⌉[

Dashboard — points in circulation with a 30-day trend, top earners and the biggest
movers of the last 7 days, all from a fast custom-table ledger.

[⌊My Account rewards area — customers see their balance, redeem points straight 
onto the current cart (no coupon code involved) and review their full earn/redeem
history.⌉⌊My Account rewards area — customers see their balance, redeem points straight
onto the current cart (no coupon code involved) and review their full earn/redeem
history.⌉[

My Account rewards area — customers see their balance, redeem points straight onto
the current cart (no coupon code involved) and review their full earn/redeem history.

[⌊Settings — configure earning, redemption and display, with inline guidance and
a recommendation for each non-obvious option.⌉⌊Settings — configure earning, redemption
and display, with inline guidance and a recommendation for each non-obvious option
.⌉[

Settings — configure earning, redemption and display, with inline guidance and a
recommendation for each non-obvious option.

[⌊VIP tiers — reward your most loyal customers with higher earning multipliers (
Pro).⌉⌊VIP tiers — reward your most loyal customers with higher earning multipliers(
Pro).⌉[

VIP tiers — reward your most loyal customers with higher earning multipliers (Pro).

[⌊Customers — per-customer balances and activity, all read from fast custom tables.⌉⌊
Customers — per-customer balances and activity, all read from fast custom tables
.⌉[

Customers — per-customer balances and activity, all read from fast custom tables.

[⌊Campaigns — schedule limited-time earning multipliers, like a double-points weekend,
that stack on your base rate (Pro).⌉⌊Campaigns — schedule limited-time earning multipliers,
like a double-points weekend, that stack on your base rate (Pro).⌉[

Campaigns — schedule limited-time earning multipliers, like a double-points weekend,
that stack on your base rate (Pro).

[⌊Import — migrate your customers' point balances from YITH WooCommerce Points and
Rewards, with a dry-run preview before anything is written.⌉⌊Import — migrate your
customers' point balances from YITH WooCommerce Points and Rewards, with a dry-run
preview before anything is written.⌉[

Import — migrate your customers’ point balances from YITH WooCommerce Points and
Rewards, with a dry-run preview before anything is written.

## Blocks

This plugin provides 4 blocks.

 *   Earn points message Shows how many points a product earns. Place it on a product
   template or page.
 *   Points balance Shows the logged-in customer's points balance.
 *   Points history Shows the logged-in customer's recent points activity.
 *   Redeem points Shows the “use your points” form for the customer's current cart.

## Installation

 1. Upload the `australcode-points-rewards` folder to `/wp-content/plugins/`, or install
    it from the Plugins screen.
 2. Activate the plugin through the “Plugins” menu in WordPress. WooCommerce must be
    active.
 3. Go to **Australcode Rewards  Settings** to configure earning, redemption and display
    options.
 4. (Pro) Go to **Australcode Rewards  Upgrade** to buy or activate a Pro license —
    checkout and activation are handled in-dashboard by Freemius, and you can manage
    the license later under **Australcode Rewards  Account**.

## FAQ

### Does this plugin require WooCommerce?

Yes. Australcode Points and Rewards extends WooCommerce and will show a notice if
WooCommerce is not active.

### Is it compatible with High-Performance Order Storage (HPOS)?

Yes. It uses the WooCommerce order CRUD API and declares HPOS compatibility.

### How are points stored?

In dedicated custom tables (balances and an append-only transaction ledger), so 
reads stay fast as your store grows.

### Can customers spend points on any order?

You set the redemption rate, a minimum number of points required to redeem, and 
the maximum percentage of a cart that can be paid with points.

### Why can’t a customer pay 100% of the order with points?

Because the cap is measured on the cart before tax. Points come off the order like
a discount on the pre-tax amount, so with a 100% cap a customer can cover the products
but the tax is still due — on stores whose prices include tax, that is the tax share
of the price. The Redemption settings show the cap as it applies, and the cart never
offers more than it can take.

### Can customers redeem points at checkout?

Yes. The redeem box is in the cart and at checkout — in the classic and in the block-
based versions of both — and in the My Account rewards area. Points come straight
off the order total, like a payment, and nothing generates a coupon code you then
have to send, chase or clean up.

### Does it work with the block-based Cart and Checkout?

Yes. In the block-based cart and checkout the redeem field sits in the order summary,
below the totals; pressing Enter applies the points without placing the order. In
the classic cart it sits next to “Proceed to checkout”, and on the classic checkout
above the checkout form. Both versions also show a “You’ll earn X points” line with
the totals.

### When do points expire?

Never, by default. With a Pro license you can set an expiration window; points are
then swept by a daily task.

### Can a points balance go negative?

Yes, and it is meant to. If a customer earns points, spends them, and the order 
is then cancelled or refunded, the points they already spent are taken back — which
can leave the balance below zero. The plugin leaves it there instead of rounding
up to zero, because the balance is an honest record of what the customer owes the
programme, and quietly forgiving it would let anyone reset their debt by cancelling
an order. They earn their way back up; redeeming stays unavailable while the balance
is at or below zero.

### Can customers see their whole points history?

Yes. The Rewards tab in My Account lists every movement, twenty per page, with pages
to reach the rest. The ledger keeps every entry — nothing is trimmed or rolled up—
so what a customer sees is the same record the shop sees.

### I already refunded part of an order before updating. Will points be adjusted for those?

No. Proportional adjustment applies to refunds issued from the moment you update
onwards; orders you refunded before that are left exactly as they are, and no balance
changes on update. If you want to settle an old case, adjust that customer by hand
from the Customers screen — the change is recorded in the ledger like any other.

### I’m switching from YITH WooCommerce Points and Rewards — can I migrate?

Yes. The plugin ships a dedicated YITH importer: an Import page in the admin and
a `wp acrwd import yith` WP-CLI command, both with a dry-run preview. It reads your
customers’ existing balances and writes them into the plugin’s ledger, so nobody
loses their points when you switch.

### What makes this plugin different?

 * **Redeem from a wallet, not a coupon.** Customers spend points directly in the
   cart or at checkout, and no coupon is created: there are no codes to manage, 
   clean up or reconcile.
 * **Built on custom tables.** Balances and history live in dedicated, append-only
   ledger tables rather than in post or user meta, so reads stay fast as your customer
   base grows and every movement has a row you can audit.
 * **A free version that works end to end.** Earning with per-product, per-category
   and per-role rates, wallet redemption in the cart and at checkout, the My Account
   area, product and cart messaging, shortcodes and blocks, the Appearance tab, 
   the YITH importer and `wp acrwd recalc` are all free; Pro adds automation (an
   earning-rules engine, bonus events, VIP tiers, campaigns, referrals and expiration).
 * **Every refund is symmetric.** Refund an order — fully or partially — and exactly
   the points it earned come back out, calculated against the running refunded total.
   Refund the same order twice and nothing is double-counted; re-pay a failed order
   and the redemption is re-charged from the ledger, not from a remembered figure.
 * **Clean, focused admin.** A single, uncluttered settings area rather than a sprawl
   of options.

### Can I restyle the rewards surfaces to match my theme?

You mostly don’t have to. The customer-facing surfaces inherit your theme: text 
color and fonts come from the surrounding page, and the hairlines and card backgrounds
derive from that text color, so they follow a light or a dark theme on their own.
The **Appearance** tab (Settings) picks the accent — the plugin’s, your theme’s 
or your own — the color scheme (follow the theme, or force light or dark on the 
cards), density and corner radius, without code.

To go further, set these CSS variables on `.acfk.acrwd-scope`, the class every rewards
fragment carries. A rule in your theme wins over the Appearance tab:

    ```
    .acfk.acrwd-scope { --acrwd-accent: #1e3a8a; --acrwd-on-accent: #fff; --acrwd-radius: 0px; }
    ```

 * `--acrwd-accent` — fill of the floating widget, the solid buttons and the progress
   bar (default: the plugin’s green).
 * `--acrwd-on-accent` — text on that fill. The Appearance tab derives it by contrast;
   if you set `--acrwd-accent` by hand, set this one too.
 * `--acrwd-meter` — fill of the tier progress bar (defaults to the accent).
 * `--acrwd-gap` — spacing between blocks (12, 16 or 24 px from the density setting).
 * `--acrwd-radius` — corner radius of cards and fields (0, 10 or 16 px).
 * `--acrwd-fg` — text color of the rewards surfaces. Unset means “inherit from 
   the page”, which is almost always what you want.
 * `--acrwd-muted` — secondary text: the value under a balance, dates in the history.
 * `--acrwd-border` — the hairlines around cards and between history rows.
 * `--acrwd-surface` — the card background.
 * `--acrwd-widget-offset` — distance of the floating widget from the bottom edge,
   added to the device’s safe area.

Variables with an underscore (`--acrwd-_…`) are private and change between versions.
To change the markup instead of the styling, copy a template from the plugin’s `
templates/frontend/` folder into your theme’s `acrwd/` folder.

### Which actions and filters can I hook into?

The full catalogue, with argument lists, is on the plugin’s Developers screen (Australcode
Points and Rewards  Developers). Hooks marked (Pro) fire only when the Pro version
is installed; the rest are in the free version:

Filters:

 * `acrwd_earning_multiplier` — ( int $points, int $user_id, WC_Order $order ) —
   stack an extra multiplier on top of the base and per-role amounts.
 * `acrwd_role_earning_multiplier` — ( float $multiplier, int $user_id, string[]
   $roles ) — customise the per-role earning multiplier.
 * `acrwd_user_can_earn` — ( bool $allowed, int $user_id ) — decide whether a customer
   earns points, after the “Roles that earn” setting.
 * `acrwd_user_can_redeem` — ( bool $allowed, int $user_id ) — decide whether a 
   customer can redeem points, after the “Roles that redeem” setting.
 * `acrwd_redemption_coupon_code` — ( string $code ) — change the code of the virtual
   coupon used when points are redeemed as a coupon.
 * `acrwd_earning_bonus_points` — ( int $bonus, int $user_id, WC_Order $order ) —
   add flat bonus points after every multiplier has been applied.
 * `acrwd_order_earned_points` — ( int $fallback, WC_Order|int $order ) — read what
   an order earned (the ledger amount once awarded, 0 once reverted or for a guest
   order, otherwise a preview), to show the figure on your thank-you page. Accepts
   the order or its id.
 * `acrwd_estimate_multiplier` — ( int $points, int $user_id ) — apply multipliers
   to an estimate shown before there is an order (“Earn X points” on the product
   page, “You’ll earn X” in the cart and checkout).
 * `acrwd_earn_expires_at` — ( ?string $expires_at, ?WC_Order $order, ?string $earned_at)—
   the expiry date of a new lot of points, or null for never. `$earned_at` is the
   date the lot counts from (null = now; the YITH history import passes the original
   date). Without a listener, points never expire.
 * `acrwd_text` — ( string $text, string $key, array $ctx ) — change a storefront
   text by key (the same keys the Appearance tab edits); `acrwd_text_{$key}` filters
   a single one.
 * `acrwd_widget_atts` — ( array $atts, string $surface ) — change the resolved 
   attributes of a storefront surface before its data loads.
 * `acrwd_widget_data` — ( array $data, string $surface, array $atts ) — change 
   the data a storefront surface is about to render.
 * `acrwd_wrapper_classes` — ( string[] $classes, string $surface, array $atts )—
   add or remove classes on the root element of a storefront surface.
 * `acrwd_widget_html` — ( string $html, string $surface, array $atts, array $data)—
   post-process the final HTML of a storefront surface; the result is escaped again.
 * `acrwd_locate_template` — ( string $path, string $name ) — the path of a storefront
   template; a copy in your theme’s `acrwd/` folder wins by default.
 * `acrwd_account_endpoint` — ( string $endpoint ) — change the My Account “Rewards”
   endpoint slug.
 * `acrwd_enqueue_frontend` — ( bool $should ) — force-load the storefront CSS where
   the plugin cannot detect its own output, which happens with some page builders.
 * `acrwd_tier_label` (Pro) — ( string $label, string $tier_id ) — supply the display
   label for a VIP tier if you render tiers yourself.
 * `acrwd_customers_csv_columns` — ( array $columns ) — add columns to the Customers
   CSV export; each one is a header plus a callable that receives the balance and
   returns the cell.
 * `acrwd_admin_dashboard_panels` — ( int $now_ts ) — print your own card in the
   Dashboard panel row.

Actions:

 * `acrwd_points_credited` — ( int $user_id, int $points, TransactionType $type,?
   int $order_id, string $reason_code ) — fires after any movement of a balance (
   orders, bonuses, adjustments, imports, reversals); the points are signed.
 * `acrwd_points_earned` — ( int $user_id, WC_Order $order ) — fires after an order’s
   points are awarded.
 * `acrwd_before_render` — ( string $surface, array $atts, array $data ) — print
   markup right before a storefront surface.
 * `acrwd_after_render` — ( string $surface, array $atts, array $data ) — print 
   markup right after a storefront surface.
 * `acrwd_points_adjusted` — ( int $user_id, int $points ) — fires after a single
   manual adjustment on the Customers screen, or through the REST endpoint `POST/
   wallet/adjust` unless it is sent with `notify=false`; bulk actions and CSV imports
   do not fire it. The points are signed.
 * `acrwd_myaccount_after_summary` — ( int $user_id, Balance $balance ) — fires 
   in the My Account “Rewards” tab after the balance summary, so you can add your
   own panel.
 * `acrwd_tier_changed` (Pro) — ( int $user_id, ?Tier $tier ) — fires when a customer’s
   VIP tier changes; `$tier` is null when they drop below the lowest one.
 * `acrwd_email_points_expiring` (Pro) — ( int $user_id, int $points, string $expires)—
   fires per customer when the expiry reminder runs, to send your own notification.

### What happens if my Pro license lapses?

The free version keeps running and your points, ledger and history stay untouched—
the Pro features switch off until you renew. A customer you blocked with Pro can
still be unblocked from the Customers screen. Pro is one site: an annual subscription,
or a one-time lifetime license that never expires. Refunds are handled by Freemius,
our Merchant of Record, with a 14-day money-back guarantee.

### Do you offer support?

Free users can ask questions in the WordPress.org support forum. A Pro license includes
email support — write to info@australcode.io and we’ll help you get your rewards
program running.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Australcode Loyalty Program, Points and Rewards for WooCommerce” is open source
software. The following people have contributed to this plugin.

Contributors

 *   [ australcode ](https://profiles.wordpress.org/australcode/)

“Australcode Loyalty Program, Points and Rewards for WooCommerce” has been translated
into 1 locale. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/australcode-points-rewards/contributors)
for their contributions.

[Translate “Australcode Loyalty Program, Points and Rewards for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/australcode-points-rewards)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/australcode-points-rewards/),
check out the [SVN repository](https://plugins.svn.wordpress.org/australcode-points-rewards/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/australcode-points-rewards/)
by [RSS](https://plugins.trac.wordpress.org/log/australcode-points-rewards/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.5.5

 * New: `[acrwd_if_can_redeem]…[/acrwd_if_can_redeem]` shows its content only to
   customers who can redeem right now (logged in, a role that redeems, not blocked,
   and a balance that clears the redemption minimum — the same rule the cart applies)—
   for a “redeem your points in the cart” note in a header or a side cart built 
   with a page builder. Guests and customers without enough points no longer see
   it.
 * Fixed: the YITH import dry run counted every order named in the YITH log under“
   orders marked”, including deleted orders and orders already marked; it now counts
   the same orders the real run writes.
 * Tested with WooCommerce 11.2.

#### 1.5.4

 * Fixed: an order paid as a guest earned nothing when the customer created their
   account afterwards. When WooCommerce links past guest orders to the account (
   after the customer verifies their email, or from “Link previous orders” in the
   admin), each paid order in an earning status now earns its points once, under
   the “Award guest orders placed with a customer’s email” setting and for orders
   from the last 90 days. Points held by “Credit past guest orders when a customer
   registers” are released at that moment.
 * New: `wp acrwd award-order <order-id> [--dry-run]` awards the points an order
   should have earned, once, following the normal earning rules — for orders linked
   to an account before this update.
 * Improved (Pro): the “points updated” and “points expiring soon” emails follow
   WooCommerce’s email look with a greeting by first name, a short message, a summary
   box with the balance (and its money value), the next points to expire, and one
   button in your email base color — to the My Account points tab or to the shop.
   Headings and subjects use your own points label through the new `{points_label}`
   placeholder, and the plain-text versions carry the same content.
 * Fixed (Pro): the WooCommerce email preview of these two emails showed a 0-point
   adjustment; it now uses sample figures.

#### 1.5.2

 * Fixed: a page whose slug matched the My Account endpoint (e.g. /rewards/ next
   to /my-account/rewards/) showed the front page: the endpoint now uses the same
   rewrite mask as WooCommerce’s own endpoints.

#### 1.5.1

 * Fixed: after redeeming points without reloading, carts whose theme draws the 
   totals as fragments (Bricks, side carts) showed the old totals until the page
   was reloaded: the cart cookies are now set before the response.

#### 1.5.0

 * New: points can be redeemed as a coupon instead of a discount line (Settings  
   Redemption), for stores whose invoicing or other integrations only understand
   coupons. The cap, the points charged and refunds follow the discount WooCommerce
   actually applied.
 * New: choose whether coupons can be combined with points, keep items on sale out
   of what points can pay for, and measure the redemption cap on prices with tax.
 * New: choose which roles earn and which roles can redeem points (all, by default).
 * New: guest orders placed with the email of an existing account can award their
   points to that account.
 * New: the name and the address of the My Account tab are settings, and you choose
   where the redeem form goes in the cart and the checkout — including next to the
   payment methods, inside multi-step checkouts.
 * Improved: redeeming in the classic cart and checkout no longer reloads the page.
 * New: `[acrwd_earn_line]` shortcode for the “You’ll earn X points” line in cart
   and checkout summaries built with a page builder.
 * New: the YITH import brings the full history. Every entry of the YITH points 
   log becomes an entry here with its original date, order and a readable reason,
   so earned points expire counting from when they were earned. Each customer ends
   with exactly their YITH balance: when the YITH log does not add up, a visible
   balance adjustment entry closes the gap and the report lists the case. Customers
   never see the previous plugin’s name in their points history. Customers banned
   in YITH are blocked, orders that earned points in YITH are not awarded again,
   and orders paid with YITH points give them back when cancelled or refunded. The
   redemption coupons YITH generated are moved to the trash so they cannot be used
   without spending points.
 * New: `wp acrwd import yith` takes `--mode=full|balances` (full is the default;
   balances is the previous summary import) and `--batch=<n>`, shows progress and
   reports live lots and what expires in the next 30/60/90 days. It is resumable,
   also in the middle of a customer.
 * New: `wp acrwd import yith-settings [--dry-run]` and an “Import YITH settings”
   button copy the YITH options that have an equivalent (earning and redemption 
   rates, rounding, order statuses, limits, expiration, labels) and list the ones
   that do not.
 * New for developers: `acrwd_earn_expires_at` receives a third argument, `$earned_at`,
   the date a lot counts from.
 * Fixed: the Import screen said customers’ balances would be overwritten; points
   are added to what they already have.

#### 1.4.0

 * New: customers can redeem points at checkout, on both the classic and the block-
   based checkout, and the cart and checkout now show “You’ll earn X points” for
   the current order.
 * New: the storefront follows your theme’s light or dark look automatically (Auto),
   with an option to force light or dark. It replaces the old dark-mode switch; 
   stores that had it on keep a dark look.
 * New: an Appearance panel (accent colour or the theme’s own, spacing, corner radius)
   and a Wording panel to rename the key storefront messages in your own words, 
   on top of the translations.
 * New for developers: template overrides for the storefront markup (with a notice
   when a theme copy falls behind), render hooks and attributes shared by every 
   shortcode and block, and PUT/PATCH on the Pro REST routes. The Developers screen
   lists every route and hook.
 * Fixed: on the block-based checkout, orders paid partly with points were charged
   less than the checkout showed: the points discount was taxed again when the order
   was saved. The same happened after “Recalculate” on any order.
 * Fixed: refunding a product from an order paid partly with points now returns 
   only the points the money refund did not cover. Refunding only the shipping no
   longer takes points back.
 * Fixed: points spent on an order that is never paid are returned after the store’s
   hold time, and charged again if the order is paid later. Deactivating and reactivating
   the plugin no longer loses those pending returns.
 * Fixed: two checkouts at the same moment can no longer spend the same points twice,
   and a payment notice arriving twice no longer awards an order twice.
 * Fixed: returned points go back to the batch they came from, with its original
   expiry date, so expiry always takes the right amount.
 * Fixed: points from guest orders linked at sign-up are held until the customer’s
   first purchase with that account, and they are reversed if that guest order is
   later cancelled or refunded.
 * Fixed: importing from YITH adds the imported points to what the customer already
   had instead of replacing the balance.
 * Fixed: the product page now promises the points the order will really earn (it
   used the price with tax), and guests are invited to create an account instead
   of being promised points.
 * Fixed: the points line now appears in the order email that awards the points.
 * Fixed: the points history is shown in the store’s language.
 * Fixed (Pro): “Expire all points” no longer charges the same points a second time
   when the daily expiry runs, and a blocked customer no longer earns bonuses or
   redeems coupons.
 * Fixed (Pro): bonuses tied to an order are reversed if that order is cancelled
   or fully refunded, and VIP tiers are measured on points that were not later refunded.
 * Fixed (Pro): campaigns and rules use the date of purchase and the store’s time
   zone (“until” now includes the whole day); a category rule multiplies only the
   matching products; the cart-total bonus counts tax and coupons; the order milestone
   pays at every multiple, counting only paid orders.
 * Fixed (Pro): expiry reminders go out once per batch with the amount that is actually
   expiring, birthday and daily-login bonuses follow the store’s day, and refunds
   for unused expired coupons no longer stall after 200 coupons.
 * Fixed: the floating widget no longer covers the checkout on phones, can be closed,
   and has a visible keyboard focus and readable text on every theme. Several storefront
   texts and focus rings now meet contrast on Twenty Twenty-Five, Astra, Storefront
   and Bricks.
 * Fixed: the free version no longer contains any Pro code or licence check, and
   unblocking a customer works on the free version.
 * Fixed: activating Pro while the free version is active no longer fails, and switching
   from free to Pro runs its database updates.
 * Improved: the REST redemption routes now work for logged-in customers, and the
   manual adjustment route validates its input.

#### 1.3.1

 * Fixed (Pro): expiring points no longer takes points that had not expired. Points
   are now tracked as the batch they were earned in, and the daily expiry run only
   takes the batch that actually reached its date. Until now it deducted the expired
   amount from the balance as a whole, so a customer who had already spent an older
   batch could be left at zero while points earned later were still valid.
 * Fixed (Pro): moving a customer into a VIP tier no longer discards points credited
   at the same moment. An order awarding points while the tier was being recalculated
   could leave that newer credit out of the balance.
 * Fixed: the redemption screen no longer offers a discount the cart will not apply.
   With a coupon in the cart, the maximum offered and the amount actually taken 
   off were worked out two different ways, so the customer was shown one figure 
   and charged against another.
 * Fixed: “Delete all data” on uninstall now deletes all of it. Twenty-three families
   of customer data were left behind, including on stores that keep orders in the
   WooCommerce order tables.
 * Fixed: the Upgrade screen appeared in English on stores running in Spanish.
 * Improved: Spanish now ships as a single catalogue that covers every Spanish locale,
   instead of only Spain and Chile. Around twenty variants were falling back to 
   an incomplete community translation. The download is 57 KB smaller.
 * Changed: the plugin now installs on PHP 8.1. It asked for 8.2, which ruled out
   about a third of WordPress stores for no reason — nothing in the plugin or the
   libraries it ships needs 8.2.
 * Fixed (Pro): the VIP tier progress bar was invisible in block themes, where it
   filled with the theme’s own accent colour on top of that same colour.
 * Improved: several admin screens read better. Card headers waste less vertical
   space, “Settings saved” and similar confirmations use the plugin’s own notice
   style rather than the bare WordPress one, the Upgrade screen states the price
   instead of keeping it a click away, and the example amounts no longer assume 
   a currency with decimal cents.
 * Fixed: screen readers now announce which panel a Settings tab opens, and the 
   Import form no longer blocks scripts that submit it.
 * Fixed: secondary text in the storefront rewards panel failed contrast on themes
   with a tinted background.

#### 1.3.0

 * New: refunding part of an order now adjusts points in proportion, in both directions.
   Until now a full refund took back all the points an order had earned and a partial
   refund took back nothing — so refunding half an order left the customer holding
   the full points for half the sale. A partial refund now claws back the matching
   share of what the order earned, and returns the matching share of what was spent
   on it. The share is recalculated from the total amount refunded so far, so several
   partial refunds add up exactly, refunding an order piece by piece ends in the
   same place as one full refund, and re-running a refund changes nothing.
 * Fixed: refunding an order in full after a partial refund no longer takes the 
   points twice. Previously the full refund reverted the whole order without accounting
   for what the partial refund had already taken.
 * Fixed: an order that was already partly refunded before it reached the status
   that awards points now earns only the share that was actually paid. Previously
   the refund was ignored at that moment, so refunding part of an order while it
   was still processing and then completing it awarded the full points for a reduced
   sale.
 * Fixed: the points history in My Account is now paginated. It silently stopped
   at the twenty most recent movements, with no way to reach the rest and nothing
   to say the list was incomplete.
 * New: `wp acrwd recalc` rebuilds point balances from the transaction ledger, with`--
   customer` and `--dry-run`. Balances are kept as a running figure so reading them
   stays instant; if ledger rows are ever removed outside the plugin, this is what
   puts the two back in agreement.
 * Improved: the Customers screen now explains that a points balance can go below
   zero — for example when an order is refunded after the customer had already spent
   the points it earned. That is intentional rather than a fault to correct with
   a manual adjustment: the customer earns their way back up, and cannot redeem 
   again until the balance is above zero.

#### 1.2.0

 * The plugin now appears in your Plugins list as “Australcode Loyalty Program, 
   Points and Rewards for WooCommerce”. Only the display name changed — your settings,
   points, ledger and history are untouched, and nothing needs reconfiguring.
 * Fixed: on the free version, saving Settings no longer switches off “Only reward
   reviews from verified purchases”. That option is configured on Pro, and because
   its checkbox is not part of the free download, every save on free quietly reset
   it — so a store that moved between builds could start paying review points for
   unverified reviews without any sign that anything had changed.
 * Fixed: after buying Pro, the plugin no longer calls you a free user while you
   wait to install the Pro download. The dashboard said “License: Free” and the 
   menu offered “Upgrade” to someone who had already paid; it now says the license
   is active and points you at the download.
 * Fixed: on Pro, the “Manage license” button went to the pricing page — offering
   to sell you what you already own. It now opens your account.
 * Fixed: the Settings screen no longer opens scrolled past its own tab bar, which
   hid the five tabs behind the WordPress toolbar and dropped you into the middle
   of the form.
 * Fixed: the free version no longer shows two “Upgrade” entries in the plugin menu.
 * Improved: Settings now warns you before you leave with unsaved changes, instead
   of discarding them silently.
 * Improved: the Campaigns, Earning rules, Redemption rewards and Referrals tables
   now show status as a colour-coded badge instead of plain text — and a campaign
   whose dates have passed reads “Ended” rather than “Paused”, so you can tell a
   campaign you paused from one that simply finished.
 * Improved: a customer with no points yet now sees how to earn some, with your 
   store’s actual earning rate, instead of a bare “No points activity yet.”
 * New: you can now redeem points directly in the block-based cart. Until now that
   cart only showed a notice telling you to go to My Account, which meant leaving
   the cart, finding the Rewards page, applying, and coming back — five steps at
   the moment you had already decided to buy. The redeem field now sits in the Cart
   totals panel, so points are spent without leaving the cart. The amount you can
   redeem updates on its own when you change quantities.
 * Fixed: the rewards list in My Account was indented out of line with the rest 
   of the panel — noticeably so on a phone, where it took up a tenth of the width.
 * Improved: the admin screens now use the shared Australcode interface components
   throughout — form fields, dropdowns, help text and tables. Rows are tighter, 
   fields respond to hover and focus instead of changing state in a hard jump, and
   the tables read the same on a phone as the rest of the plugin.
 * Updated the Freemius licensing library to 2.13.4.

#### 1.1.0

 * Pro: a new reward type — give a free product. Pick any product and customers 
   can spend their points on it; they get one unit free at checkout, with the usual
   expiry and restrictions.
 * Fixed: after buying Pro, the free version no longer presents Pro as already active.
   Between the purchase and installing the Pro download, the plugin recognized the
   license and switched everything on — the dashboard reported “License: Pro” and
   the settings screen offered Pro options that saved but never took effect, because
   the Pro code is not part of the free download. The plugin now waits until the
   Pro version is actually installed before unlocking anything.
 * Pro: the Referrals screen no longer asks you to wait for activity when the referral
   program is switched off. Both referral bonuses ship at 0, and while they are,
   customers are never shown a link to share — so no referral could ever appear.
   The screen now says so and links to the setting.
 * Fixed: buttons across the admin screens were missing their keyboard focus outline,
   making the plugin hard to navigate without a mouse. Every button now shows a 
   visible focus ring.
 * Fixed: the CSV file picker on the Customers screen no longer overflows its panel
   on a phone.

#### 1.0.3

 * Added: a “Support Forum” link in the plugin menu, pointing at the plugin’s support
   forum on WordPress.org.
 * Improved: the License screen now shows what your Pro plan includes instead of
   an empty page, and the license box no longer overflows on narrow phones.
 * Fixed: the admin menu entry reads “License” once Pro is active, instead of still
   inviting you to upgrade.

#### 1.0.2

 * Pro: the birthday field in My Account  Account details now saves. It never did:
   the field and its security token shared one name, so the token was overwritten
   by the date and the save was rejected without any error message — no customer
   could record a birthday, and the birthday reward never reached anyone. Clicking
   the field’s label now focuses it, too.

#### 1.0.1

 * Fix: redeeming points now lowers the cart total by exactly the points’ value 
   in tax-inclusive stores. Previously the discount was inflated by the tax rate(
   e.g. it removed an extra 19% on top), because WooCommerce taxes negative fees.
   The redemption fee is now applied tax-free, so points settle the tax-inclusive
   total like a payment.

#### 1.0.0

 * Pro: advanced redemption — let customers spend points on rewards you define: 
   a fixed-amount coupon, a percentage discount or free shipping. The plugin generates
   a single-use coupon they apply at checkout (classic or block-based).
 * Pro: each reward has its own points cost, validity period, optional restrictions(
   minimum order, exclude sale items, specific categories) and a shareable/personal
   toggle.
 * Pro: points are refunded automatically if a generated reward coupon expires without
   being used.

#### 0.11.0

 * Pro: earning rules — automate points with a multiplier (e.g. 2× points) or a 
   flat bonus when an order matches conditions you set: product category, customer
   role, minimum order total and an active date range.
 * Pro: rules run by priority — the first matching rule applies — and include a 
   one-click “Test” that previews how a rule would have behaved over your recent
   orders.

#### 0.10.0

 * Pro: dedicated email that reminds customers their points are about to expire,
   a configurable number of days before (works with points expiration).
 * Pro: optional email to a customer when you manually adjust their points from 
   the Customers screen (off by default; bulk and CSV imports do not send it).
 * Both emails are standard WooCommerce emails — enable, disable and customise them
   under WooCommerce  Settings  Emails.

#### 0.9.0

 * Customers: export your customers and their points balances to a CSV file (free).
 * Pro: block or unblock a customer — a blocked customer stops earning and redeeming(
   manual admin adjustments still apply).
 * Pro: bulk actions over selected customers — add points, subtract points, expire
   all points, or block/unblock.
 * Pro: import a CSV of points adjustments (customer, points, reason), with a preview(
   dry run) before applying.
 * Customers list now shows each customer’s tier when VIP tiers are active.

#### 0.8.0

 * Pro: VIP tiers now have a colour and an optional icon, shown as a badge on the
   storefront.
 * Pro: customers see a progress bar toward their next tier in the My Account Rewards
   area (and via the [acrwd_tier] shortcode/block), with how many points are left
   to reach it.

#### 0.7.0

 * Pro: new bonus — reward customers for completing their profile (name, phone and
   billing address).
 * Pro: new bonus — reward customers when they reach a number of orders (e.g. their
   5th order).
 * Pro: new bonus — reward orders whose total reaches an amount you set, on every
   qualifying order.
 * Pro: new bonus — reward customers when their lifetime spend crosses an amount.

#### 0.6.0

 * New: round earned points down, to the nearest, or up — your choice (down by default,
   so points never exceed the rate).
 * New: award points on more than one order status — tick Processing as well as 
   Completed if you award as soon as payment clears.
 * New: choose whether points are earned on the price after coupons (default) or
   on the full price before coupons.
 * New: option to skip products that are already on sale when calculating points.
 * New: stop earning points on the part of an order paid for with redeemed points(“
   no points on points”), on by default.
 * New: credit a customer’s earlier guest orders when they create an account, matched
   by email (off by default).

#### 0.5.0

 * New: set the earning rate as a plain “for every X spent, give Y points” — no 
   decimals to decode.
 * New: a Messages tab to rewrite the storefront wording customers see (product,
   cart, redeem and order-email messages), in your own language.
 * New: show the cash value of a customer’s points balance in My Account and the[
   acrwd_balance] shortcode.
 * New: choose where the “earn points” message appears on the product page.
 * New: in-app Help (shortcodes, blocks, REST API and developer hooks) and Import(
   from YITH) admin pages.
 * New: full Spanish (Chile and Spain) translations.

#### 0.4.0

 * New: a “Display & Widgets” settings tab to turn each storefront surface on or
   off (product message, cart message, My Account Rewards tab, order email, floating
   widget), plus the floating widget’s corner.
 * New: per-role earning multipliers are now a compact add/remove list instead of
   one row per role.
 * New: shortcodes and matching Gutenberg blocks for the points balance, history,“
   earn X points” message and the redeem form — with attributes — so page builders(
   Elementor, Bricks, Divi) and the block editor can place them anywhere. Pro adds[
   acrwd_tier] and [acrwd_referral].
 * Pro: a Referrals admin report shows who referred whom and how many converted,
   and the “Refer a friend” link gains a one-click Copy button.
 * Fix: the customer search box no longer clips its placeholder text.

#### 0.3.2

 * Compliance: the free version no longer bundles the Pro feature code. VIP tiers,
   campaigns, two-sided referrals, bonus points (signup, daily login, first order,
   approved review, birthday) and points expiration now ship only in the Pro version.
   The free version is fully functional on its own.
 * Admin: the menu icon now loads its CSS through the standard WordPress enqueue
   system.

#### 0.3.1

 * Maintenance: removed the “More by Australcode” cross-promotion section from the
   Upgrade screen.

#### 0.3.0

 * Admin: the customer points history and the locked Pro previews for tiers and 
   campaigns now collapse to readable cards on mobile, matching the rest of the 
   admin.
 * Admin: refreshed admin styling — a sticky save bar on settings, clearer button
   states and responsive section headers.
 * Maintenance: streamlined the plan model to Free and Pro, and refreshed bundled
   dependencies.

#### 0.2.0

 * Admin: edit existing tiers and campaigns in place (previously delete-and-recreate).
 * Admin: the menu now shows the product glyph and full name, with inline guidance
   on the tier and campaign forms.
 * Admin: the tiers and campaigns tables now collapse to readable cards on mobile,
   so the multiplier and edit/delete actions stay reachable on small screens.
 * Frontend: the balance and history blocks now load their styles on any page (block-
   aware asset loading).
 * i18n: complete es_CL and es_ES translations, including the Australcode family
   screen.

#### 0.1.0

 * Initial release: free earning (global rate + per-product/category overrides),
   redemption, My Account rewards, product/cart messages, floating widget, custom
   labels, dark mode, shortcodes and HPOS support.
 * Pro: signup/daily-login/first-order/review/birthday bonuses, two-sided referrals,
   points expiration, unlimited tiers and campaigns, licensing via Freemius.

## Meta

 *  Version **1.5.5**
 *  Last updated **10 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 8.1 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/australcode-points-rewards/) and
   [Spanish (Chile)](https://cl.wordpress.org/plugins/australcode-points-rewards/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/australcode-points-rewards)
 * Tags
 * [Loyalty](https://kea.wordpress.org/plugins/tags/loyalty/)[loyalty program](https://kea.wordpress.org/plugins/tags/loyalty-program/)
   [points](https://kea.wordpress.org/plugins/tags/points/)[Points and Rewards](https://kea.wordpress.org/plugins/tags/points-and-rewards/)
   [Reward points](https://kea.wordpress.org/plugins/tags/reward-points/)
 *  [Advanced View](https://kea.wordpress.org/plugins/australcode-points-rewards/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/australcode-points-rewards/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/australcode-points-rewards/reviews/)

## Contributors

 *   [ australcode ](https://profiles.wordpress.org/australcode/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/australcode-points-rewards/)