{"id":330887,"date":"2026-06-27T19:07:18","date_gmt":"2026-06-27T19:07:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/australcode-points-and-rewards-for-woocommerce\/"},"modified":"2026-08-15T19:41:46","modified_gmt":"2026-08-15T19:41:46","slug":"australcode-points-rewards","status":"publish","type":"plugin","link":"https:\/\/bs.wordpress.org\/plugins\/australcode-points-rewards\/","author":23459699,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.0.4","requires":"6.5","requires_php":"8.2","requires_plugins":null,"header_name":"Australcode Loyalty Program, Points and Rewards for WooCommerce","header_author":"Australcode","header_description":"Loyalty points and rewards for WooCommerce: earn on purchases with per-product, per-category and per-role rules, redeem points for cart discounts, a My Account rewards area, a floating widget, shortcodes\/blocks and dark mode. Pro adds VIP tiers, time-boxed campaigns, signup\/daily-login\/first-order\/review\/birthday bonuses, two-sided referrals and points expiration.","assets_banners_color":"0f1110","last_updated":"2026-08-15 19:41:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/points-rewards.australcode.io","header_author_uri":"https:\/\/australcode.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":389,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"australcode","date":"2026-07-02 23:34:11"},"1.0.2":{"tag":"1.0.2","author":"australcode","date":"2026-07-14 21:27:55"},"1.0.3":{"tag":"1.0.3","author":"australcode","date":"2026-07-20 21:07:40"},"1.1.0":{"tag":"1.1.0","author":"australcode","date":"2026-07-25 00:22:20"},"1.2.0":{"tag":"1.2.0","author":"australcode","date":"2026-08-11 03:19:50"},"1.3.0":{"tag":"1.3.0","author":"australcode","date":"2026-08-15 19:41:46"}},"upgrade_notice":{"1.3.0":"<p>Partial refunds now adjust points in proportion, both the points an order earned and the points spent on it. Until now they adjusted nothing. Nothing to reconfigure, but partial refunds you issue from now on will take points back where they used to take none.<\/p>","1.2.0":"<p>Adds redemption directly in the block-based cart, so customers no longer leave the cart to spend points. Fixes a bug where saving Settings on the free version switched off a Pro review setting. The display name changes \u2014 display only, nothing to reconfigure. No breaking changes.<\/p>","1.1.0":"<p>Adds a free-product reward (Pro) and fixes the free version presenting Pro as active after a purchase, before the Pro download is installed \u2014 settings you set there never took effect. Also restores the keyboard focus outline on admin buttons. No breaking changes.<\/p>","1.0.3":"<p>Adds a &quot;Support Forum&quot; link to the plugin menu and fixes the License screen, which showed an empty page to Pro owners. No breaking changes.<\/p>","1.0.2":"<p>Pro: fixes the birthday field in My Account, which silently failed to save. If you offer a birthday reward, update \u2014 until now no customer could record a birthday for it. No breaking changes.<\/p>","1.0.1":"<p>Fixes redemption discounts being inflated by the tax rate in tax-inclusive stores. No breaking changes.<\/p>","0.4.0":"<p>New Display &amp; Widgets settings, shortcodes and blocks for every rewards surface, a Pro referrals report, and UI fixes. No breaking changes.<\/p>","0.3.2":"<p>Pro-only features now ship only in the Pro version; the free version stays fully functional. Internal compliance and styling fixes.<\/p>","0.3.0":"<p>Mobile-friendly tables across the admin and refreshed styling. No breaking changes.<\/p>","0.2.0":"<p>Edit tiers and campaigns in place, block-aware asset loading and complete es_CL\/es_ES translations.<\/p>","0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3588289,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3588289,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3622033,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3622033,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"acrwd\/balance":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"acrwd\/balance","title":"Points balance","category":"woocommerce","icon":"star-filled","description":"Shows the logged-in customer's points balance.","keywords":["points","rewards","loyalty","balance"],"textdomain":"australcode-points-rewards","attributes":{"label":{"type":"string","default":"yes"}},"supports":{"html":false},"editorScript":"file:.\/editor.js"},"acrwd\/history":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"acrwd\/history","title":"Points history","category":"woocommerce","icon":"list-view","description":"Shows the logged-in customer's recent points activity.","keywords":["points","rewards","loyalty","history","ledger"],"textdomain":"australcode-points-rewards","attributes":{"limit":{"type":"number","default":20}},"supports":{"html":false},"editorScript":"file:.\/editor.js"},"acrwd\/redeem":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"acrwd\/redeem","title":"Redeem points","category":"woocommerce","icon":"tickets-alt","description":"Shows the \u201cuse your points\u201d form for the customer's current cart.","keywords":["points","rewards","loyalty","redeem","discount"],"textdomain":"australcode-points-rewards","supports":{"html":false},"editorScript":"file:.\/editor.js"},"acrwd\/earn-message":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"acrwd\/earn-message","title":"Earn points message","category":"woocommerce","icon":"money-alt","description":"Shows how many points a product earns. Place it on a product template or page.","keywords":["points","rewards","loyalty","earn"],"textdomain":"australcode-points-rewards","attributes":{"product_id":{"type":"number","default":0}},"supports":{"html":false},"editorScript":"file:.\/editor.js"}},"tagged_versions":["1.0.1","1.0.2","1.0.3","1.1.0","1.2.0","1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3649012,"resolution":"1","location":"assets","locale":"","width":2560,"height":1440},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3649012,"resolution":"2","location":"assets","locale":"","width":2560,"height":1440},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3641296,"resolution":"3","location":"assets","locale":"","width":2560,"height":1440},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3641296,"resolution":"4","location":"assets","locale":"","width":2560,"height":1440},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3641296,"resolution":"5","location":"assets","locale":"","width":2560,"height":1440},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3649012,"resolution":"6","location":"assets","locale":"","width":2560,"height":1440},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3641296,"resolution":"7","location":"assets","locale":"","width":2560,"height":1440}},"screenshots":{"1":"Dashboard \u2014 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.","2":"My Account rewards area \u2014 customers see their balance, redeem points straight onto the current cart (no coupon code involved) and review their full earn\/redeem history.","3":"Settings \u2014 configure earning, redemption and display, with inline guidance and a recommendation for each non-obvious option.","4":"VIP tiers \u2014 reward your most loyal customers with higher earning multipliers (Pro).","5":"Customers \u2014 per-customer balances and activity, all read from fast custom tables.","6":"Campaigns \u2014 schedule limited-time earning multipliers, like a double-points weekend, that stack on your base rate (Pro).","7":"Import \u2014 migrate your customers' point balances from YITH WooCommerce Points and Rewards, with a dry-run preview before anything is written."}},"plugin_section":[],"plugin_tags":[3377,29663,2321,73290,125297],"plugin_category":[45],"plugin_contributors":[265691],"plugin_business_model":[],"class_list":["post-330887","plugin","type-plugin","status-publish","hentry","plugin_tags-loyalty","plugin_tags-loyalty-program","plugin_tags-points","plugin_tags-points-and-rewards","plugin_tags-reward-points","plugin_category-ecommerce","plugin_contributors-australcode","plugin_committers-australcode"],"banners":{"banner":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/banner-772x250.png?rev=3622033","banner_2x":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/banner-1544x500.png?rev=3622033","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/icon-128x128.png?rev=3588289","icon_2x":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/icon-256x256.png?rev=3588289","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/screenshot-1.png?rev=3649012","caption":"Dashboard \u2014 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."},{"src":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/screenshot-2.png?rev=3649012","caption":"My Account rewards area \u2014 customers see their balance, redeem points straight onto the current cart (no coupon code involved) and review their full earn\/redeem history."},{"src":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/screenshot-3.png?rev=3641296","caption":"Settings \u2014 configure earning, redemption and display, with inline guidance and a recommendation for each non-obvious option."},{"src":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/screenshot-4.png?rev=3641296","caption":"VIP tiers \u2014 reward your most loyal customers with higher earning multipliers (Pro)."},{"src":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/screenshot-5.png?rev=3641296","caption":"Customers \u2014 per-customer balances and activity, all read from fast custom tables."},{"src":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/screenshot-6.png?rev=3649012","caption":"Campaigns \u2014 schedule limited-time earning multipliers, like a double-points weekend, that stack on your base rate (Pro)."},{"src":"https:\/\/ps.w.org\/australcode-points-rewards\/assets\/screenshot-7.png?rev=3641296","caption":"Import \u2014 migrate your customers' point balances from YITH WooCommerce Points and Rewards, with a dry-run preview before anything is written."}],"raw_content":"<!--section=description-->\n<p>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 at checkout straight from that balance \u2014 no coupon codes to manage. Customers earn on every order and you control earning, redemption and display from a clean WordPress admin.<\/p>\n\n<p>Switching from another loyalty plugin? A built-in importer migrates your customers' point balances from <strong>YITH WooCommerce Points and Rewards<\/strong> \u2014 from the admin or with a WP-CLI command, dry-run included.<\/p>\n\n<p><strong>Requires:<\/strong> WordPress 6.5+ \u00b7 PHP 8.2+ \u00b7 WooCommerce 9.0+ (WooCommerce must be active).<\/p>\n\n<p><strong>Free features<\/strong><\/p>\n\n<ul>\n<li>Earn points on every order, at a rate you choose, awarded when the order is processing or completed.<\/li>\n<li>Refunds give points back proportionally: cancel an order and the whole award is reverted, refund part of it and only that share is \u2014 both for points earned and for points spent.<\/li>\n<li>Per-product and per-category earning multipliers, and per-product\/category exclusions.<\/li>\n<li>Redeem points straight from the wallet for a cart discount \u2014 no coupon code is generated \u2014 with a minimum-to-redeem and a max-percentage-of-cart cap.<\/li>\n<li>Redeem from the cart itself \u2014 in the classic cart and in the block-based cart, where the redeem field sits in the Cart totals panel.<\/li>\n<li>\"Earn X points\" message on product pages and in the cart.<\/li>\n<li>My Account rewards area with balance, lifetime totals and history.<\/li>\n<li>Optional floating points widget.<\/li>\n<li>Custom point labels (e.g. \"stars\"), accent color and an opt-in dark mode.<\/li>\n<li>Shortcodes and Gutenberg blocks \u2014 balance, history, \"earn X points\" message and redeem box (<code>[acrwd_balance]<\/code>, <code>[acrwd_history]<\/code>, <code>[acrwd_earn_message]<\/code>, <code>[acrwd_redeem]<\/code>) \u2014 place them anywhere, including Elementor, Bricks or Divi layouts.<\/li>\n<li><strong>Import from YITH WooCommerce Points and Rewards<\/strong> \u2014 admin importer plus a <code>wp acrwd import yith<\/code> WP-CLI command, both with a dry-run preview, to migrate customer balances when switching.<\/li>\n<li><strong>Rebuild balances from the ledger<\/strong> \u2014 a <code>wp acrwd recalc<\/code> 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.<\/li>\n<li>Program dashboard \u2014 points in circulation, a 30-day trend and your top earners at a glance.<\/li>\n<li>CSV export of customers with their balances.<\/li>\n<li>Earning controls: rounding mode, exclude items on sale, and guest orders linked to the customer's points once they register.<\/li>\n<li>Developer-friendly: <code>acrwd_*<\/code> actions and filters to wire points into your own logic.<\/li>\n<li>Fully translated into Spanish (es_ES and es_CL), so Spanish-speaking stores get the whole plugin in their own language.<\/li>\n<li>HPOS-compatible (WooCommerce High-Performance Order Storage).<\/li>\n<li>Built on custom tables for fast, scalable reads \u2014 no autoloaded option bloat.<\/li>\n<\/ul>\n\n<p><strong>Pro features<\/strong> (unlocked with a license)<\/p>\n\n<ul>\n<li>Extra earning bonuses: signup, daily-login streak, first order, approved review, birthday, profile completion, order-count milestone, cart-total threshold and lifetime-spend milestone.<\/li>\n<li>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.<\/li>\n<li>Advanced redemption: spend points on rewards you define \u2014 a fixed-amount coupon, a percentage discount, free shipping or a free product of your choosing \u2014 single-use, with restrictions, expiry and an automatic refund if a coupon goes unused.<\/li>\n<li>Unlimited VIP tiers with per-tier earning multipliers, storefront badges (colour + icon) and a My Account progress bar, plus time-boxed campaigns (\"double points weekend\").<\/li>\n<li>Two-sided referral program: customers share a link and both sides earn on the friend's first order.<\/li>\n<li>Pro customer management: bulk add\/subtract\/expire, CSV import of adjustments with a dry-run preview, and block\/unblock customers.<\/li>\n<li>Dedicated transactional emails: a points-expiry reminder and an optional manual-adjustment notice (standard WooCommerce emails).<\/li>\n<li>Points expiration with a configurable window.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/points-rewards.australcode.io\">Get Pro &rarr;<\/a><\/p>\n\n<h4>External services<\/h4>\n\n<p>This plugin uses Freemius to handle Pro licensing, checkout and plugin updates.\nFreemius is the Merchant of Record for the Pro plan.<\/p>\n\n<ul>\n<li><strong>What it does:<\/strong> Freemius powers the in-dashboard pricing\/checkout for the Pro\nplan and, once you own a license, activates and validates it so Pro features\ncan be unlocked on this site. It also serves automatic updates for the Pro\nbuild.<\/li>\n<li><strong>What data is sent and when:<\/strong> if you opt in on the activation screen, basic\nnon-sensitive environment data (site URL, WordPress\/PHP versions, active\nplugin\/theme) is sent to api.freemius.com to support licensing and updates.\nOpt-in is optional \u2014 a <strong>Skip<\/strong> button is shown, and the free version is fully\nfunctional without it. When you buy or activate a Pro license, your license\nkey and site identifier are sent to validate it. No personal data of your\nstore's customers is sent.<\/li>\n<li><strong>Beyond the support links below, the service is only contacted for\nlicensing\/updates of the Pro plan<\/strong> (and only after opt-in). The free version\ndoes not require contacting any external service to work.<\/li>\n<li><strong>Support links:<\/strong> the plugin menu includes a \"Support Forum\" link (to the\nplugin's forum on wordpress.org) and a \"Contact Us\" link that opens the Freemius\nsupport form in a new browser tab. The address of that link carries your site\nURL, your site's login URL, the wp-admin page you opened it from, and this\nplugin's ID, public key and version \u2014 so that information reaches Freemius when\nyou click the link, before you type anything. If your site is connected to\nFreemius (opt-in), a signed site identifier is included too. If you then fill in\nand submit the form, your name, email address and message are sent to Freemius\nso they can route the request to us.<\/li>\n<\/ul>\n\n<p>Service provider: Freemius, Inc.\nTerms of Service: https:\/\/freemius.com\/terms\/\nPrivacy Policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>australcode-points-rewards<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress. WooCommerce must be active.<\/li>\n<li>Go to <strong>Australcode Rewards \u2192 Settings<\/strong> to configure earning, redemption and display options.<\/li>\n<li>(Pro) Go to <strong>Australcode Rewards \u2192 Upgrade<\/strong> to buy or activate a Pro license \u2014 checkout and activation are handled in-dashboard by Freemius, and you can manage the license later under <strong>Australcode Rewards \u2192 Account<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%3F\"><h3>Does this plugin require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Australcode Points and Rewards extends WooCommerce and will show a notice if WooCommerce is not active.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Is it compatible with High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. It uses the WooCommerce order CRUD API and declares HPOS compatibility.<\/p><\/dd>\n<dt id=\"how%20are%20points%20stored%3F\"><h3>How are points stored?<\/h3><\/dt>\n<dd><p>In dedicated custom tables (balances and an append-only transaction ledger), so reads stay fast as your store grows.<\/p><\/dd>\n<dt id=\"can%20customers%20spend%20points%20on%20any%20order%3F\"><h3>Can customers spend points on any order?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"can%20customers%20redeem%20points%20at%20checkout%3F\"><h3>Can customers redeem points at checkout?<\/h3><\/dt>\n<dd><p>Yes \u2014 that is the default. The redeem box sits in the cart and in the My Account rewards area, and the points come straight off the order total, like a payment. Nothing generates a coupon code you then have to send, chase or clean up.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20block-based%20cart%20and%20checkout%3F\"><h3>Does it work with the block-based Cart and Checkout?<\/h3><\/dt>\n<dd><p>Yes, and the redeem field is in the cart itself in both. In the block-based cart it sits in the Cart totals panel, below the order total and the coupon accordion; in the classic cart it sits above the totals. The My Account rewards area works with both as well, and the points come off the order total either way.<\/p><\/dd>\n<dt id=\"when%20do%20points%20expire%3F\"><h3>When do points expire?<\/h3><\/dt>\n<dd><p>Never, by default. With a Pro license you can set an expiration window; points are then swept by a daily task.<\/p><\/dd>\n<dt id=\"can%20a%20points%20balance%20go%20negative%3F\"><h3>Can a points balance go negative?<\/h3><\/dt>\n<dd><p>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 \u2014 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.<\/p><\/dd>\n<dt id=\"can%20customers%20see%20their%20whole%20points%20history%3F\"><h3>Can customers see their whole points history?<\/h3><\/dt>\n<dd><p>Yes. The Rewards tab in My Account lists every movement, twenty per page, with pages to reach the rest. The ledger keeps every entry \u2014 nothing is trimmed or rolled up \u2014 so what a customer sees is the same record the shop sees.<\/p><\/dd>\n<dt id=\"i%20already%20refunded%20part%20of%20an%20order%20before%20updating.%20will%20points%20be%20adjusted%20for%20those%3F\"><h3>I already refunded part of an order before updating. Will points be adjusted for those?<\/h3><\/dt>\n<dd><p>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 \u2014 the change is recorded in the ledger like any other.<\/p><\/dd>\n<dt id=\"i%27m%20switching%20from%20yith%20woocommerce%20points%20and%20rewards%20%E2%80%94%20can%20i%20migrate%3F\"><h3>I'm switching from YITH WooCommerce Points and Rewards \u2014 can I migrate?<\/h3><\/dt>\n<dd><p>Yes. The plugin ships a dedicated YITH importer: an Import page in the admin and a <code>wp acrwd import yith<\/code> 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.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20other%20woocommerce%20loyalty%20plugins%3F\"><h3>How is this different from other WooCommerce loyalty plugins?<\/h3><\/dt>\n<dd><p>A few deliberate choices set it apart:<\/p>\n\n<ul>\n<li><strong>Redeem from a wallet, not a coupon.<\/strong> Customers spend points directly at checkout \u2014 no auto-generated coupon codes to manage or clean up.<\/li>\n<li><strong>Built on custom tables, not user meta.<\/strong> Balances and history live in dedicated, append-only ledger tables, so reads stay fast as your customer base grows.<\/li>\n<li><strong>Generous free tier.<\/strong> Earning with per-product and per-category rates, wallet redemption, the My Account area, product\/cart messaging, shortcodes and blocks, the YITH importer and dark mode are all free; Pro adds automation (an earning-rules engine, bonus events, VIP tiers, campaigns, referrals and expiration).<\/li>\n<li><strong>Clean, focused admin.<\/strong> A single, uncluttered settings area rather than a sprawl of options.<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20restyle%20the%20rewards%20surfaces%20to%20match%20my%20theme%3F\"><h3>Can I restyle the rewards surfaces to match my theme?<\/h3><\/dt>\n<dd><p>You mostly don't have to. The customer-facing surfaces inherit your theme: text color, fonts and the hairlines\/backgrounds derive from whatever the surrounding page is using, so they follow a light or a dark theme on their own. Where a block theme publishes a brand color (<code>primary<\/code>, <code>accent<\/code> or <code>accent-1<\/code>), it is picked up too.<\/p>\n\n<p>To go further, add CSS variables on <code>.acfk.acrwd-scope<\/code> \u2014 the class every rewards fragment carries:<\/p>\n\n<pre><code>.acfk.acrwd-scope { --acrwd-accent: #b3005e; }\n<\/code><\/pre>\n\n<ul>\n<li><code>--acrwd-accent<\/code> \u2014 accent for figures, the tier multiplier, the progress bar and the focus ring. Also settable without code in <strong>Settings \u2192 Display<\/strong>. Leave it unset and the theme's own brand color is used.<\/li>\n<li><code>--acrwd-fg<\/code> \u2014 text color for the rewards surfaces. Unset means \"inherit from the page\", which is almost always what you want.<\/li>\n<li><code>--acrwd-muted<\/code> \u2014 secondary text: the points value under a balance, timestamps in the history table, help lines. Unset inherits from the page at reduced emphasis.<\/li>\n<li><code>--acrwd-border<\/code> \u2014 the hairlines around cards and between history rows.<\/li>\n<li><code>--acrwd-surface<\/code> \u2014 the card background behind the balance, the redemption list and the history table.<\/li>\n<li><code>--acfk-radius<\/code>, <code>--acfk-gap<\/code>, <code>--acfk-hairline<\/code>, <code>--acfk-wash<\/code> \u2014 corner radius, spacing and the neutral lines\/backgrounds shared by every Australcode plugin on the storefront.<\/li>\n<\/ul>\n\n<p>The last three are the same four variables the built-in dark mode sets, so if you are theming a dark surface on a light theme you can set them directly instead of enabling dark mode.<\/p>\n\n<p>The floating widget keeps its own fill (<code>--acrwd-accent<\/code>, or the plugin's green) rather than inheriting the theme's, because it carries text on top and an inherited color cannot be checked for contrast in advance.<\/p><\/dd>\n<dt id=\"which%20actions%20and%20filters%20can%20i%20hook%20into%3F\"><h3>Which actions and filters can I hook into?<\/h3><\/dt>\n<dd><p>The full catalogue, with argument lists, is on the plugin's Help screen (Rewards \u2192 Help). Hooks marked (Pro) fire only when the Pro version is installed; the rest are in the free version:<\/p>\n\n<p>Filters:<\/p>\n\n<ul>\n<li><code>acrwd_earning_multiplier<\/code> \u2014 ( int $points, int $user_id, WC_Order $order ) \u2014 stack an extra multiplier on top of the base and per-role amounts.<\/li>\n<li><code>acrwd_role_earning_multiplier<\/code> \u2014 ( float $multiplier, int $user_id, string[] $roles ) \u2014 customise the per-role earning multiplier.<\/li>\n<li><code>acrwd_earning_bonus_points<\/code> \u2014 ( int $bonus, int $user_id, WC_Order $order ) \u2014 add flat bonus points after every multiplier has been applied.<\/li>\n<li><code>acrwd_order_earned_points<\/code> \u2014 ( int $fallback, WC_Order $order ) \u2014 read what an order earned (the ledger amount once awarded, otherwise a preview), to show the figure on your thank-you page.<\/li>\n<li><code>acrwd_account_endpoint<\/code> \u2014 ( string $endpoint ) \u2014 change the My Account \"Rewards\" endpoint slug.<\/li>\n<li><code>acrwd_enqueue_frontend<\/code> \u2014 ( bool $should ) \u2014 force-load the storefront CSS where the plugin cannot detect its own output, which happens with some page builders.<\/li>\n<li><code>acrwd_tier_label<\/code> \u2014 ( string $label, string $tier_id ) \u2014 supply the display label for a VIP tier if you render tiers yourself.<\/li>\n<\/ul>\n\n<p>Actions:<\/p>\n\n<ul>\n<li><code>acrwd_points_earned<\/code> \u2014 ( int $user_id, WC_Order $order ) \u2014 fires after an order's points are awarded.<\/li>\n<li><code>acrwd_points_adjusted<\/code> \u2014 ( int $user_id, int $points ) \u2014 fires after you adjust a balance by hand; the points are signed.<\/li>\n<li><code>acrwd_myaccount_after_summary<\/code> \u2014 ( int $user_id, Balance $balance ) \u2014 fires in the My Account \"Rewards\" tab after the balance summary, so you can add your own panel.<\/li>\n<li><code>acrwd_tier_changed<\/code> (Pro) \u2014 ( int $user_id, ?Tier $tier ) \u2014 fires when a customer's VIP tier changes; <code>$tier<\/code> is null when they drop below the lowest one.<\/li>\n<li><code>acrwd_email_points_expiring<\/code> (Pro) \u2014 ( int $user_id, int $points, string $expires ) \u2014 fires per customer when the expiry reminder runs, to send your own notification.<\/li>\n<\/ul><\/dd>\n<dt id=\"what%20happens%20if%20my%20pro%20license%20lapses%3F\"><h3>What happens if my Pro license lapses?<\/h3><\/dt>\n<dd><p>The free version keeps running and your points, ledger and history stay untouched \u2014 the Pro features switch off until you renew. 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.<\/p><\/dd>\n<dt id=\"do%20you%20offer%20support%3F\"><h3>Do you offer support?<\/h3><\/dt>\n<dd><p>Free users can ask questions in the WordPress.org support forum. A Pro license includes email support \u2014 write to info@australcode.io and we'll help you get your rewards program running.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>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 \u2014 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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>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.<\/li>\n<li>New: <code>wp acrwd recalc<\/code> rebuilds point balances from the transaction ledger, with <code>--customer<\/code> and <code>--dry-run<\/code>. 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.<\/li>\n<li>Improved: the Customers screen now explains that a points balance can go below zero \u2014 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.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>The plugin now appears in your Plugins list as \"Australcode Loyalty Program, Points and Rewards for WooCommerce\". Only the display name changed \u2014 your settings, points, ledger and history are untouched, and nothing needs reconfiguring.<\/li>\n<li>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 \u2014 so a store that moved between builds could start paying review points for unverified reviews without any sign that anything had changed.<\/li>\n<li>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.<\/li>\n<li>Fixed: on Pro, the \"Manage license\" button went to the pricing page \u2014 offering to sell you what you already own. It now opens your account.<\/li>\n<li>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.<\/li>\n<li>Fixed: the free version no longer shows two \"Upgrade\" entries in the plugin menu.<\/li>\n<li>Improved: Settings now warns you before you leave with unsaved changes, instead of discarding them silently.<\/li>\n<li>Improved: the Campaigns, Earning rules, Redemption rewards and Referrals tables now show status as a colour-coded badge instead of plain text \u2014 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.<\/li>\n<li>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.\"<\/li>\n<li>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 \u2014 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.<\/li>\n<li>Fixed: the rewards list in My Account was indented out of line with the rest of the panel \u2014 noticeably so on a phone, where it took up a tenth of the width.<\/li>\n<li>Improved: the admin screens now use the shared Australcode interface components throughout \u2014 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.<\/li>\n<li>Updated the Freemius licensing library to 2.13.4.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Pro: a new reward type \u2014 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.<\/li>\n<li>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 \u2014 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.<\/li>\n<li>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 \u2014 so no referral could ever appear. The screen now says so and links to the setting.<\/li>\n<li>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.<\/li>\n<li>Fixed: the CSV file picker on the Customers screen no longer overflows its panel on a phone.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Added: a \"Support Forum\" link in the plugin menu, pointing at the plugin's support forum on WordPress.org.<\/li>\n<li>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.<\/li>\n<li>Fixed: the admin menu entry reads \"License\" once Pro is active, instead of still inviting you to upgrade.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Pro: the birthday field in My Account \u2192 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 \u2014 no customer could record a birthday, and the birthday reward never reached anyone. Clicking the field's label now focuses it, too.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Pro: advanced redemption \u2014 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).<\/li>\n<li>Pro: each reward has its own points cost, validity period, optional restrictions (minimum order, exclude sale items, specific categories) and a shareable\/personal toggle.<\/li>\n<li>Pro: points are refunded automatically if a generated reward coupon expires without being used.<\/li>\n<\/ul>\n\n<h4>0.11.0<\/h4>\n\n<ul>\n<li>Pro: earning rules \u2014 automate points with a multiplier (e.g. 2\u00d7 points) or a flat bonus when an order matches conditions you set: product category, customer role, minimum order total and an active date range.<\/li>\n<li>Pro: rules run by priority \u2014 the first matching rule applies \u2014 and include a one-click \u201cTest\u201d that previews how a rule would have behaved over your recent orders.<\/li>\n<\/ul>\n\n<h4>0.10.0<\/h4>\n\n<ul>\n<li>Pro: dedicated email that reminds customers their points are about to expire, a configurable number of days before (works with points expiration).<\/li>\n<li>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).<\/li>\n<li>Both emails are standard WooCommerce emails \u2014 enable, disable and customise them under WooCommerce \u2192 Settings \u2192 Emails.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Customers: export your customers and their points balances to a CSV file (free).<\/li>\n<li>Pro: block or unblock a customer \u2014 a blocked customer stops earning and redeeming (manual admin adjustments still apply).<\/li>\n<li>Pro: bulk actions over selected customers \u2014 add points, subtract points, expire all points, or block\/unblock.<\/li>\n<li>Pro: import a CSV of points adjustments (customer, points, reason), with a preview (dry run) before applying.<\/li>\n<li>Customers list now shows each customer's tier when VIP tiers are active.<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Pro: VIP tiers now have a colour and an optional icon, shown as a badge on the storefront.<\/li>\n<li>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.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Pro: new bonus \u2014 reward customers for completing their profile (name, phone and billing address).<\/li>\n<li>Pro: new bonus \u2014 reward customers when they reach a number of orders (e.g. their 5th order).<\/li>\n<li>Pro: new bonus \u2014 reward orders whose total reaches an amount you set, on every qualifying order.<\/li>\n<li>Pro: new bonus \u2014 reward customers when their lifetime spend crosses an amount.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>New: round earned points down, to the nearest, or up \u2014 your choice (down by default, so points never exceed the rate).<\/li>\n<li>New: award points on more than one order status \u2014 tick Processing as well as Completed if you award as soon as payment clears.<\/li>\n<li>New: choose whether points are earned on the price after coupons (default) or on the full price before coupons.<\/li>\n<li>New: option to skip products that are already on sale when calculating points.<\/li>\n<li>New: stop earning points on the part of an order paid for with redeemed points (\"no points on points\"), on by default.<\/li>\n<li>New: credit a customer's earlier guest orders when they create an account, matched by email (off by default).<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>New: set the earning rate as a plain \"for every X spent, give Y points\" \u2014 no decimals to decode.<\/li>\n<li>New: a Messages tab to rewrite the storefront wording customers see (product, cart, redeem and order-email messages), in your own language.<\/li>\n<li>New: show the cash value of a customer's points balance in My Account and the [acrwd_balance] shortcode.<\/li>\n<li>New: choose where the \"earn points\" message appears on the product page.<\/li>\n<li>New: in-app Help (shortcodes, blocks, REST API and developer hooks) and Import (from YITH) admin pages.<\/li>\n<li>New: full Spanish (Chile and Spain) translations.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>New: a \"Display &amp; 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.<\/li>\n<li>New: per-role earning multipliers are now a compact add\/remove list instead of one row per role.<\/li>\n<li>New: shortcodes and matching Gutenberg blocks for the points balance, history, \"earn X points\" message and the redeem form \u2014 with attributes \u2014 so page builders (Elementor, Bricks, Divi) and the block editor can place them anywhere. Pro adds [acrwd_tier] and [acrwd_referral].<\/li>\n<li>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.<\/li>\n<li>Fix: the customer search box no longer clips its placeholder text.<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>Admin: the menu icon now loads its CSS through the standard WordPress enqueue system.<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Maintenance: removed the \"More by Australcode\" cross-promotion section from the Upgrade screen.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>Admin: refreshed admin styling \u2014 a sticky save bar on settings, clearer button states and responsive section headers.<\/li>\n<li>Maintenance: streamlined the plan model to Free and Pro, and refreshed bundled dependencies.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Admin: edit existing tiers and campaigns in place (previously delete-and-recreate).<\/li>\n<li>Admin: the menu now shows the product glyph and full name, with inline guidance on the tier and campaign forms.<\/li>\n<li>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.<\/li>\n<li>Frontend: the balance and history blocks now load their styles on any page (block-aware asset loading).<\/li>\n<li>i18n: complete es_CL and es_ES translations, including the Australcode family screen.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<li>Pro: signup\/daily-login\/first-order\/review\/birthday bonuses, two-sided referrals, points expiration, unlimited tiers and campaigns, licensing via Freemius.<\/li>\n<\/ul>","raw_excerpt":"Loyalty points for WooCommerce: earn on every order, redeem from a wallet \u2014 no coupon codes. Switching from YITH? Import your balances.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/330887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=330887"}],"author":[{"embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/australcode"}],"wp:attachment":[{"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=330887"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=330887"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=330887"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=330887"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=330887"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=330887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}