=== NeoGrow: Loyalty Points, Rewards Program & Photo Reviews for WooCommerce ===
Contributors: mtpamir
Tags: woocommerce, loyalty program, points and rewards, product reviews, photo reviews
Requires at least: 6.6
Requires Plugins: woocommerce
Tested up to: 7.1
Requires PHP: 7.4
WC requires at least: 8.0
WC tested up to: 11.0
Stable tag: 1.2.21
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Turn first-time buyers into repeat customers. Reward purchases and photo reviews with points they spend at checkout. Free, with nothing metered.

== Description ==

NeoGrow is a free WooCommerce plugin that gives customers loyalty points for buying and for leaving photo reviews, which they spend as a discount at checkout. Everything runs on your own store — no account, no subscription, nothing metered.

**Tested on 250+ of the most popular WooCommerce themes**, including Astra, Kadence, Storefront, OceanWP, Blocksy, Twenty Twenty-Five and the premium WoodMart and Divi, in a real browser on a real store. [See the full theme compatibility list](https://neoplugin.com/product/neogrow-theme-compatibility).

**Works with Elementor, free and Pro.** Four NeoGrow widgets, all free: Product Points, Product Reviews, Points Balance and Points Redemption. And on product pages built with Elementor Pro's Theme Builder, the points message appears by itself, with nothing to add.

### What changes on your store

Activate it and these appear by themselves. Nothing to paste in, no block to place, no shortcode to find:

* **Product pages** — a line under the price: "Earn 50 points with this item."
* **The review form** — an Upload Photo button, a review title field, and what a review is worth in points.
* **Published reviews** — customer photos in a lightbox, a Helpful button, and a way to report a review.
* **Cart and checkout** — a panel where the customer spends points for a discount off the total. The block Cart and Checkout are covered as well as the classic ones.
* **My Account** — a balance, what it is worth, and a full points history.
* **The order-received page** — how many points that order earned.
* **Your order emails** — the same line, added to the emails WooCommerce already sends. NeoGrow sends no email of its own unless you switch review reminders on.

Four of those stay invisible until a customer actually has points, so a brand-new store looks quiet at first. That is correct, not broken — and **Marketing > NeoGrow > On your store** lists every change, says whether it is live, and will show you each one on your own storefront using a sample balance.

**NeoGrow helps a WooCommerce store sell more without cutting its prices**, with the two things that actually move revenue: reviews that convince a stranger to place a first order, and points that bring that customer back for a second one.

Picture a shopper comparing your product with a cheaper one somewhere else. The cheaper page has no reviews. Yours has forty, several with photographs. Most people pay the difference, because forty strangers with nothing to gain are more persuasive than any product description you could write.

That is the whole idea. Your price can be undercut tomorrow morning. Your reputation cannot be copied at all.

### What it does for your revenue

**1. It gets you the reviews that do the selling.**
Customers will happily photograph what they bought — they just need a reason to bother. NeoGrow pays them in points for a review, and pays more for one with a photo. Published research from Northwestern University's Spiegel Research Center found a product showing five reviews was 270% more likely to be purchased than the same product showing none, and that the lift was larger on higher-priced products than on cheap ones. Reviews are worth more to you the more you charge.

**2. It gets you the second order.**
Roughly a quarter of first-time customers ever come back on their own. A points balance waiting in the basket is a concrete reason to return, and once a customer has ordered twice, the odds of a third rise sharply.

**3. It stops you competing on price.**
Discounting takes margin off every order, permanently, and any competitor can match it. A library of real reviews takes effort once per product and cannot be copied. NeoGrow is how you build that library on purpose rather than hoping for it.

**4. It costs nothing to run, at any size.**
Hosted review and loyalty platforms charge by review requests sent, contacts stored, or minutes of video kept — so a good year raises your bill. NeoGrow is free and unlimited. Ten customers or ten thousand, the price is the same.

*More on the research behind this, with sources: [Why product reviews matter more than price in WooCommerce](https://neoplugin.com/blog/why-product-reviews-matter-more-than-price-in-woocommerce).*

### Why NeoGrow rather than a monthly subscription

**Nothing sits between the review and the reward.**
Elsewhere this takes two plugins wired together: one collects reviews, the other hands out points and watches for them. That join is fragile, and when it quietly breaks you find out from a customer who was promised points and never got them. NeoGrow does both jobs itself, so there is no join to break.

**You keep everything if you stop.**
Reviews, photos and every point balance sit in your own database. No account, no licence key, no company holding a copy — so cancelling a subscription never empties your product pages.

**It gives away what you meant to give away.**
Points are earned on the order subtotal, so tax and postage never inflate what you hand out, and multi-currency orders convert through the exchange rate that order actually used. Both are pinned by tests.

**Built for AI-first commerce — coming soon.**
Answer engines read structured data rather than pages. [NeoSEO](https://neoplugin.com/product/neoseo), a separate free plugin in development, turns NeoGrow's reviews into `Review` and `AggregateRating` markup. NeoGrow works fully without it.

https://youtu.be/Oq2QNXUuZS4

### Features

Everything below is in the free plugin, with no limits on reviews, photos, customers or points.

**Loyalty points**

* **Points for purchases.** Set a rate such as 1 point per $1 spent. Points are earned on the order subtotal — never on tax, shipping or fees — and credited when the order is marked Completed.
* **Spent at checkout.** The customer enters how many points to use and the discount comes off the total live, on block and classic Cart and Checkout alike. A "Max discount per order" setting caps how much points can pay for.
* **Expiry.** Points last 6 months, and the oldest are always spent first. Choosing your own window, or switching expiry off, is part of NeoGrow Pro.
* **Correct on multi-currency stores.** Points are calculated against your base currency, and the discount is shown in the currency the customer is browsing. WooPayments, CURCY and FOX work with no configuration; other switchers connect through two documented filters. If NeoGrow cannot read a switcher's rate, it tells you.
* **Fast on a busy store.** Points live in the plugin's own database tables, and it is fully compatible with WooCommerce's High-Performance Order Storage.

**Photo reviews**

* **Upload Photo on your theme's own review form**, with no replacement form or widget, and the size limit your server accepts shown beside the button.
* **A review title field**, so reviews read like reviews rather than comments.
* **Points for a review, more for one with a photo.** Credited when you approve the review, and never dependent on the rating given.
* **Photos shown with the review**, opened full size in a lightbox.
* **Helpful votes**, with a count on each review.
* **Report a review.** One report per person per review, at most ten a day, so one visitor cannot bury a review.
* **A disclosure statement above the form** saying customers can earn points for reviewing. Editable, accepts `{product_name}`, and can be switched off.
* **Moderation where you already work** — WooCommerce's Product Reviews screen, with the customer's photo and a column of open reports.

**Review reminders — off by default**

* **An email a set number of days after an order completes**, listing only the products not yet reviewed, quoting what a review could earn, with a one-click opt-out.
* **An ordinary WooCommerce email**, edited under WooCommerce > Settings > Emails like every other one.
* **A column on the Orders screen** showing whether a reminder went out, with a button to send one by hand.
* **Never reaches backwards.** Only orders completed after you switch it on are emailed, and NeoGrow stands down where WooCommerce core already sends its own review request.

**Running it**

* **Setup wizard.** Two minutes from activation to a live programme.
* **Growth dashboard.** Orders needing action and reviews awaiting approval, each linked, above points issued, points spent and photo-review performance.
* **On your store.** Every storefront change, whether it is live, and a preview of each as a customer with a sample balance. It also flags what might hide a change: a page cache, an unreadable currency rate, a block theme, or another points plugin.
* **Points log.** Every point earned, spent, expired or adjusted, searchable by name, login or email.
* **Manual adjustment** from Users > Edit User, with a reason recorded in the log.
* **Branding.** Match the plugin's colours to your store.
* **Explainer videos.** A play button beside storefront settings opens a short clip of what that setting does.
* **Site Health checks and admin notices** for page-cache and currency-rate problems.

**Privacy and developers**

* **Privacy tools.** Nothing leaves your server, and helpful votes and review reports are included in WordPress's personal data export and erasure tools.
* **Four shortcodes**: `[neogrow_product_points]` (the points message, anywhere — add `id="123"` for a specific product), `[neogrow_points_balance]`, `[neogrow_points]` and `[neogrow_cart_redemption]`. They work in Divi, Bricks, Oxygen, Beaver Builder or any theme.
* **Four Elementor widgets**, in their own NeoGrow panel: Product Points, Product Reviews, Points Balance and Points Redemption. They work with Elementor's free version and never cache one customer's balance for another.
* **A documented developer API.** The `NeoGrow\API\Points` class plus hooks and filters — rename "points" store-wide, change what an order earns on, or supply a membership tier.

### NeoGrow Pro

NeoGrow Pro is a separate, paid add-on, **coming soon**. Everything above stays free and keeps working without it. Pro adds:

* ✅ Multiple photos per review
* ✅ Video reviews
* ✅ Limits on photos and videos per review, with a size cap for each
* ✅ Extra points for a review with a video
* ✅ A media gallery at the top of the reviews tab, each photo or video opening beside its review
* ✅ Photo and video previews on the Product Reviews screen
* ✅ An Amazon-style rating breakdown bar above the reviews
* ✅ A detailed rating summary popup
* ✅ Filter reviews by star rating, by photos or video, and by verified buyers
* ✅ Sort reviews by highest rated, lowest rated, newest, oldest, with photos first, or most helpful
* ✅ Reviewer badges such as Top Reviewer and Photo Reviewer, with your own thresholds
* ✅ Green review stars in place of the default colour
* ✅ Import reviews from a WooCommerce CSV file, with a dry run and duplicate detection
* ✅ Editable review reminder emails that tell the customer what a review is worth in points
* ✅ A follow-up review reminder with its own delay, subject and wording
* ✅ Leave chosen user roles out of review reminders
* ✅ A review campaign that invites customers from past orders, with a preview before anything sends
* ✅ Choose your own points expiry window, or switch expiry off
* ✅ Points taken back automatically when an order is refunded or cancelled
* ✅ Bonus points for a customer's first purchase
* ✅ Bonus points for registering and for completing a profile
* ✅ A minimum cart total and a minimum number of points before points can be spent
* ✅ A maximum discount from points, as an amount or as a share of the order
* ✅ A Growth dashboard comparing each figure with the previous period, members against everyone else, with suggested next steps
* ✅ CSV export of dashboard reports
* ✅ Automatic updates through your WooCommerce Marketplace licence

### Documentation
For setup guides, the full list of hooks and filters, and advanced configuration, please visit our official documentation:
[NeoGrow documentation](https://neoplugin.com/docs/neogrow/)

== External services ==

This plugin does not connect to any external service during normal operation. Your store data, points ledger and review photos never leave your server.

There is exactly one optional exception:

**Deactivation feedback survey (neoplugin.com)**

When you deactivate this plugin from the Plugins screen, a short survey asks why. It is entirely optional — "Skip & Deactivate" and "Cancel" send nothing, and selecting "It's only temporary / troubleshooting" sends nothing.

If you choose to submit the survey, your answer is sent from your server to `https://neoplugin.com/neo-deactivation/receiver.php`. The request is made by your site, not by your browser.

* **Always sent when you submit:** the plugin slug, the plugin version, the reason you selected, and any free-text comment you typed.
* **Only sent if you tick the consent box** (unticked by default): your site URL, WordPress version, PHP version, WooCommerce version, whether HPOS is enabled, your active theme name, the folder names of your active plugins, your site locale, and the number of days the plugin has been installed.

No personal data about your customers, no order data and no points data are ever transmitted.

This service is provided by NeoPlugin. Terms: https://neoplugin.com/terms/ — Privacy policy: https://neoplugin.com/privacy-policy/

== Installation ==

1. Upload the plugin files to the `/wp-content/plugins/neogrow-loyalty` directory, or install through the WordPress plugins screen.
2. Activate the plugin. A notice on the Plugins screen offers the 2-minute **Setup Wizard** — click **Set up NeoGrow**.
3. Set your point values and review rewards. You can run the wizard again any time from **Marketing > NeoGrow > Guide**.
4. Navigate to **Marketing > NeoGrow** to fine-tune your configuration or design.

== Frequently Asked Questions ==

= I installed it. What actually changed? =

Seven things, most of them without any setup at all. Product pages show what each item earns. The review form takes photographs. Published reviews gain those photos, a Helpful button and a report link. The cart and checkout gain a panel for spending points. My Account gains a balance and a full history. The order-received page and your order emails both report the points earned.

Four of those are invisible until somebody has points, which is why a new store can look as though nothing happened. Go to **Marketing > NeoGrow > On your store**: it lists every change, tells you whether each one is live, and will show you any of them on your own storefront using a sample balance — without writing anything to your points history or letting a customer see it.

= Will this actually increase my sales? =
It works on the two moments where sales are won or lost. The first is a stranger deciding whether to trust you: research from Northwestern University's Spiegel Research Center found a product showing five reviews was 270% more likely to be purchased than the same product showing none, and NeoGrow's job is to get those reviews written by making it worth a customer's while. The second is whether that customer ever comes back — most do not, unless they have a reason. A points balance waiting in their basket is a reason.

Nothing here is magic, and no plugin can promise a number. What it can do is make the two things that reliably drive revenue happen on purpose rather than by luck.

= Won't giving away points just cost me money? =
It is a real cost, and the right question to ask. Three things keep it in your favour. You set the earn rate yourself, so you decide what a point is worth before a single one is issued. Points are calculated on the order subtotal, so you never pay out on tax or postage. And a point only becomes a discount when the customer returns to spend it — which means the cost lands on an order you would not otherwise have had.

= How many reviews do I need before it makes a difference? =
Fewer than most people expect. The measured conversion benefit largely arrives with the first five reviews on a product, so the urgent gap to close is five rather than five hundred. Confidence keeps climbing after that, so treat five as the starting line.

= Won't a bad review hurt my sales? =
Less than a spotless page does. Purchase likelihood peaks around 4.0 to 4.7 stars and falls as a rating nears a perfect 5.0, because shoppers read flawless as edited. NeoGrow rewards a customer for writing a review, never for the rating they give, so you are never in the position of having paid for five stars.

= Where is the NeoGrow menu? =
NeoGrow lives under **Marketing > NeoGrow**, alongside WooCommerce's own marketing tools. If the WooCommerce Marketing menu is disabled on your site, it appears under **WooCommerce > NeoGrow** instead. Direct links to `admin.php?page=neogrow` keep working either way.

= How does NeoGrow affect my site speed? =
NeoGrow is built for scale. Point calculations run against the plugin's own purpose-built database table rather than the general-purpose ones WordPress uses for everything else, so even with thousands of active customers your checkout stays quick and your server load stays low.

= Does NeoGrow work with the Cart and Checkout blocks? =
Yes. The redemption panel appears automatically in both the block-based Cart and Checkout and the classic shortcode versions, with no setup needed. Points are applied through the WooCommerce Store API, so the order totals update live without a page reload.

The [neogrow_cart_redemption] shortcode is still available if you want to place the form somewhere else, such as a custom landing page.

= Why is the redemption form hidden for some users? =
To maintain a clean and high-converting checkout experience, NeoGrow intelligently hides the redemption form if:

* The user is a Guest (not logged in).
* The user has a 0 point balance.
We believe in showing users only the actions they can actually take.

= Can I customize the look of the "Redeem" form? =
Absolutely. NeoGrow is designed to inherit your theme's styling for buttons and inputs automatically. If you need more granular control, the form is wrapped in unique CSS classes (.neogrow-redemption-wrap), allowing you to apply custom styles without editing core files.

= Points weren't awarded after a purchase! =
Please verify three things:

* Is the Order Status set to Completed? (Points are issued upon successful completion).
* Was the user logged in during checkout? (Guest checkouts cannot track point history).
* Have you saved your settings? Ensure you’ve clicked "Save" in the NeoGrow dashboard at least once to initialize the engine.

= Images aren't uploading to reviews! =
Ensure your `/wp-content/uploads/` directory is writable. Also, check that the image size doesn't exceed your server's maximum upload limit.

= Why don't my dashboard stats update immediately? =
To ensure high performance, NeoGrow caches dashboard statistics for **one hour**. Your live points data is safe; the analytics just take a moment to refresh.

= Does NeoGrow count my past reviews or orders? =
No. NeoGrow starts tracking from the moment it is activated. It is not retroactive. You can use the "Manual Adjustment" feature to reward long-time customers if needed.

= Are Shipping/Taxes included in points? =
No. Points are calculated on the order **subtotal** — the value of the products themselves — so tax, shipping and fees never earn points. Sale prices are already reflected in the subtotal. Coupon discounts are not, so a coupon does not reduce what a customer earns; the `neogrow_earn_base_amount` filter lets you change that if you would rather it did.

= What happens if I refund an order? =
Points are not adjusted automatically. Go to **Users > Edit User** to add or remove points by hand, with a reason recorded in the Points Log. Automatic adjustment on refund and cancellation is available in NeoGrow Pro.

= Do points expire? =
Yes. Points expire 6 months after they were earned. NeoGrow uses a **FIFO (First-In, First-Out)** system, so the oldest points are always spent first. Setting your own expiry window, or turning expiry off entirely, is available in NeoGrow Pro, a separate add-on.

= Can I reward customers for their birthdays? =
NeoGrow is designed to work seamlessly with **[NeoLite Birthday Bash](https://wordpress.org/plugins/birthday-bash/)**. While NeoGrow handles the points engine, Birthday Bash automates the 'Happy Birthday' rewards, creating a complete retention loop for your store.

= What is the notice above the review form? =
NeoGrow pays points for reviews, and in several markets an incentivised review programme is expected to say so — the disclosure protects you, the merchant. Since 1.2.5 a short statement sits directly above the review form: "Customers can earn points for leaving a review on this store." You can edit the wording — or switch the disclosure off with the "Show Review Disclosure" toggle — under Marketing > NeoGrow > Settings, and it only appears while review points are actually switched on — zero both review point options and it disappears.

= Is it compatible with my Theme? =
Almost certainly, and we test rather than assume. NeoGrow is run against the most-installed WooCommerce themes on WordPress.org before each release, in a real browser on a real store, checking the seven places its output has to appear: the points message on a product page, review titles and customer photos, the photo upload control, the redemption panel on the cart and at checkout, the points-earned notice after an order, and the balance card on My Account.

**254 themes verified so far, including the premium WoodMart and Divi themes, every one of the seven surfaces present on each, and on none of them do points, redemption or My Account fail.** That includes the themes that override WooCommerce's own templates — the case most likely to break a plugin — and the block themes.

The full list, with each theme's install count, is at [neoplugin.com/product/neogrow-theme-compatibility](https://neoplugin.com/product/neogrow-theme-compatibility) and is regenerated from the test results after every sweep.

If your theme is not on the list, that means it has not been tested yet, not that it does not work: NeoGrow renders through standard WooCommerce hooks, so any theme that fires them works. Ask and we will add yours.

= Does NeoGrow work with Elementor? =
Yes, with the free version and with Elementor Pro, and nothing needs setting up.

On Elementor Pro product templates, the "Earn N points" message appears above the add-to-cart button by itself. Reviews, review photos, the cart and checkout redemption panel, the thank-you notice and the My Account balance all work through Elementor Pro's own Product Data Tabs, Cart, Checkout and My Account widgets. We test that layout in a real browser before each release.

To place things yourself, open the **NeoGrow** category in the Elementor panel:

* **Product Points** — the points message, anywhere on a product template or for a chosen product on any page. Placing it switches the automatic position off, so it never shows twice.
* **Product Reviews** — reviews, the review form, customer photos and review titles, for templates without Elementor's Product Data Tabs widget.
* **Points Balance** — the customer's balance for headers and account pages, with a choice of what logged-out visitors see.
* **Points Redemption** — the redeem-points form for custom cart and checkout layouts.

All four are free and fully working, without Elementor Pro. In the editor they show a sample, so you can style them without a customer account. Using another builder? The same four things are available as shortcodes.

= Still have questions? =
Our engineers are here to help! Please open a ticket in the WordPress.org support forum, and we’ll help you get NeoGrow running perfectly on your store.

== Screenshots ==

1. **On your product pages** - a line under the price telling the shopper what that item earns.
2. **In the cart and at checkout** - the panel where a customer spends points for a discount off the total. Block and classic both.
3. **Under a product's reviews** - customer photographs, shown with the review they came from.
4. **The photo lightbox** - a customer's photograph opened full size.
5. **On your review form** - the Upload Photo button, added to your own theme's form.
6. **In My Account** - the balance, what it is worth, and the full points history.
7. **Growth Dashboard** - Visualize your points economy and retention trends.
8. **Setup Wizard** - 2-minute onboarding to get your program live.
9. **Point Value Settings** - Define your earning and redemption rates.
10. **Review Reward Rules** - Incentivize photos with higher point rewards.
11. **Admin Settings** - Fine-tune your loyalty program configuration and global rules.
12. **Manual Points Adjustment** - Easily add or subtract points with log notes.
13. **Global Transaction Log** - Full audit trail of every point movement.
14. **Branding & Design** - Match the plugin's UI to your store's colors.

== Changelog ==

= 1.2.21 =
* Fix: The points history in My Account labelled every review reward as an order ("Review Earn (Order #482)"), using the review's ID as an order number. It pointed customers at an order that did not exist, or at a different order of their own. Review rewards now name the product reviewed and link to the review; purchases and redemptions show the store's order number and link to the order.
* Fix: Event names in the points history and the admin points log can now be translated. They were built from internal keys and always appeared in English.
* Changed: The admin points log shows the order or review each entry refers to, linked to its edit screen.
* Developer: New filter `neogrow_ledger_event_types` - add-ons that write their own points events name them and say what their reference ID points at. Extension API 2.4.

= 1.2.20 =
* New: An admin notice when another review plugin has taken WooCommerce's product reviews over and switched NeoGrow's review features off. It names the plugin, lists exactly what stopped and what still works, and links to the one setting that restores them. It covers Customer Reviews for WooCommerce set to its "CusRev (enhanced)" visual style, and Site Reviews with its WooCommerce integration on. Both plugins at their default settings leave NeoGrow working, and the notice stays silent. Admin only and dismissible.

= 1.2.19 =
* Performance: On stores running Elementor, NeoGrow's four Elementor widgets now load only on pages that use them. Elementor asks every add-on for its widgets on every page, including pages not built with Elementor, so 1.2.18 loaded all four on every page view. Pages with a NeoGrow widget, and the Elementor editor, are unchanged.
* Changed: Translations load the way WordPress.org recommends for hosted plugins. NeoGrow no longer loads its own translation files; WordPress installs and loads the language packs from translate.wordpress.org. Nothing changes for your store.
* Developer: New filter `neogrow_elementor_lazy_widgets` - return false to register the widgets on every request, as 1.2.18 did. Extension API 2.3.

= 1.2.18 =
* New: Four Elementor widgets in a NeoGrow panel category — Product Points, Product Reviews, Points Balance and Points Redemption. Free, fully working with Elementor's free version, with style controls that start from your NeoGrow design settings. They show a sample in the editor and are never cached across customers.
* New: The `[neogrow_product_points]` shortcode places the points message anywhere, for the current product or `id="123"`. Useful in Divi, Bricks, Oxygen and custom layouts.
* Fix: The "Earn N points with this item!" message now appears on product pages built with a page builder. Elementor Pro's Theme Builder, and other builders that rebuild the product page from widgets, skip the place in the page WooCommerce normally provides for it, so the message was silently missing. It now shows directly above the add-to-cart button on those pages, and still updates when a shopper picks a variation. Themes that already showed it are unchanged.
* Fix: The "Apply Points" button label is readable on Hello Elementor and other themes that colour every button. It now always uses white text on your NeoGrow button colour, instead of the theme's own text colour.
* Developer: New filter `neogrow_product_message_fallback_hooks` to move or switch off that fallback position. Extension API 2.2.

= 1.2.17 =
* Fix: A review title is no longer lost when the review form appears outside an ordinary product page - a page-builder product template, a page that embeds a product's reviews, or anywhere the photo upload field is not shown. The title used to save only alongside the upload field's security check, so wherever that field was missing the customer could type a title and it was silently dropped. The title field now carries its own check and saves wherever it appears. Product pages behave exactly as before.

= 1.2.16 =
* Fix: Reviews written on WooCommerce's own Review Order page - the page its review request email links to - now earn points. WooCommerce writes those reviews without the hooks NeoGrow listens on, and usually without a user, so an auto-approved review from that page was never paid and a held one was paid to nobody. NeoGrow now records the order's account holder against the review and pays them: at once when the review is approved automatically, or when you approve it.
* Fix: The points line NeoGrow adds to that email no longer promises the photo rate. The page it links to collects stars and text only, so the line now quotes the text reward, and only on orders that belong to an account - a guest has no balance for points to land in.
* Developer: New filter `neogrow_review_text_points_quote`, the per-customer seam for the text-only quote. A review from that page can be paid to a customer whose review carries no `user_id`; the account holder is in the comment meta `_neogrow_review_customer`. Extension API 2.1.

= 1.2.15 =
* Fix: The star rating shows again in the review list on themes that keep WooCommerce's own review markup - Storefront and Twenty Twenty-Five among them. Since 1.2.7 the review layout let the stars shrink to nothing wide, so a review showed its title, text and photo but no stars. The rating was still read out to screen readers and still counted toward the product average. Astra, and other themes that wrap the stars in an element of their own, were never affected.

= 1.2.14 =
* Changed: Review rewards are simpler. A review earns the text reward, or the photo reward when a photo is attached, and nothing else changes what it pays.
* Removed: A setting and a one-time admin notice added in 1.2.13. Updating deletes the setting's stored value.
* Developer: Extension API 2.0, because a review filter added in 1.2.13 was removed.

= 1.2.13 =
* New: A play button against nine settings rows opens a short video showing what that setting does, on the screen a customer would see it on. The clips are served from this plugin's own page on WordPress.org and fetched only when you click one, so they cost nothing to a store that never opens them and add nothing to the download.
* New: Review reminders. NeoGrow can email a customer a set number of days after their order completes, asking them to review what they bought. Marketing > NeoGrow > Settings > "Review reminders", **switched off by default** — it is the only setting in the plugin that emails your customers, so it is the only one that does not start running on its own. The delay defaults to 14 days, counted from completion.
* New: The reminder is an ordinary WooCommerce email, so its subject, heading and styling are edited under WooCommerce > Settings > Emails alongside every other one. It lists only the products on that order the customer has not already reviewed, quotes the most a review could earn them, and carries a one-click opt-out that is honoured everywhere — including the manual send button, because it is the same commercial email either way.
* New: The Orders screen gains a column showing whether a reminder went out and when, with a button to send one by hand. Without it, a merchant fielding "why did I get this email" had nothing to look at but order meta.
* Changed: Turning reminders on does not reach backwards. The clock starts the moment you enable it, so a shop with three years of completed orders does not email its entire history. Changing "Send after (days)" does apply to orders already waiting, rather than only to orders completed afterwards.
* Changed: A queued reminder is dropped if the order is refunded, cancelled, failed, trashed or deleted before the day arrives, and everything is re-checked when the job finally runs — an order moved back to processing in the meantime is not asked to review something the shop no longer considers delivered.
* Changed: Where WooCommerce core is sending its own customer review request, NeoGrow stands down rather than email twice, and the settings screen says so instead of leaving you to work out why a ticked box sends nothing. NeoGrow still adds its points line to core's email.
* Developer: New filters `neogrow_reminder_review_url` (where the email links to; block themes without the classic `#tab-reviews` anchor should set this), `neogrow_core_owns_reminders`, and a veto point for targeting rules applied on every path that sends.
* New: The disclosure statement accepts `{product_name}`, replaced with the product being reviewed. The statement is one store-wide string shown on every product page, so until now a merchant who wanted it to name the thing being reviewed had no way to say so. Off a product page the tag is removed rather than left showing.
* Fixed: Reading the settings registry before WooCommerce had started its mailer was fatal, because the reminder field's help link touches a class extending WC_Email. It now falls back to the email list. Nothing on a normal page load reached this; a WP-CLI command or an add-on filtering fields early did.

= 1.2.12 =
* New: A new screen, Marketing > NeoGrow > On your store, lists every change NeoGrow makes to your storefront — where each one appears, whether it is live right now, and where to change it. It exists because most of what this plugin does is invisible on a new store: four of the seven things it adds only appear once a customer has points, so an empty shop can look as though nothing happened.
* New: You can browse your own store as a customer sees it. Three settings — a sample balance, your real balance, or a customer with no points at all — so you can see the redemption panel and the My Account card without placing an order or giving yourself points. Nothing is written to your points history, no customer can ever see it, points cannot actually be applied to an order while it is on, and it switches itself off after thirty minutes.
* New: The dashboard of a store that has not traded yet now explains what is already running instead of showing seven figures all reading zero.
* Changed: The setup wizard now finishes on the new screen rather than the dashboard, and the notice on the Plugins screen says what has already happened rather than only asking you to configure something.
* Changed: The Guide tab's Quick Start no longer lists where each feature appears. That was describing the same things as the new screen, only without your store's own figures, so it now points there instead — and keeps the two details the new screen does not carry: points for an order arrive when it is marked Completed, and points for a review are credited when you approve it. The "why is the redemption form not visible" answer now tells you to use the preview rather than leaving you to wait for a customer to earn points.
* New: NeoGrow now appears in WooCommerce's own task list, which is where WooCommerce asks extensions to put this rather than redirecting you on activation.
* New: The same screen reports what might stop a change from showing on your particular store — a page cache, a currency switcher whose rate cannot be read, a block theme taking a different render path, or another active plugin that also awards points and therefore keeps a second balance.
* Developer: New filters `neogrow_store_changes` and `neogrow_competing_points_plugins`. Extension API 1.7.

= 1.2.11 =
* Fix: The points log now finds a customer by the name it shows you. The Customer column reads "Marcus Webb (marcus@example.test)", but searching for Marcus found nothing - the search read the login and the email address, never the name on screen. It now reads all three.
* Changed: This changelog now carries the four most recent releases, and the full history back to 1.0.0 has moved to changelog.txt, which ships with the plugin. WordPress.org displays at most 5,000 words of a changelog and ours had grown past it, so the oldest release was being cut off the listing.

= 1.2.10 =
* Fix: Searching the points log no longer reads your whole customer table twice for one page of results. On a large store the search could take seconds and got slower as the log grew; it now finds the customers first and reads only their entries, and a search matching nobody stops without touching the log at all.
* New: The dashboard leads with the two things waiting for you — how many orders need action (processing or on hold) and how many reviews are waiting for approval. The whole card is clickable, taking you straight to the screen where you deal with them. Both are read fresh every time the dashboard loads, not from the hourly cache the other figures use, so the number is never a stale to-do list.
* New: WooCommerce's Product Reviews screen now shows the photo a customer attached, beside their review, so you can approve a photo review without opening it. Clicking the thumbnail opens the full picture.
* Developer: The `neogrow_expiry_months` docblock said points expire after months of "inactivity". They expire six months after they were earned — ordering again does not extend points already on the clock. The wording is corrected; the behaviour is unchanged and always was this.

= Earlier versions =
The full history back to 1.0.0 lives in changelog.txt, which ships with the plugin. It can also be read at https://plugins.trac.wordpress.org/browser/neogrow-loyalty/trunk/changelog.txt

== Upgrade Notice ==

= 1.2.21 =
The points history in My Account no longer labels review rewards as orders: they name the product reviewed, and order rows link to the order. Event names are now translatable. No setting changes.

= 1.2.20 =
Using Customer Reviews for WooCommerce or Site Reviews? NeoGrow now tells you in the admin if either has switched its review features off, and which setting turns them back on. No setting changes.

= 1.2.19 =
On Elementor stores, NeoGrow's Elementor widgets now load only on pages that use them, so every other page loads less. Translations now come from WordPress.org language packs. No setting changes.

= 1.2.18 =
Elementor support: four free NeoGrow widgets and a new points-message shortcode. On Elementor Pro product templates the points message now appears by itself. Themes that already showed it are unchanged. No setting changes.

= 1.2.17 =
Review titles now save wherever the review form appears, including page-builder product templates, instead of only on ordinary product pages. No setting changes.

= 1.2.16 =
Reviews written through WooCommerce's own review request email now earn the points that email promises, and the promise itself now quotes only what that page can pay. No setting changes.

= 1.2.15 =
Fixes the star rating being invisible in the review list on Storefront, Twenty Twenty-Five and other themes that use WooCommerce's own review markup. No setting or balance changes.

= 1.2.14 =
Simplifies review rewards: a review earns the text reward, or the photo reward when it carries a photo. No balance changes.

= 1.2.13 =
NeoGrow can now email a review reminder a set number of days after an order completes — off by default, and it never reaches backwards over existing orders. No balance changes.

= 1.2.12 =
A new screen, Marketing > NeoGrow > On your store, lists everything NeoGrow puts on your storefront and shows you each of it on your own shop with a sample balance. A store with no history now gets an explanation instead of seven zeros. No setting or balance changes.

= 1.2.11 =
The points log now finds a customer by the name shown in the Customer column, not only by their login and email address. The full changelog has moved to changelog.txt so the listing stops truncating it. No setting or balance changes.

= 1.2.10 =
Searching the points log is fast again on a large store. The dashboard now leads with the orders and the reviews waiting for you, each linking to the screen where you handle them, and the Product Reviews screen shows the photo a customer attached. No setting or balance changes.

= 1.2.9 =
The product page and My Account now quote the rate your store will actually pay, and every per-customer points figure is priced for the customer it is about. Stock stores are unaffected; those running an add-on that varies rates were quoted one figure and charged another. Balances are untouched.

= 1.2.8 =
Fixes three things customers see: refund and cancellation emails no longer claim points were earned or ask for a review of what was sent back, the unsubscribe link in the plain-text review reminder works again, and Upload Photo works from the keyboard. No setting or balance changes.

= 1.2.7 =
Adds helpful votes and a Report link to your product reviews, and fixes the order-complete email so it confirms the points a customer earned. Two new database tables, for votes and reports, are created on the first page load after updating.

= 1.2.6 =
Faster pages: NeoGrow's CSS and JavaScript are now minified and load only where they are used, and review photo thumbnails are generated in the background instead of while the customer waits. A new photo shows at full size for a few seconds until its thumbnails are ready.

= 1.2.3 =
Adds a database index that makes the points log and the dashboard chart fast on a large store. The index is created on the first page load after updating: a moment on a typical store, a few seconds on a very large one, and only once. No setting or balance changes.

= 1.2.0 =
Two corrections change how many points new orders award. Points are now calculated on the order subtotal, as documented, so tax and shipping no longer earn. Multi-currency stores were also calculating in the wrong currency. Balances are untouched. NeoGrow has moved to Marketing > NeoGrow.

= 1.1.0 =
Important security and billing fix. Review photo uploads now require a logged-in user, and points are no longer over-deducted when more points are redeemed than the cart is worth. Update as soon as possible.

= 1.0.1 =
* New: Added 500 bonus points for admin first-install. Improved WooCommerce Blocks (Cart/Checkout) compatibility.
