Reviews for WooCommerce by WpExperts Hub
Ask for product reviews after every order, remind customers politely, collect Verified Buyer reviews on a private page without an account, and manage the whole sequence from one dashboard.
1. Overview
Reviews for WooCommerce by WpExperts Hub asks your customers for product reviews at the right moment, reminds them politely, lets them write a review on a clean private page without an account, and publishes it with a Verified Buyer label after you approve it.
When an order becomes Completed the plugin emails the billing address a review request with a button for every product that was bought. Products that still have no review get a reminder 5 days later and a final reminder 7 days after that. Before every email the plugin checks again, so nobody is asked about something they already reviewed.
How it works
- An order is completed. The plugin records the order, lists the products that can be reviewed and schedules the initial email (immediately, or after the delay you set). The sequence starts once per order: going from Completed to another status and back never restarts it.
- The emails go out from a background queue. Action Scheduler (part of WooCommerce) runs the jobs, with WP-Cron as a fallback. Each email is claimed with an atomic step, so a repeated status change, a retried job or a double click can never send the same email twice.
- The customer writes a review. The button in the email opens a private page with a star rating, optional title, text and optional photos. The link contains a random token that expires; it shows nothing about the order to anyone without it.
- You moderate it. The review is saved as a normal Pending WooCommerce product review. You approve, reject or trash it in the usual place. Approved reviews of a real purchase show a Verified Buyer label.
- Reminders stop by themselves. As soon as every product of the order has a review, the remaining reminders are cancelled. A reminder only ever lists the products that still wait for a review.
At a glance
Automatic sequence
Initial request, a reminder after 5 days and a final reminder 7 days later. All three delays, and an optional delay before the first email, are settings.
Native WooCommerce emails
Three emails under WooCommerce → Settings → Emails with subject, heading, additional content, HTML or plain text, your logo and the standard WooCommerce styling.
Private review page
Responsive, accessible, no account needed, photos optional. Protected by a nonce, a honeypot and rate limits. One review per product and order.
Verified Buyer
Set only when the order is paid, contains the product and has the review's billing email. Clicking an email link alone proves nothing.
One dashboard
Statistics, a searchable table with a status for every product, an order detail screen, an email log with filters, CSV export and maintenance tools.
Manual and bulk
Send, resend, reschedule, cancel or reset one order, or queue a bulk action for many. Works from the Orders screen too, on HPOS and classic storage.
What it does not do
- It does not publish reviews on its own. Reviews are Pending until you approve them, unless you switch on automatic approval.
- It does not prove delivery. WordPress can only report that it handed an email to the mail system. The log says exactly that and never claims an email was delivered or opened.
- It does not import reviews from other sites or services, and it does not send review requests for orders that are not in an eligible status.
- It does not replace WooCommerce reviews. Reviews are ordinary WooCommerce product reviews, so they keep working if you deactivate the plugin.
2. Requirements
| Requirement | Needed |
|---|---|
| WordPress | 6.2 or later (tested up to 7.1) |
| WooCommerce | 8.0 or later (tested up to 11.2). Product reviews must be enabled under WooCommerce → Settings → Products. |
| PHP | 7.4 or later (tested on 8.2 to 8.5) |
| Order storage | High-Performance Order Storage (HPOS) or the classic storage. The plugin only uses WooCommerce's order API. |
| Background jobs | Action Scheduler (included with WooCommerce) is used when present; otherwise WP-Cron. On a quiet site add a real server cron job for reliable timing. |
| Working email delivery. An SMTP or email-service plugin with delivery logs is recommended. |
3. Installation
- Download the plugin zip from your account on wpexpertshub.com.
- In WordPress open Plugins → Add New → Upload Plugin, choose the zip and press Install Now.
- Activate the plugin. It creates three small tables and adds WooCommerce → Review Requests.
- Open Review Requests → Settings and check the eligible order statuses and the reminder timing.
- Open WooCommerce → Settings → Emails and read the three Review request emails. Send yourself a test email from Settings → Email.
- Activate your licence under Plugins → WpExperts Hub Licences to receive updates.
Licence and updates
Open Plugins → WpExperts Hub Licences, enter your licence key and the email address used for the purchase, and press Activate. The licence is only used for updates: every feature works without it.
The licence and update check contacts wpexpertshub.com with the licence key, your site address and the plugin version. It never sends orders, customers, emails or reviews.
What activation creates
| What | Details |
|---|---|
| Three tables | {prefix}wphub_reviews_orders (one row per order in the sequence), {prefix}wphub_reviews_items (one row per order and product) and {prefix}wphub_reviews_log (one row per email attempt). |
| One option | wphub_reviews_settings holds every setting. wphub_reviews_db_version tracks the table version. |
| A daily job | wphub_reviews_daily: deletes old log rows, revokes long-expired links, un-sticks interrupted sends and re-creates queue jobs that went missing. |
| Queue jobs | wphub_reviews_process_stage (one per scheduled email) and wphub_reviews_bulk_item (one per order in a bulk action), in the Action Scheduler group wphub-reviews. |
Updating, deactivating and deleting
- Updating keeps your settings and records. The tables are upgraded automatically when needed.
- Deactivating pauses the queue and deletes nothing. When you activate again, missing queue jobs are re-created.
- Deleting the plugin removes its data only if Delete all plugin data on uninstall is on (Settings → Data & privacy). Reviews are WooCommerce reviews and are never deleted.
Multisite
Each site of a network has its own tables, settings and queue. Network activation creates the tables on every site, and on sites created later.
4. Quick start
Five minutes to your first review requests:
- Check the basics. Review Requests → Settings → General: Automatic review requests is on and Completed is ticked under eligible order statuses. That is the default.
- Look at the emails. Settings → Email shows the timing (5 and 7 days by default) and your logo. Press Preview next to an email, then send yourself a test email.
- Complete an order. Mark a test order Completed. It appears under Review Requests with its initial email scheduled. Open Details and press Send now if you do not want to wait.
- Write a review. Open the link from the email, rate the product and submit. The review is Pending.
- Approve it. Products → Reviews (or Comments): approve the review. It appears on the product page with a Verified Buyer label.
- Ask for older orders too. On WooCommerce → Orders select completed orders and choose Review request: send initial email from Bulk actions.
5. Features
The review sequence
| When it is sent | What it says | |
|---|---|---|
| Initial review request | When the order reaches an eligible status, plus the optional delay | A friendly request with a review button for every product |
| First reminder | 5 days after the initial email was sent | A light reminder, only for products that still have no review |
| Final reminder | 7 days after the first reminder was sent | The last note. The customer is not asked about these products again |
- Once per order. The sequence of an order starts once. Completed → On hold → Completed does not start it again. An administrator can reset it from the order's detail screen.
- A disabled email is skipped, not stuck. If you switch an email off in WooCommerce, that step is marked skipped and the next one is planned from the same moment.
- Rechecked before every send. The order status, refunds and existing reviews are checked at the moment of sending. A product that was reviewed in the meantime, by any route, is never emailed.
- Cancelled automatically. If the order becomes cancelled, refunded or failed, the waiting emails are cancelled (setting Skip refunded, cancelled and failed orders). A completely refunded product is always skipped, and you choose whether a partial refund stops the sequence.
- Retries. If WordPress cannot hand an email to the mail system, the plugin tries again after 15, 30 and 45 minutes, then marks the email Failed with the error text. Each attempt is logged once.
Who is asked, and for what
An order is asked when it has a valid billing email address, an eligible status and passes your rules. Each product is checked on its own.
| Rule | Setting |
|---|---|
| Order statuses | Eligible order statuses (Completed by default; you can add Processing and others) |
| Guest orders | Ask customers without an account (on by default) |
| Virtual and downloadable products | Include them or not |
| Excluded products and categories | Never asked. Variations follow their parent product |
| Minimum order value | Orders below it are not asked |
| Refunds | Skip refunded, cancelled and failed orders; partial refunds optionally stop the sequence |
| Repeat purchases | Ask again when the same customer buys the same product in a later order |
| Existing reviews | A review by the same customer stops requests and reminders for that product |
The emails
- Native WooCommerce emails. The three emails are registered under WooCommerce → Settings → Emails, so enabling, subject, heading, additional content and HTML or plain text work like any other WooCommerce email, with WooCommerce's live preview.
- Placeholders for subject and heading:
{site_title},{order_number},{order_date}and{customer_first_name}. - Branding. Choose an email logo and the sender name and address in Review Requests → Settings → Email, and whether product images and prices appear.
- Built for mail clients. Table-based layout with inline styles, a bulletproof button, no JavaScript and a plain-text version, readable on phones.
- Theme overrides. Copy
templates/emails/wphub-review-request.php(and the plain version) toyourtheme/woocommerce/emails/. - Preview and test. A preview with sample data, and a test email to any address. Neither creates a record.
The review page
- No account needed. The link is the key. You can require customers who have an account to sign in first (Sign-in requirement); guest orders never need one.
- Several products, one page. Every product of the order that is still open has its own form. The product from the button you clicked is shown first.
- Fields. Star rating (required or not), name, the billing email (read-only, never shown publicly), optional title, review text with a character counter, and optional photos. Your minimum and maximum length apply.
- Photos. JPG, PNG, GIF and WebP only, checked by content and not just by file name, with a maximum number and size per image.
- Friendly errors. If something is wrong the customer sees what to fix and keeps everything they typed.
- Thank-you and edit. After submitting, the form is replaced by a thank-you message. Refreshing the page cannot create a second review. If you allow it, the customer can edit the review until you moderate it.
- Accessible and private. Real labels, keyboard-friendly star radios, visible focus, good contrast, dark mode, a phone layout. The page is not indexed, sends no referrer and is never cached.
Review links and security
- Random and unguessable. A link carries a random selector and a signature derived from your site's secret keys. A copy of the database alone cannot produce a working link, and the order number is not in the link.
- They expire. Links expire after the number of days you set, counted from the last email sent (60 by default). An expired link shows a plain message and nothing about the order. A daily job permanently revokes links that expired long ago.
- Only what was bought. The page and the form only ever accept products that belong to the order behind the link. The product in the URL only chooses which product is shown first.
- Spam protection. A WordPress nonce on every form, a hidden honeypot field, and rate limits per address and link. A nonce alone is never treated as authorisation.
- One review per product. Duplicate prevention is atomic, so two parallel submissions cannot both succeed. You can choose one review per product and order, or one per customer and product across orders.
Reviews, moderation and Verified Buyer
- Native reviews. A submitted review is a normal WooCommerce product review. It is Pending by default, and you approve, reject or trash it in Products → Reviews or Comments. The request status follows what you do there.
- Automatic approval is off by default. You can switch it on in Settings → Review form.
- What makes a review verified. The review gets WooCommerce's own verified-owner flag only when the order exists, is paid, contains the product on a line that is not completely refunded, and has the same billing email as the review. A guest is never marked verified just because an email matches.
- The label. Show a Verified Buyer badge, WooCommerce's own "(verified owner)" text, or nothing. The plugin uses WooCommerce's review hooks and does not replace the review template.
- Titles and photos are shown with the review text on the product page.
Managing requests
- Dashboard. Eight statistics cards, filters (waiting, awaiting approval, fully reviewed, failed, cancelled), search by order number, name or email, sortable columns and 20 requests per page.
- A status for every product. Waiting, Awaiting approval, Approved, Rejected, plus an overall status for the order: Not Requested, Scheduled, Email Sent, Reminder Scheduled, Partially Reviewed, Submitted — Awaiting Approval, Review Approved, Completed, Email Failed, Cancelled.
- Order detail. The customer, the review status, the next email, every product with its review, and the three emails as a timeline with Send now or Send again, Reschedule, Cancel pending reminders, Retry failed emails and Reset sequence.
- Resending needs a confirmation. An email that was already sent is only repeated after you confirm it. Manual sends still respect product eligibility and existing reviews; administrators can tick Ignore eligibility checks for the order rules.
- Reset never deletes reviews. It revokes the old links, clears the email progress and starts again for the products without a review.
On the WooCommerce Orders screen
- A Review request column with a short status (Not Requested, Email Sent, Awaiting Review, Partially Reviewed, Reviewed, Failed) that links to the order's detail screen.
- Bulk actions for the selected orders: send the initial email, the first or the final reminder, cancel pending reminders and retry failed emails.
- A Review request box on the order edit screen with the status, the three emails and one-click actions.
- Works with HPOS and with the classic order list, and does not interfere with WooCommerce's filtering, sorting or other plugins' actions.
Bulk sending
- Background processing. A bulk action never sends emails during the click. Each order becomes one queued job, so hundreds of orders are safe.
- Every order is checked on its own. Ineligible orders, orders without a billing email, products that were already reviewed and emails that were already sent are skipped and logged. A bulk action never repeats an email that was already sent.
- A summary. A banner shows how many orders are done, skipped or failed, and the Email log shows each one with the trigger Bulk action.
- Confirmation. You are asked before emails are queued and for large selections.
- Sending limit. Set a maximum of emails per hour; the rest waits in the queue.
Add a review for a customer
- Load an order, choose one of its products, and the customer's name and email are filled in from the order. Or search for a product and a customer without an order.
- The review is saved as a normal review, Pending unless you choose Approved. It is only recorded as a verified purchase if the order is paid and contains the product.
- It is marked as entered by an administrator, with your user and the time, in a box on the review's edit screen, so it is never mistaken for a review the customer wrote. An order note records it too.
- Duplicates for the same order and product are refused.
Email log and reliability
- Each attempt records the order, product when relevant, address, type, scheduled time, attempt time, result, error text, the trigger (automatic, manual or bulk) and the administrator for manual sends.
- The result is worded honestly: Handed to mail system means WordPress passed it on without an error. It is not proof of delivery.
- Filter by order, type, result and date. Message bodies are not stored, and old rows are deleted after the retention period you choose.
Tools
- Export every request as a CSV file (spreadsheet formulas in customer text are neutralised).
- Retry failed emails, clean up expired links, delete old log entries and re-create missing queue jobs.
- Scheduled jobs: the list of what is waiting in the queue.
- Reset the plugin's settings (administrators only) after a confirmation.
6. Admin screens
Everything is under WooCommerce → Review Requests, in five tabs, plus a column and a box on the Orders screens.
| Screen | What it is for |
|---|---|
| Review requests | Statistics and the table of every order in the sequence |
| Order detail | One order: products, reviews, the three emails and their actions |
| Add a review | Enter a review on behalf of a customer |
| Email log | Every email attempt, with filters |
| Settings | General, Email, Review form, Data & privacy |
| Tools | Export, retry, clean-up and the queue |
Review requests
The cards show how the sequence is doing, with fixed counting rules so that nothing is counted twice:
| Card | What it counts |
|---|---|
| Eligible orders | Orders with at least one product that can be reviewed |
| Review emails sent | Initial requests, first and final reminders; each email once, however many attempts it took |
| Pending requests | Products still waiting for a review, in orders whose sequence is not cancelled |
| Reviews submitted | Products that have a review, whatever its moderation state |
| Awaiting approval | Reviews waiting in the moderation queue |
| Approved reviews | Reviews published on the product page |
| Reminders sent | First and final reminders only |
| Failed attempts | Send attempts that could not be handed to the mail system (a retry counts as a new attempt) |
The table has one row per order: the order number, date and status; the customer; the products with a status each; the status and date of the initial email, the first reminder and the final reminder; the overall review status with "x of y reviewed"; and the last email sent. Bulk actions are above the table.
Order detail
Open it with Details in the table, with the status in the Orders list, or from the box on the order screen. See the figure under Managing requests. Actions:
| Action | What it does |
|---|---|
| Send now / Send again | Sends that email immediately. A repeat needs the confirmation box ticked. |
| Reschedule | Moves the email to the date and time you choose |
| Ignore eligibility checks | Administrators only: sends even if the order status or other order rules would stop it |
| Cancel pending reminders | Cancels the emails still waiting. Links keep working. |
| Retry failed emails | Puts a failed email back in the queue |
| Reset sequence | Revokes old links, clears the email progress and starts again. Existing reviews are kept. |
| Email history | Opens the log filtered to this order |
Add a review
See the figure under Add a review for a customer. Enter an order number and press Load order to choose one of its products and prefill the customer; leave the order empty to enter a review without an order (it is then never verified).
Email log
Filters for order, type, result and dates. Columns: time, order, address, type, result, scheduled time, who triggered it and the details (the error text of a failure).
Settings
Four tabs with a Save button each. Saving one tab never changes another. All settings are listed under Settings.
Tools
7. Settings
Open Review Requests → Settings. The defaults are chosen so that the plugin works without changes. Subject, heading, additional content and the on/off switch of each email are in WooCommerce → Settings → Emails.
General
Who is asked, for which orders and products, and how long the review links last.
| Setting | What it does | Default |
|---|---|---|
| Automatic review requests | Send review requests automatically when an order reaches an eligible status. Manual and bulk sending keep working when this is off. | On |
| Eligible order statuses | The sequence starts when an order changes to one of these statuses. It starts once per order; going back and forth between statuses does not restart it. | Completed |
| Guest orders | Also ask customers who checked out without an account. | On |
| Virtual and downloadable products | Include virtual and downloadable products in review requests. | On |
| Excluded products | Never ask for a review of these products (variations follow their parent product). | None |
| Excluded categories | Products in these categories are never requested. | None |
| Minimum order value | Orders below this total are not asked. 0 = no minimum. | 0 |
| Skip refunded, cancelled and failed orders | Pending emails of an order are cancelled when it becomes refunded, cancelled or failed. | On |
| Partially refunded orders stay eligible | Products that are completely refunded are always skipped. When this is off, any refund on the order stops the sequence. | On |
| Repeat purchases | Ask again when the same customer buys the same product in a later order. | On |
| An existing review stops requests | Do not ask for (or remind about) a product the customer has already reviewed. | On |
| Review link lifetime (days) | Counted from the last email that was sent. 0 = links never expire (not recommended). | 60 |
Timing, sender, logo and what the emails show.
| Setting | What it does | Default |
|---|---|---|
| Delay before the first email (hours) | 0 = send as soon as the order is completed. | 0 |
| First reminder (days after the request) | Default 5 days after the initial request. | 5 |
| Final reminder (days after the first reminder) | Default 7 days after the first reminder. | 7 |
| Sender name | Leave empty to use the WooCommerce "From" name. | Empty (uses the WooCommerce value) |
| Sender email address | Leave empty to use the WooCommerce "From" address. Use an address on your own domain so mail is not marked as spam. | Empty (uses the WooCommerce value) |
| Email logo | Shown at the top of the review emails. Empty = the WooCommerce email header image. | None |
| Product images in emails | Product images in emails. | On |
| Product prices in emails | Product prices in emails. | Off |
| Sending limit (emails per hour) | Emails over the limit wait in the queue. 0 = no limit. Useful on shared hosting. | 0 |
Review form
What the review page asks for and how reviews are handled.
| Setting | What it does | Default |
|---|---|---|
| Review title | Show a title field on the review form. | On |
| Image attachments | Let customers add photos (JPG, PNG, GIF, WebP). | Off |
| Maximum images per review | Maximum images per review. | 3 |
| Maximum size per image (MB) | Maximum size per image (MB). | 2 |
| Minimum review length (characters) | Minimum review length (characters). | 10 |
| Maximum review length (characters) | Maximum review length (characters). | 2000 |
| Star rating required | Star rating required. | On |
| Sign-in requirement | Guest orders never need an account. Choices: Never - the email link is enough; Customers with an account must sign in first. | Never - the email link is enough |
| Duplicate prevention | Choices: One review per product in each order; One review per customer and product (across orders). | One review per product in each order |
| Approve reviews automatically | Off by default: reviews wait for moderation in WooCommerce / Comments. | Off |
| Customers can edit before approval | The email link keeps working to change rating, title and text until the review is moderated. | Off |
| Verified Buyer label | Only reviews of a real purchase carry the label. Choices: Verified Buyer badge; WooCommerce default text "(verified owner)"; Do not show a label. | Verified Buyer badge |
Data & privacy
Log retention and what happens when the plugin is deleted.
| Setting | What it does | Default |
|---|---|---|
| Keep the email log for (days) | 0 = keep forever. | 90 |
| Delete all plugin data on uninstall | Removes the tables and settings when the plugin is deleted. Submitted reviews are WooCommerce reviews and are never deleted. | Off |
8. Developer reference
Hooks
| Hook | Type | What it does |
|---|---|---|
wphub_reviews_order_problem | filter | ( string $problem, WC_Order $order, bool $check_status ). The reason an order cannot be asked, or an empty string. Return a non-empty code to exclude an order; return an empty string to allow it. |
wphub_reviews_product_problem | filter | ( string $problem, int $product_id, WC_Order $order, $item ). The same for one product of an order. Use it to exclude products by any rule of your own. |
wphub_reviews_review_created | action | ( int $comment_id, int $product_id, int $order_id, string $source ). A review was saved. $source is customer or admin. |
wphub_reviews_email_sent | action | ( int $order_id, string $stage, string $trigger ). An email was handed to the mail system. $stage is initial, first or final; $trigger is auto, manual or bulk. |
wphub_reviews_upload_handler | filter | The WordPress upload function used for review photos: wp_handle_upload (default) or wp_handle_sideload (for tests and importers). |
// Never ask for reviews of products tagged "gift-card".
add_filter( 'wphub_reviews_product_problem', function ( $problem, $product_id ) {
if ( '' === $problem && has_term( 'gift-card', 'product_tag', $product_id ) ) {
return 'gift_card';
}
return $problem;
}, 10, 2 );
The three emails are standard WooCommerce emails (ids wphub_reviews_initial, wphub_reviews_first and wphub_reviews_final), so WooCommerce's own email filters such as woocommerce_email_subject_{id} and woocommerce_email_attachments apply.
Queue jobs
wphub_reviews_process_stage( $order_id, $stage )sends one email of the sequence.wphub_reviews_bulk_item( $batch_id, $order_id, $action, $admin_id )runs one order of a bulk action.- Both run in the Action Scheduler group
wphub-reviews(WooCommerce → Status → Scheduled Actions) and are de-duplicated. Without Action Scheduler the same hooks run from WP-Cron.
Data model
| Table | Holds |
|---|---|
{prefix}wphub_reviews_orders | One row per order: order id, customer id, name, email, order date, link selector and expiry, sequence state (active or cancelled), and for each email (initial, first, final) a status, planned time and sent time, plus last email, retry count and last error. |
{prefix}wphub_reviews_items | One row per order and product (unique): order item id, product and variation id, status, linked review id and submission time. |
{prefix}wphub_reviews_log | One row per email attempt: order, product, address, type, scheduled and attempt time, result, error, trigger, administrator and batch id. |
Email statuses: none, scheduled, sending, sent, failed, skipped, cancelled. Product statuses: requested, submitting, submitted (awaiting approval), approved, rejected (trashed, spam or deleted), skipped, cancelled.
Review meta
| Comment meta | Meaning |
|---|---|
rating, verified | WooCommerce's own rating and verified-owner flag |
_wphub_reviews_order_id | The order the review belongs to |
_wphub_reviews_title | The review title |
_wphub_reviews_images | Attachment ids of the customer's photos (only attachments the plugin created are shown) |
_wphub_reviews_source | customer or admin |
_wphub_reviews_admin_id, _wphub_reviews_admin_time | Who entered an administrator review and when |
Reason codes
Order: missing, reviews_disabled, invalid_email, guest, status, refunded, min_value. Product: product_unavailable, reviews_closed, virtual, excluded_product, excluded_category, refunded_item, already_reviewed, repeat_purchase.
Template overrides
Copy templates/emails/wphub-review-request.php and templates/emails/plain/wphub-review-request.php to yourtheme/woocommerce/emails/ and yourtheme/woocommerce/emails/plain/. The page's look is set by one small stylesheet that you can override with your own CSS on the .wphub-reviews-page body class.
CSV export
Columns: order_id, order_date, customer, email, sequence, initial_status, initial_sent, first_status, first_sent, final_status, final_sent, products_eligible, products_reviewed, reviews_approved, reviews_awaiting_approval, last_email_at. Times are UTC.
9. Privacy and data
| What | Where | How long |
|---|---|---|
| Order id, billing name and email, email progress and times | Table wphub_reviews_orders | Until the order is deleted, the data is erased, or the plugin data is removed |
| Email attempts: order, address, type, time, result, error text | Table wphub_reviews_log | The number of days in Settings → Data & privacy (90 by default; 0 keeps everything). No message bodies are stored. |
| The review: name, text, rating, title, photos, the order it belongs to | WordPress comments (WooCommerce reviews) | Until you delete the review. WordPress's own privacy tools handle it. |
| The customer's IP address with a review they submit | The review (WordPress's standard comment field) | Same as the review |
- Export and erase. The plugin registers a personal-data exporter and eraser by email address (Tools → Export / Erase Personal Data). Erasing removes the request records and log rows of that address and cancels their queued emails.
- Suggested policy text is added under Settings → Privacy.
- Deleted orders. When an order is deleted, its request record and queue jobs are removed.
- The email address is never shown on the review page or on the product page, and links do not contain it or the order number.
- Outside servers. The only outside contact is the WpExperts Hub licence and update check, if you activate a licence. It sends the licence key, your site address and the plugin version.
Uninstalling
Deleting the plugin keeps everything unless Delete all plugin data on uninstall is on. With it on, the three tables, the settings, transients and queued jobs are removed. Reviews are never deleted.
10. Troubleshooting
First, the quick checks
- Review Requests → Email log shows every attempt with its result and error text.
- Review Requests → Tools → Scheduled jobs shows what is waiting in the queue, and WooCommerce → Status → Scheduled Actions (group
wphub-reviews) shows the Action Scheduler side. - Settings → Email shows whether each of the three emails is enabled in WooCommerce.
Emails are not sent
| Symptom | What to do |
|---|---|
| The order has no row under Review Requests | Its status is not eligible (Settings → General), the billing email is missing or invalid, guests are excluded, no product can be reviewed, or product reviews are off in WooCommerce. The order was also not completed after the plugin was activated: use Bulk actions on the Orders screen for older orders. |
| The email is "Scheduled" but never goes out | The queue is not running. Check Scheduled Actions. Without Action Scheduler the queue depends on WP-Cron: visit the site, or add a real server cron job that calls wp-cron.php. Tools → Re-create missing queue jobs repairs a cleared queue. |
| The log says "Skipped" | The details column says why: the order status changed, the product was refunded or already reviewed, the email is disabled, or nothing was left to review. This is the plugin protecting the customer from a pointless email. |
| The log says "Failed" | WordPress could not hand the email to the mail system. The error text comes from your mail setup. Fix it (SMTP details, sender address), then use Retry failed emails. |
| "Handed to mail system" but the customer got nothing | WordPress cannot see past its own mail transport. Check your SMTP or email service's delivery log, the spam folder and your domain's SPF and DKIM. Use a sender address on your own domain (Settings → Email). |
| Emails are late | Check Delay before the first email and Sending limit. Over the limit, emails wait ten minutes and try again. |
| An email is stuck on "Sending" | A request was interrupted. The daily job turns it into Failed so you can retry it. |
The review page
| Symptom | What to do |
|---|---|
| "This review link is not valid" | The link is incomplete, was revoked by a reset, or belongs to another site. Use the button in the latest email. |
| "This review link has expired" | Raise Review link lifetime, or open the order's detail screen and send the email again (every send renews the expiry). |
| "Reviews are not available for this order" | The order is no longer in a status that allows a review (for example refunded or cancelled). |
| "This page has expired" | The form was open for more than a day. Reload the page and submit again. |
| The page is cached or shows a login prompt | Exclude URLs containing wphub-review from page caching. The plugin sends no-cache headers, but some hosts ignore them. A login prompt appears only if Sign-in requirement is on and the order belongs to a registered customer. |
| A photo is refused | Only JPG, PNG, GIF and WebP are accepted, within the count and size limits of Settings → Review form. |
Reviews
| Symptom | What to do |
|---|---|
| A review does not show on the product page | It is still Pending. Approve it in Products → Reviews. Also check that reviews are enabled on the product. |
| A review has no Verified Buyer label | The order must be paid, contain the product and have the review's billing email. Check Settings → Review form → Verified Buyer label, and WooCommerce's setting that shows the verified label. |
| The customer cannot review a product again | One review per product and order is allowed. If the review was removed, the product becomes open again. |
11. FAQ
When are the emails sent?
The initial request goes out when the order reaches an eligible status (Completed by default), after the optional delay. The first reminder follows 5 days after the request and the final reminder 7 days after the first reminder. All the delays are settings.
Will a customer who already reviewed get more emails?
No. Every email is checked again right before it is sent and only lists the products without a review. When every product has a review, the remaining reminders are cancelled.
What happens if an order goes Completed, then On hold, then Completed again?
Nothing is restarted. An order enters the sequence once. An administrator can reset it from the order detail screen.
Can the same email be sent twice by accident?
No. Each email is claimed with an atomic step in the database, so repeated status changes, a retried queue job, parallel workers or a double click cannot send it twice. A bulk action also never repeats an email that was already sent.
Does the plugin approve reviews automatically?
Only if you switch it on. By default reviews are Pending, like any WooCommerce review, and you approve them in the normal review list.
How does Verified Buyer work?
The review gets WooCommerce's own verified-owner flag only when the order exists, is paid, contains the product and has the same billing email as the review. You can show a Verified Buyer badge, WooCommerce's text, or nothing.
Do customers need an account?
No. The link in the email is enough. You can require customers who have an account to sign in first; guests never need one.
Can customers add photos?
Yes, if you switch it on. Only JPG, PNG, GIF and WebP images are accepted, checked by content, within a count and size limit you set.
Can I ask for reviews of orders from before I installed the plugin?
Yes. On WooCommerce → Orders select the completed orders and use Bulk actions → Review request: send initial email. Each order is checked on its own and the emails go out from the background queue.
Can I send an email to one customer by hand?
Yes. Open the order's detail screen (or the Review request box on the order) and press Send now. A repeat of an email that was already sent needs a confirmation.
Does "sent" mean the customer received the email?
No. WordPress can only tell whether it handed the message to your mail system. The log says "Handed to mail system" and never claims delivery or opens. Use an SMTP or email service with delivery logs if you need proof.
Which emails can I edit?
All three, in WooCommerce → Settings → Emails: subject, heading, additional content, HTML or plain text, and the enable switch. The logo, sender and what the product rows show are in Review Requests → Settings → Email.
Does it work with HPOS and the Cart and Checkout blocks?
Yes. The plugin only uses WooCommerce's order API, the tables never assume an order id is a post id, and it is declared compatible with both.
Does it work with a caching plugin?
The review page sends no-cache headers and is marked as not cacheable. If your host or cache plugin still caches it, exclude URLs containing wphub-review.
Does it slow my site down?
No work happens on visitor requests. Emails are sent from a background queue, the admin assets load only on the Review Requests and Orders screens, and the review page loads one small stylesheet and script.
What if WooCommerce or the plugin is deactivated?
Your reviews stay exactly as they are, because they are ordinary WooCommerce reviews. Pending emails pause; when you activate the plugin again, missing queue jobs are re-created.
Does it contact any outside server?
Only wpexpertshub.com for the licence and update check, if you activate a licence. It sends the licence key, your site address and the plugin version, and no customer, order or review data.
How is this different from a review service?
There is no service. The plugin runs on your site, uses your own mail setup and stores everything in your database, so there is no subscription and no third party holding your customers' data.
Does it work without a licence?
Yes. The licence is only for updates.
How do I get support?
Email support@wpexpertshub.com with your order ID, the plugin version and what you see in the email log.
12. Changelog
1.0.0 · 2026-10-10
- First release.
- Automatic review requests when an order is completed, with a reminder after 5 days and a final reminder 7 days later, all configurable.
- Three native WooCommerce emails with preview, test email, logo and sender settings.
- Private, accessible review page with ratings, optional titles and photos, spam protection and duplicate prevention.
- Pending WooCommerce reviews, Verified Buyer label based on the real order, and request status that follows moderation.
- Review Requests dashboard, order detail, email log, CSV export and tools.
- Orders screen column, bulk actions and an order meta box, on HPOS and classic storage.
- Add a review on behalf of a customer, marked as entered by an administrator.
- Personal data export and erase, log retention and a clean uninstall.
- Hooks for developers:
wphub_reviews_order_problem,wphub_reviews_product_problem,wphub_reviews_review_createdandwphub_reviews_email_sent.
13. Support
Email support@wpexpertshub.com and a person will help. Please include:
- Your order ID (from your purchase email or My Account on wpexpertshub.com).
- The plugin version (shown on Plugins) and your WordPress, WooCommerce and PHP versions.
- What you expected, what happened and what you already tried.
- The relevant rows from Review Requests → Email log and the error text of a failed email.
- Whether you use SMTP or an email service, and whether Action Scheduler or WP-Cron runs your queue.
Please do not send passwords or customer data. Support never needs them.