The Reviews & Ratings plugin (plg_solidshop_review) adds a complete
product review system to your Solidshop store: 5-star ratings, written reviews with
an optional title, a rating-distribution summary, helpful voting, abuse reporting,
optional photo uploads, and an admin moderation queue — plus the
aggregateRating structured data that lets search engines show star
ratings next to your products.
Everything is stored in your own database. There is no third-party review service, no external script on your product pages, and no monthly fee. See the Reviews & Ratings extension page for the high-level feature overview.
Requirements
- Joomla 6.0 or later
- PHP 8.4 or later
- Solidshop 1.1.0 or later — the installer refuses to run against an older core, so update Solidshop first if you are behind. 1.1.0 is what ships the product-card rating hook the plugin renders into
- A Joomla captcha plugin installed and enabled, if you want CAPTCHA on the review form (optional — see Spam protection)
Installation
After purchase, plg_solidshop_review.zip is available from the
downloads area of your account on solidshop.app. Your purchase includes
12 months of updates and support.
In your Joomla admin, go to
System → Install → Extensions, then drag the ZIP file
into the upload area. Joomla installs the plugin, creates its three database
tables (#__sshop_reviews, #__sshop_review_votes,
#__sshop_review_reports), and registers the admin views.
Go to System → Manage → Plugins, search for review, and enable Solidshop - Review — the Plugin Manager lists it under its short name, not the full product name. Like every Joomla plugin, it is disabled by default after install.
Two switches, not one. Enabling the Joomla plugin is only half the job — reviews stay hidden until you also turn on Enable Reviews in the Solidshop component options (next section). If you have installed and enabled the plugin but nothing appears on your product pages, this is almost always why.
Turn reviews on
Go to Solidshop → Dashboard and click Options in the toolbar (or System → Global Configuration → Solidshop), then switch to the Reviews & Ratings tab.
The remaining settings only appear once this is on. Configure them as described below, then Save & Close.
Open any product on your storefront. A Reviews tab now appears alongside the product description, containing the rating summary, the review list, and (depending on your permission setting) the submission form.
Settings reference
All settings live under Solidshop → Options → Reviews & Ratings and apply store-wide.
| Setting | Default | What it does |
|---|---|---|
| Enable Reviews | No | Master switch. When off, no review tab, no rating summary, and the AJAX endpoint rejects every request. |
| Require Moderation | Yes | New reviews are saved as Pending and stay invisible until an admin approves them. Turn off to publish reviews the moment they are submitted. |
| Enable Helpful Voting | Yes | Shows “Was this helpful?” buttons on each review and unlocks the Most helpful sort option. |
| Enable Abuse Reporting | Yes | Shows a Report link on each review, feeding the Review Reports queue in the admin. |
| CAPTCHA | Do not use | Picks which installed Joomla captcha plugin guards the review form. See Spam protection. |
| Who Can Submit Reviews | Anyone (including guests) | Anyone, Registered users only, or Verified buyers only. See Who can review. |
| Allowed Fulfillment Status for Review | — | Verified-buyer mode only. Restricts reviewing to orders that have reached one of the selected fulfillment statuses — e.g. only Delivered orders. |
| Allow Review Photos | No | Verified-buyer mode only. Lets buyers attach images to a review. See Review photos. |
| Max Photo Size (KB) | 1024 | Per-file upload ceiling, from 128 KB to 10240 KB. |
Who can review
The Who Can Submit Reviews setting is the single most important decision here, because it changes where the review form appears.
Anyone (including guests)
The form renders inside the Reviews tab on every product page. Guests are asked for a display name (required) and an email address (optional); logged-in users have their Joomla display name attached automatically. This maximises review volume, and it is the mode where CAPTCHA and moderation matter most.
Registered users only
The form still renders in the Reviews tab, but only for logged-in users. Guests see a short notice inviting them to log in. A registered user can leave one review per product (per variant, where the product has variants).
Verified buyers only
The strictest mode, and the one that produces the trust signal shoppers actually look for. The form disappears from the product page entirely — instead, it appears on the customer’s own order detail page:
- The customer logs in and opens Account → Orders, then a specific order.
- Below the order, a Review your purchase section lists every product in that order, each with its own star picker, title, body, and (if enabled) photo upload field.
- Products already reviewed on that order show a green Already reviewed badge instead of a form.
- Published reviews carry a Verified buyer badge on the product page.
Solidshop verifies that the order belongs to the logged-in customer and actually contains the product before accepting the review — the check is server-side, so a crafted request cannot fake a verified review. If you set Allowed Fulfillment Status for Review, the order must additionally sit in one of the selected statuses.
Gate on delivery, not on payment. Selecting a Delivered-style fulfillment status stops customers reviewing a product they have paid for but not yet received — which is where most one-star “where is my order?” reviews come from. Leave the field empty and any order containing the product qualifies, no matter how recent.
One review per customer, per product
A logged-in customer cannot review the same product twice; for a product with variants the check is per variant. In verified-buyer mode the check is scoped to the order, so a customer who buys the same product again on a later order can review it again from that order.
Moderating reviews
Go to Solidshop → Reviews (or Marketing → Reviews if you use the Solidshop admin menu preset). Every review lives in one of four states:
| Status | Visible publicly? | Counts toward the rating? |
|---|---|---|
| Pending | No | No |
| Approved | Yes | Yes |
| Rejected | No | No |
| Spam | No | No |
Tick one or more rows and use the toolbar buttons — Approve, Reject, Mark as Spam, or Delete — to act in bulk. The list can be searched by review title, body, or reviewer name, filtered by status, and sorted by rating or date.
Click a review to open the edit form, where you can correct a typo, fix a mis-clicked star rating, or edit the reviewer name before approving. Attached photos are shown here too, so you can check them before the review goes live.
Average ratings recalculate on status change. A product’s review count, average score, and star distribution are derived from approved reviews only, and are recomputed whenever you approve, reject, or delete one. Nothing to rebuild by hand.
Recent reviews on the dashboard
The plugin adds a Recent Reviews widget to the Solidshop dashboard showing the five newest reviews with their product, rating, and status, plus a link straight into the queue. It is the fastest way to notice a one-star review the day it lands.
Handling abuse reports
When abuse reporting is on, any logged-in visitor can flag a published review as Spam, Offensive, Fake, or Other. Reports collect under Solidshop → Review Reports, grouped so you can see which reviews are attracting repeat flags.
Two toolbar actions resolve a report: Dismiss (the review is fine, clear the flag) or Mark as Spam (unpublish the review and close the report). Reporting is deliberately restricted to logged-in users — an anonymous report button is an invitation to brigading.
Each customer can file one report per review, enforced by a database constraint rather than by an application check a concurrent request could race. A second attempt is answered with “you have already reported this review” instead of adding a duplicate to your queue.
Both actions are rate-limited per account. A single customer can cast at most 30 helpful votes and file at most 10 abuse reports per hour. These are anti-abuse floors, not merchant preferences — a shopper acting in good faith never approaches them — so they are deliberately not exposed as settings. The count is kept per user rather than per IP address: IP buckets are bypassable with any VPN and simultaneously lock out everyone behind a shared office connection.
Helpful voting
Each published review shows a “Was this helpful?” prompt with Yes and No buttons for logged-in visitors. A visitor can vote once per review; the helpful count feeds the Most helpful sort option, so the reviews that other shoppers found useful float to the top instead of just the newest ones. As with reporting, the one-vote rule is backed by a database constraint, so a double-click or a slow connection cannot produce two votes — the second is read as “already voted”.
Review photos
Photo uploads are available in verified-buyer mode only — deliberately, because unrestricted image uploads from anonymous visitors are a liability. Turn on Allow Review Photos and buyers get a file field in the review form on their order detail page.
- Accepted types: JPEG, PNG, WebP, GIF. The file’s real
content type is inspected server-side — renaming
payload.phptophoto.jpgdoes not get it through. - Size limit: whatever you set in Max Photo Size
(1 MB by default), per file. Your PHP
upload_max_filesizeandpost_max_sizestill apply on top — the lower of the two wins. - Storage:
files/shop/{store_id}/review/, under randomised filenames. - Display: thumbnails in the review card, each linking to the full-size image.
Photos are stored at their original resolution. A generous size limit means large files on disk and in the page. 1024 KB is a sensible ceiling for most stores; raise it only if your products genuinely need detail shots.
Spam protection
The CAPTCHA setting lists every captcha plugin installed and enabled in your Joomla site, so you are not locked into one vendor. Install and configure the captcha plugin first (System → Plugins), then pick it here. Suitable choices include reCAPTCHA, hCaptcha, and the privacy-friendly, self-hosted Altcha — which asks the browser to solve a small proof-of-work puzzle rather than profiling the visitor, and needs no third-party account.
The CAPTCHA is checked server-side on submission. If the selected plugin is later disabled or removed, the form keeps working without a challenge rather than breaking the page — so re-check this setting after any plugin cleanup.
Verified-buyer mode is the strongest spam filter there is. A spammer would have to place and pay for a real order first. If you run in that mode, CAPTCHA is belt-and-braces; in Anyone mode, treat it as essential.
Where reviews appear
| Location | What renders |
|---|---|
| Category and module listings | A compact star rating with the average score and review count under each product card. Hidden until the product has at least one approved review. |
| Product page — summary bar | Average score and a review count that links down to the tab. Hidden until the product has at least one approved review. |
| Product page — Reviews tab | Big average score, star breakdown per rating level, the review list with sort options (newest, highest, lowest, most helpful) and a Load more button, plus the submission form where applicable. |
| Account → Orders → order detail | Per-product review forms in verified-buyer mode. |
| Account → My Reviews | The customer’s own review history, including pending ones, with their current status. |
| Admin dashboard | The Recent Reviews widget. |
| Admin → Reviews / Review Reports | The moderation queue and the abuse-report queue. |
Reviews load five at a time over AJAX, so a product with hundreds of reviews still renders a fast first paint. The first page is server-rendered, which means search engines and visitors without JavaScript still see review content.
Structured data & rich results
Once a product has at least one approved review, the plugin merges an
aggregateRating block — average score and review count —
plus the five most recent reviews into the Product JSON-LD node that
Solidshop already emits on the product page. That is the markup Google reads when
deciding whether to show star ratings in search results.
The rating data is merged into the existing Product node rather than
published as a second one. Two competing Product entities on one page is
a classic reason for Google to decline review snippets despite technically valid
markup, so this matters more than it sounds.
Rich results are never guaranteed. Valid markup makes your product eligible for star ratings in search — Google still decides per query. Validate your pages with the Rich Results Test after enabling reviews, and expect indexing to take a while to catch up.
Customising the look
Every review layout is a standard Joomla layout file and can be overridden in your template without touching the plugin — your changes survive updates.
| What | Override path in your template |
|---|---|
| The whole Reviews tab | html/layouts/com_solidshop/product/tab_reviews.php |
| A single review card | html/layouts/com_solidshop/product/review_item.php |
| Rating in the product summary bar | html/layouts/com_solidshop/product/stats_items.php |
| Rating on a product card in listings | html/layouts/com_solidshop/product/card_stats.php |
| Review forms on the order detail page | html/layouts/com_solidshop/account/order_detail_reviews.php |
| Account → My Reviews page | html/com_solidshop/account/reviews.php |
The default layouts use Bootstrap classes, so they inherit Cassiopeia’s styling out of the box.
Troubleshooting
No Reviews tab on the product page
- Confirm the plugin is Enabled under System → Plugins.
- Confirm Enable Reviews is set to Yes in Solidshop → Options → Reviews & Ratings. This is the usual culprit — it defaults to No.
- If your template overrides the product page, make sure the override still renders the plugin tab region.
The review form is missing, but reviews are listed
- You are probably in Verified buyers only mode — by design, the form lives on the customer’s order detail page, not the product page.
- In Registered users only mode, guests see a log-in notice instead of the form.
- A customer who has already reviewed that product does not get a second form.
A submitted review doesn’t show up
- With Require Moderation on (the default), new reviews sit as Pending until approved. Check Solidshop → Reviews and filter by Pending.
- The customer can always see their own pending reviews under Account → My Reviews, so point them there if they ask.
“You must be a verified buyer to review this product”
- The order must belong to the logged-in customer and contain that exact product.
- If Allowed Fulfillment Status for Review is set, the order must also be in one of those statuses — a customer whose order is still Unfulfilled will hit this message.
- Reviews submitted as a guest at checkout are not linked to a user account, so the buyer must be logged in with the account that placed the order.
Voting or reporting silently fails
- Both actions require a logged-in user; the buttons are hidden for guests.
- Each visitor gets one vote and one report per review — a second attempt is rejected.
- The per-account hourly ceiling (30 votes, 10 reports) may have been hit. It resets on a rolling hourly window; no admin action is needed.
- If the page has been open a long time, the Joomla session token may have expired. Reload the page and try again.
Photo upload fails
- Photos work only in Verified buyers only mode with Allow Review Photos on.
- Check the file is under your Max Photo Size limit and is a real JPEG, PNG, WebP, or GIF.
- Check that
files/shop/is writable by the web server — the plugin creates the per-storereview/folder on first upload. - Very large images can also trip PHP’s own
upload_max_filesize/post_max_sizelimits before Solidshop sees them.
Star ratings don’t appear in Google
- The product needs at least one approved review — pending reviews emit no markup.
- Run the page through the
Rich Results Test
to confirm the
aggregateRatingis present. - Give it time. Re-indexing is on Google’s schedule, and rich results remain at its discretion even with perfect markup.
Uninstalling
Uninstalling the plugin from System → Manage → Extensions drops its three tables, and with them every review, vote, and report. If you might want that content back, back up those tables first — or simply disable the plugin instead, which hides reviews everywhere while leaving the data intact.
The rating columns the plugin maintains on Solidshop’s own product-stats table
are reset to zero at the same time, so no orphaned star ratings are left behind on
product cards. Uploaded review photos under
files/shop/{store_id}/review/ are left on disk; remove them manually if
you want a clean sweep.
Removing Solidshop entirely? Uninstall the add-ons first. Solidshop refuses to uninstall while add-on plugins such as this one are still installed, and names them in the error message. The order matters: an add-on’s own uninstall depends on the core tables and library still being present.