Title: Photo &amp; Video Reviews for WooCommerce — PVR Media Reviews
Author: lebedgor
Published: <strong>August 13, 2026</strong>
Last modified: October 16, 2026

---

Search plugins

![](https://ps.w.org/pvr-media-reviews-for-woocommerce/assets/banner-772x250.png?
rev=3748498)

![](https://ps.w.org/pvr-media-reviews-for-woocommerce/assets/icon-256x256.png?rev
=3648449)

# Photo & Video Reviews for WooCommerce — PVR Media Reviews

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

[Download](https://downloads.wordpress.org/plugin/pvr-media-reviews-for-woocommerce.1.2.6.zip)

 * [Details](https://en-au.wordpress.org/plugins/pvr-media-reviews-for-woocommerce/#description)
 * [Reviews](https://en-au.wordpress.org/plugins/pvr-media-reviews-for-woocommerce/#reviews)
 *  [Installation](https://en-au.wordpress.org/plugins/pvr-media-reviews-for-woocommerce/#installation)
 * [Development](https://en-au.wordpress.org/plugins/pvr-media-reviews-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/)

## Description

Live Demo: [demo.pv-reviews.site](https://demo.pv-reviews.site/)

**Photo & Video Reviews for WooCommerce (PVR Media Reviews)** empowers your customers
to share authentic visual proof by adding photos and videos to their product reviews.

Unlike other media review plugins that overwhelm your web server, PVR processes 
and compresses videos directly in the customer’s browser before upload. This delivers
lightning-fast uploads, saves bandwidth and storage, and eliminates the need for
server-side FFmpeg or expensive hosting upgrades.

#### Why Choose PVR Media Reviews?

 * **In-Browser Video Compression** — Videos (MP4, WebM) are automatically compressed
   client-side via modern Canvas & MediaRecorder APIs before uploading. Zero server
   CPU load.
 * **Authentic Visual Social Proof** — Let shoppers upload photos and videos to 
   build buyer confidence and boost conversion rates.
 * **100% Native WooCommerce Integration** — Extends WooCommerce reviews using native
   WordPress comments (`comment_type = 'review'`). Clean, reliable, and portable.
 * **Built-in Rich Snippets (Schema.org / JSON-LD)** — Automatically injects `AggregateRating`
   and `Review` structured data so your star ratings appear directly in Google search
   results. Compatible with Yoast SEO and Rank Math.
 * **Interactive Media Experience** — Modern modal popups, responsive photo galleries,
   customer avatars with cropping, and built-in video player.
 * **Community & Trust** — Helpful/unhelpful voting on reviews and verified store
   owner reply badges.

#### Free Features

 * **Photo & Video Reviews** — Customers can attach multiple photos (JPG, PNG, WebP,
   GIF) and videos (MP4, WebM, MOV) to any review.
 * **Client-Side Video Compression** — Automatic compression in the user’s browser
   with real-time progress preview and thumbnail creation.
 * **Reviews Block Replacement Toggle** — The plugin replaces the theme’s reviews
   block on product pages with its own (rating summary, media galleries, helpful
   voting, store replies). A single “Replace the theme reviews block” switch in 
   General Settings keeps the theme block when you don’t need it — and when it’s
   off, plugin scripts and styles are not loaded on product pages at all, so nothing
   slows the page down.
 * **Reviews Block Anywhere — Shortcode & Elementor Widget** — `[pvr_reviews product
   ="123"]` renders the full reviews block on any page: landing pages, builder pages,
   classic content. Attributes: `product`, `per_page`, `show_more`, `pagination`.
   Elementor users get a native “PVR Reviews” widget under its own panel category—
   it works with the free Elementor version.
 * **Reviews Block Widget Settings** — A dedicated tab with shortcode defaults (
   default product, reviews per page, Show more, page numbers) and a live shortcode
   builder — configure once and copy the shortcode.
 * **Flexible List Navigation** — Configurable reviews per page with an AJAX “Show
   more” button and/or numbered pagination. Navigation always stays on the current
   page and AJAX rebuilds keep the block’s own settings.
 * **Builder-Aware Asset Loading** — Shortcode and widget content is detected inside
   Elementor, Bricks and Breakdance page data (even when the classic content is 
   empty), so assets load exactly where the block is used — and nowhere else.
 * **Standalone Review Form Widget** — Place the complete review form on any page(
   e.g. a “Share Your Experience” page) with the [pvr_review_form] shortcode. Includes
   a product autocomplete with thumbnails; products can be preselected via the shortcode
   attribute, URL parameter or saved defaults.
 * **Form Field Controls** — Turn the reviewer avatar, photo upload, video upload,
   product info, Pros/Cons, phone and city on or off; separate Disabled options 
   for review replies and helpful voting.
 * **Reviewer Avatars** — Allow customers to upload custom profile pictures with
   an interactive crop tool.
 * **Helpful Voting System** — Visitors can vote whether a review was helpful or
   not.
 * **Store Owner Replies** — Respond publicly to customer reviews with a verified
   store badge.
 * **Rich Snippets & Schema Markup** — Google Rich Snippets support (`AggregateRating`
   and `Review` JSON-LD) out of the box.
 * **Email Notifications** — Configurable email alerts for new reviews and customer
   replies.
 * **Design Tab** — Match your brand: light/dark/auto color scheme, custom accent,
   card and text colors, and corner radius, all applied through CSS variables.
 * **Theme-Friendly Templates & Filters** — Theme-overridable templates (review 
   item, list and form) plus documented output filters and hooks for deep customization.
 * **Anti-Spam & Moderation** — Built-in honeypot protection, IP rate limiting, 
   and optional Google reCAPTCHA v3 support.
 * **Multilingual & Translation Ready** — Bundled translations for English, Spanish,
   French, German, Polish, Brazilian Portuguese, and Russian.

#### Pro Features

 * **Automated Review Reminders** — Schedule automated follow-up emails after completed
   orders to request reviews.
 * **Review Discount Coupons** — Incentivize customers by automatically sending 
   discount coupons for text, photo, or video reviews.
 * **Multi-Criteria Ratings** — Define custom rating criteria (e.g. Quality, Size,
   Shipping) per product category.
 * **SEO All Reviews Page** — Dedicated store-wide review hub with category filters
   and auto-generated, customizable SEO titles and meta descriptions for search 
   traffic.
 * **SEO Landing Pages** — Dedicated landing pages for exact category/manufacturer
   combinations and for single products — each with its own H1, title and meta description
   built from templates (`%product%`, `%count%`, `%rating%`, `%category%`, `%manufacturer%`,
   plus ready-made media phrases like `with 5 photos and 3 videos` that simply drop
   out when a product has no media). Product landings get their WordPress page created
   automatically; optional noindex per page.
 * **Mass Generation & Cleanup** — Bulk-create landing pages for products that match
   your criteria (category + minimum reviews), and bulk-delete the ones that stop
   matching. Batched with live progress, a confirmation above 200 pages and a 500-
   per-run cap — and manually edited pages are never deleted.
 * **Review Carousels & Grid Widgets** — Showcase your best reviews anywhere using
   flexible shortcodes and responsive sliders.
 * **Analytics Dashboard** — Track review volume, media coverage, coupon redemption
   rates, and rating distributions.

#### How It Works

 1. Install and activate the plugin.
 2. An enhanced review form with photo/video upload automatically appears on your WooCommerce
    product tabs — or keep your theme’s block and switch the replacement off in one
    click.
 3. Shoppers upload media; videos compress smoothly in their browser.
 4. Reviews appear instantly with rich media galleries, helpful voting, and store reply
    threads.
 5. Place the block anywhere: `[pvr_reviews]` for the full reviews list, or `[pvr_review_form]`
    for a standalone “Share Your Experience” page — both work in any page builder, 
    and Elementor gets a native widget.

#### Developer Friendly

 * Built entirely on native WordPress comments (`comment_type = 'review'`).
 * Custom tables with `{$wpdb->prefix}pvr_` prefix for scalable performance.
 * No external server dependencies or cloud subscription required.
 * Comprehensive actions and filters for deep theme and plugin customization.

### Live Demo

See PVR Media Reviews for WooCommerce in action on our live demo site:

[demo.pv-reviews.site](https://demo.pv-reviews.site/)

### External Services

This plugin optionally connects to Google reCAPTCHA v3 to protect review submissions
from spam.

 * **What it is:** Google reCAPTCHA is a security service that distinguishes humans
   from bots.
 * **What data is sent:** The reCAPTCHA token (generated client-side) and the page
   action label are sent to Google’s verification endpoint when a review is submitted.
   No personal data beyond the IP address (which is handled by Google’s own privacy
   policy) is transmitted.
 * **When it is sent:** Only when the “reCAPTCHA” option is enabled in plugin settings
   AND a visitor submits a review.
 * **Links:**
    - [Google reCAPTCHA Terms of Service](https://policies.google.com/terms)
    - [Google Privacy Policy](https://policies.google.com/privacy)

Note: Reviewer avatars are uploaded and stored locally on your WordPress server.
This plugin does not use Gravatar or any external avatar service. Avatars are managed
entirely through the plugin’s own upload system (PVREV_Avatar class) and stored 
in the WordPress uploads directory.

## Screenshots

[⌊Customer review form on the product page with avatar upload, star rating selection,
and text fields.⌉⌊Customer review form on the product page with avatar upload, star
rating selection, and text fields.⌉[

Customer review form on the product page with avatar upload, star rating selection,
and text fields.

[⌊Drag-and-drop media upload area with instant generated thumbnail previews and 
photo rotation controls.⌉⌊Drag-and-drop media upload area with instant generated
thumbnail previews and photo rotation controls.⌉[

Drag-and-drop media upload area with instant generated thumbnail previews and photo
rotation controls.

[⌊In-browser video compression in action with real-time progress preview and zero
server load.⌉⌊In-browser video compression in action with real-time progress preview
and zero server load.⌉[

In-browser video compression in action with real-time progress preview and zero 
server load.

[⌊Product review block displaying customer reviews, store owner reply badges, attached
media thumbnails, and top product media showcase strip.⌉⌊Product review block displaying
customer reviews, store owner reply badges, attached media thumbnails, and top product
media showcase strip.⌉[

Product review block displaying customer reviews, store owner reply badges, attached
media thumbnails, and top product media showcase strip.

[⌊Interactive review modal showing full review details on the right with built-in
video player or high-resolution photo on the left.⌉⌊Interactive review modal showing
full review details on the right with built-in video player or high-resolution photo
on the left.⌉[

Interactive review modal showing full review details on the right with built-in 
video player or high-resolution photo on the left.

[⌊Clean, modern admin settings panel showing structured tabs and primary configuration
options.⌉⌊Clean, modern admin settings panel showing structured tabs and primary
configuration options.⌉[

Clean, modern admin settings panel showing structured tabs and primary configuration
options.

[⌊Full product media gallery view with large thumbnails opening original media and
attached review details.⌉⌊Full product media gallery view with large thumbnails 
opening original media and attached review details.⌉[

Full product media gallery view with large thumbnails opening original media and
attached review details.

[⌊Custom criteria product ratings with visual progress breakdown per category (Pro).⌉⌊
Custom criteria product ratings with visual progress breakdown per category (Pro)
.⌉[

Custom criteria product ratings with visual progress breakdown per category (Pro).

[⌊Automated review reminder emails and dynamic coupon incentives dashboard (Pro).⌉⌊
Automated review reminder emails and dynamic coupon incentives dashboard (Pro).⌉[

Automated review reminder emails and dynamic coupon incentives dashboard (Pro).

## Installation

 1. Upload the plugin files to `/wp-content/plugins/pvr-media-reviews-for-woocommerce/`,
    or install via the WordPress Plugins directory.
 2. Activate the plugin through the ‘Plugins’ menu in WordPress.
 3. Ensure WooCommerce is installed and active.
 4. Navigate to **PVR Media Reviews > Settings** to customize upload limits, email 
    notifications, and display options.

## FAQ

### Can customers upload photos and videos to WooCommerce reviews?

Yes. PVR Media Reviews adds intuitive photo and video upload fields to your WooCommerce
review forms, enabling customers to easily attach images and video clips to their
feedback.

### Does this plugin slow down my web server?

No. All video compression happens directly inside the customer’s browser before 
upload. Because your server never handles raw, uncompressed video, there is zero
extra CPU load, no FFmpeg requirement, and no need for specialized video hosting.

### Does it support Google Rich Snippets (Star Ratings in Search)?

Yes. The plugin automatically adds Schema.org structured data (`AggregateRating`
and `Review` JSON-LD) to your product pages so star ratings can display in Google
search results. It is fully compatible with WooCommerce, Yoast SEO, and Rank Math.

### Does this plugin replace WooCommerce reviews?

Not the data — reviews stay 100% native WordPress comments, fully portable and compatible
with other WooCommerce tools. On product pages the plugin replaces the theme’s reviews
_block_ with its own richer one (summary, media, voting, replies), and this is controlled
by a single “Replace the theme reviews block” switch in General Settings — turn 
it off and the theme’s block stays untouched.

### What video formats and sizes are supported?

The plugin supports MP4, WebM, and MOV video formats. The maximum video upload size
defaults to 500 MB (fully configurable in settings), and videos can be automatically
compressed in the browser.

### Does it work without WooCommerce?

No. PVR Media Reviews requires WooCommerce to be installed and active.

### Can I place the review form on a custom page?

Yes. Use the [pvr_review_form] shortcode on any page or post — for example a standalone“
Share Your Experience” page. With picker=”yes” the customer chooses a product by
name (with thumbnails and optional review counts). Products can also be preselected
via the product attribute, the ?pvr_product= URL parameter, or the saved default
in the Review Form Widget settings tab.

### Can I show the reviews block on a page built with Elementor, Divi, Bricks or Breakdance?

Yes. Elementor users get a native “PVR Reviews” widget (it works with the free Elementor
version). In any other builder use its built-in Shortcode element with `[pvr_reviews
product="123"]` — attributes let you set the product, reviews per page, “Show more”
and pagination. Content inside Elementor, Bricks and Breakdance page data is detected
automatically, so assets load even when the classic editor content is empty.

### Can I keep my theme’s reviews block?

Yes. Settings  General  “Replace the theme reviews block” controls the replacement.
Turn it off and the theme keeps its native block — plugin scripts and styles are
not loaded on product pages at all, so they don’t slow the page down. Reviews still
work normally: they are saved, moderated and notified as usual.

### Can I create SEO landing pages for reviews?

In the Pro version, yes — for category/manufacturer combinations and for individual
products. Each landing gets its own H1, title and meta description from templates
with variables like %product%, %count%, %rating%, %category%, %manufacturer% and
ready-made media phrases (they drop out automatically when a product has no photos
or videos). Product pages are created automatically, and mass generation/deletion
lets you create or clean up hundreds of them by criteria such as category and minimum
review count.

### Can I customize the design of the review section?

Yes. The Design tab controls the color scheme (light/dark/auto) and the accent, 
card, text and border colors plus corner radius — all applied through CSS variables.
Templates (review-item.php, review-list.php, review-form.php) can be overridden 
from your theme, and output filters such as pvrev_review_item_html let you adjust
the markup without touching plugin files.

### Can I disable replies, voting or media uploads?

Yes. “Who can reply” and “Who can vote” include a Disabled option, and the reviewer
avatar, photo upload, video upload and product info blocks can each be turned off
in Settings  Display fields. All toggles are enforced server-side, not just hidden.

### Is there a Pro version?

Yes. The Pro version unlocks automated review reminder emails, discount coupons 
for reviews, custom category criteria ratings, review carousels/grids, an analytics
dashboard, a dedicated SEO All Reviews hub, and SEO landing pages for categories,
brands and single products — with template-driven titles/meta descriptions plus 
mass generation and cleanup of those landing pages.

### What PHP version is required?

PHP 7.1 or higher (PHP 7.4+ or 8.x recommended).

## Reviews

![](https://secure.gravatar.com/avatar/3097cb4d8f9d592930f5f9cb249fe7cb7c50c087e4381da761f02380ffffc367?
s=60&d=retro&r=g)

### 󠀁[Solved my reviews problem in one evening](https://wordpress.org/support/topic/solved-my-reviews-problem-in-one-evening/)󠁿

 [nazar23](https://profiles.wordpress.org/nazar23/) October 16, 2026

I put off fixing my reviews for months because I thought I'd need a developer. My
theme's review section looked off, and on my Elementor-built product pages, the 
WooCommerce reviews tab wasn't showing up at all. I didn't want to mess with templates
or hire someone to fix it.This plugin sorted it out. I enabled the option to replace
the theme's review section, and the new layout looked much better. It also supports
customer photos and voting, which was a nice bonus.I'm using Rank Math, and everything
seems to work fine with it. I also like that the reviews remain standard WordPress
comments, so I'm not locked into a separate review database.The Elementor widget
was easy to set up, and I was able to display reviews on my landing pages too. I've
been using it for a few weeks now without any issues.One thing I'd like to see is
a rating breakdown directly on the product page, without having to open the analytics
screen. Other than that, it does what I need.

![](https://secure.gravatar.com/avatar/2666122c180a204b56274555fc845c91268b6455b2a4e20b20ae40996e946191?
s=60&d=retro&r=g)

### 󠀁[Excellent comfortable](https://wordpress.org/support/topic/excellent-comfortable/)󠁿

 [Stev Kooper](https://profiles.wordpress.org/surxsur/) October 9, 2026

I used to avoid asking customers for video reviews. Phone videos are large, and 
hosting space isn’t unlimited. When a customer sent me a clip, I’d have to download
it, compress it, and upload it again myself. With PVR, the video is compressed in
the browser as part of the upload, so that whole extra step is gone.I also like 
that the review form isn’t locked into one fixed layout. I could turn off fields
I don’t need and adjust the appearance to fit my store. I haven’t explored every
option yet, but it already feels much easier to work with than I expected.

 [ Read all 2 reviews ](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/)

## Contributors & Developers

“Photo & Video Reviews for WooCommerce — PVR Media Reviews” is open source software.
The following people have contributed to this plugin.

Contributors

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

[Translate “Photo & Video Reviews for WooCommerce — PVR Media Reviews” into your language.](https://translate.wordpress.org/projects/wp-plugins/pvr-media-reviews-for-woocommerce)

### Interested in development?

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

## Changelog

#### 1.2.6

 * New: reviews import wizard (Import / Export  Reviews): import from a Judge.me
   CSV export or the Judge.me Private API, and from any store CSV with automatic
   field mapping — products are matched by handle / Shopify ID, or by store product
   ID, SKU and name; review photos are downloaded into the local storage, re-runs
   are duplicate-safe, and the import can be stopped, resumed and rolled back
 * New: reviews export to CSV with an optional status filter — the columns match
   the import, so an exported file can be re-imported without mapping anything manually
 * Improvement: the Import / Export and Import Reviews tabs are merged into one 
   tab with Settings and Reviews sub-tabs

#### 1.2.5

 * New: the review details modal now shows the product card (photo, name and link)
   at the top of the sidebar — reviews opened from the all-media gallery, the all-
   reviews hub, My Reviews or the reviews strip always show which product they belong
   to; the card follows the review while flipping through, on desktop and on mobile
 * Fix: the Reply button in the review details modal works on every surface that
   renders review cards — the reply form modal is now a shared template printed 
   once per request (media gallery, all-reviews hub, My Reviews, standalone review
   form), where it used to exist only inside the reviews list
 * Improvement: review cards resolve product data once per product per request instead
   of one product lookup per card

#### 1.2.4

 * New (Pro): `[pvr_media_gallery]` media gallery block — customer photos and videos
   on any page with All/Photos/Videos chips, category and manufacturer dropdowns,
   infinite scroll and a native Elementor widget; defaults and a live shortcode 
   builder in Settings  Widgets  Media Gallery
 * New (Pro): thumbnail format for the gallery — 2:3 (default), 1:1, 3:4, 4:3, 3:
   2, 9:16, 16:9, 5:4, 4:5, 21:9 — set globally in the gallery settings or per shortcode
   via the `ratio` attribute
 * Fix: the Elementor widget registers reliably on Elementor 3.5+ and 4 — on Elementor
   4 the widget silently disappeared because the old load hook fires before Widget_Base
   exists
 * Fix: saving a page in the block editor no longer fails with “Updating failed.
   The response is not a valid JSON response.” when a plugin shortcode is on the
   page — shared frontend templates are buffered and are never echoed into REST/
   AJAX JSON responses
 * Improvement: clicking a media thumbnail opens the review details modal instantly—
   a skeleton is shown while the review loads instead of a click that appears to
   do nothing
 * Improvement: the details modal shows the full “Lightbox Image Max” image — the
   small tile preview is no longer stretched into the popup
 * Improvement: the review sequence in the details modal (prev/next) follows the
   gallery block’s own sort and filters; product pages and the all-reviews hub keep
   their own order
 * Improvement: new strings added to the English, Russian and Spanish translation
   catalogs

#### 1.2.3

 * New (Pro): SEO landing pages for individual products — the WordPress page with
   the reviews block is created automatically, with its own H1, title and meta description
   built from templates (%product%, %count%, %rating%, %category%, %manufacturer%,%
   site_name%) and ready-made media phrases like “with 5 photos and 3 videos” that
   disappear when the counts are zero; optional noindex per page
 * New (Pro): Mass generation and cleanup of landing pages — bulk-create pages for
   products matching category and minimum-review criteria in progress-tracked batches(
   confirmation above 200 pages, 500 per run), and bulk-delete landings that stop
   matching; manually edited pages are never deleted
 * Fix: uploaded videos, thumbnails and avatars are no longer stored with 0600 permissions—
   every file the plugin moves is normalized to public read permissions, so media
   URLs no longer answer 403
 * Improvement: numbered pagination links in the reviews block stay on the current
   page — a [pvr_reviews] block on a landing page no longer navigates to the product
   page
 * Improvement: the AJAX “Show more” rebuild keeps the block’s own Show more and
   pagination settings instead of resetting them to the General tab values
 * Improvement: readme description refreshed with the reviews block toggle, the [
   pvr_reviews] shortcode, the Elementor widget and page-builder support

#### 1.2.2

 * New: “Replace the theme reviews block” toggle in Settings  General (on by default).
   When off, the theme keeps its own reviews block and plugin scripts and styles
   are no longer loaded on product pages
 * New: `[pvr_reviews]` shortcode renders the full reviews block — rating summary,
   review list, write-review modal and media gallery — on any page, for page builders
   that never render the WooCommerce reviews tab (Elementor, Divi, Bricks, Breakdance).
   Attributes: `product`, `per_page`, `show_more`, `pagination`
 * New: Settings  “Reviews Block Widget” tab with the shortcode defaults (default
   product, reviews per page, Show more, page numbers) and a live shortcode builder
 * New: native Elementor widget “PVR Reviews” (panel category PVR Reviews, current
   or manual product) — works with free Elementor
 * Improvement: page-builder content is detected in post meta (Elementor, Breakdance,
   Bricks), so front-end assets load on builder pages even when the page has no 
   classic content — this also fixes asset loading for the existing `[pvr_review_form]`
   shortcode on such pages
 * Improvement: on a product page the shortcode resolves the current product automatically,
   and duplicate protection keeps only one reviews block per page — the shortcode
   and the product-page replacement yield to each other in either order
 * Fix: the write-review button on a builder page now follows the target product’s
   comment status instead of the surrounding page’s
 * Fix: escaped quotes inside builder JSON no longer break product resolution for
   embedded shortcodes

#### 1.2.1

 * New: optional review title (headline) — the “Show review title” toggle in Settings
   General  Display fields with Title Min/Max in Settings  Limits & Anti-spam. Min
   = 0 (default) keeps the field optional; any Min > 0 marks it required with the
   standard asterisk and validation on both ends. The headline renders at the top
   of the review text on product pages, in My Reviews, in the all-reviews hub and
   inside the review details modal, survives a product switch mid-form, and can 
   be edited in the admin review editor
 * Fix: the admin review editor can no longer wipe a title supplied by an external
   integration — the headline meta is written only when the request actually contains
   one, and the editor sends the field only when its input exists
 * Fix: admin review and reply saves no longer apply the old hardcoded 2,000/5,000-
   character trims — a trusted editor can curate any stored content; saves are bounded
   only by WordPress column limits (250/100 characters for names, a 16,000-character
   body ceiling), each reported with a visible error instead of a silent database
   trim
 * Fix: review and reply bodies stop at the same physical 16,000-character ceiling
   on every save path including the front end, so a permissive MySQL can never silently
   truncate the 64KB text columns when limits are set to 0
 * Fix: the guest name limit is clamped to the WordPress column size everywhere —
   min(Name Max, 250) in validation and on the form input — instead of trusting 
   a setting that could exceed the database
 * Fix: status-only reply updates from the Comments list (approve without re-sending
   content) no longer fail the required-fields check and no longer risk clearing
   the reply’s author, content or store-owner flag
 * Fix: the admin review editor shows the server’s validation message on a failed
   save instead of a generic error
 * Improvement: the moderation notice under the Submit Review button was removed,
   the review details modal now shows the headline for My Reviews cards too, and
   the form section-title spacing is hardened against theme CSS overrides

#### 1.2.0

 * New: daily reply rate limits — “Replies from IP / Day” and “Replies from User/
   Day” in Settings  Limits & Anti-spam (0 disables them), mirroring the review 
   limits
 * Security: one shared client-IP resolver now backs votes, review/media rate limits,
   upload tokens and reCAPTCHA — Cloudflare’s CF-Connecting-IP is trusted only when
   the direct peer is a Cloudflare address, and X-Forwarded-For only behind a private
   proxy, so spoofable headers can no longer mint fresh voter identities; behind
   Cloudflare the daily review limit counts per visitor instead of per shared edge
   IP
 * Security: votes are rejected for non-review comments, and unapproved reviews 
   can no longer be fetched by comment ID through pvrev_get_review_html (moderators
   keep access)
 * Security: guest avatar uploads now require the same time-limited page upload 
   token as review media; the media upload endpoint enforces the per-review photo/
   video counts on the server; guest uploads can only attach media to reviews submitted
   from the same IP address
 * Fix: the second and every following logged-in vote on the same review returned
   a 500 error (an empty ip_hash collided with the unique index on the votes table)
 * Fix: Review Max = 0 no longer silently truncates review text to 5,000 characters
   on save; Reply Min/Max are validated on the server with a visible message instead
   of a hardcoded 2,000-character trim; the review form name input is capped at 
   the WordPress 250-character column limit (documented in the Limits tab)
 * Fix: the media IDs posted with a review are now included in the pvrev_review_normalize_rating
   filter payload (they were missing)
 * Fix: in the review details modal the first prev/next click at the edge could 
   be swallowed while a batch request was in flight — queued edge clicks are now
   dispatched when the response lands; jumping from the media gallery to a review
   no longer clears the cards accumulated by the infinite flip-through
 * Improvement: rate-limit labels and error messages for reviews and replies are
   now translated in all 7 bundled languages (previously always English)

#### 1.1.9

 * Fix: “You do not have permission to leave a review.” when “Who can review” is
   set to “Only customers (bought product)” — the submit-side permission check ran
   without the product ID, and an admin-ajax.php request has no product-page context,
   so the purchase check never started (and the mode-specific error message was 
   unreachable). Registered buyers can submit reviews again
 * Fix: the same missing product ID for replies — “Who can reply = Only customers(
   bought product)” rejected every reply. Reply visibility and reply submission 
   now pass the review’s product explicitly; pvr_can_reply remains the only setting
   that gates replies
 * New: “Show only available products” in Settings  Review Form Widget — the product
   selector lists only products the current visitor may review (only their purchased
   products in “Only customers” mode), and product pages hide the “Write a review”
   button for products they cannot review; visitors who may review nothing get an
   empty selector instead of a missing form

#### 1.1.8

 * New: the product picker on the standalone form opens the full product list as
   soon as the field is focused — customers can recognise their product without 
   recalling its exact name, while typing still filters exactly as before; add list
   =”no” to [pvr_review_form] to keep the previous search-first behaviour
 * Improvement: picker placeholder is now “Search or select a product…”
 * Improvement: the shortcode’s limit and sort attributes are respected by the picker’s
   AJAX results (the list size was previously hardcoded to 100 and search results
   were always relevance-ordered)
 * Improvement: picker requests are sequenced, so a slow earlier response can no
   longer overwrite a newer one
 * Improvement: picker results announce aria-expanded correctly to screen readers
   when they contain a “no results” message
 * Fix: the “Please fill in all required criteria.” error was shown once per product
   change on the standalone form — the form’s submit listener was re-bound every
   time the picker re-rendered the form
 * Fix: the avatar crop dialog no longer accumulates a window resize listener on
   every product change
 * Fix: pressing Enter while the open product list had no highlighted row submitted
   the form
 * Fix: on the standalone form the success screen is sticky — the “Thank you for
   your review!” message stays until another product is picked or the page is reloaded(
   the product-page modal keeps its Close button and 5-second auto-close), and picking
   a new product clears the leftover upload state

#### 1.1.7

 * Fix: standalone review form ([pvr_review_form]) with the product selector — media
   upload now works after changing the selected product (the uploader re-binds its
   event handlers when the form is re-rendered)
 * New: the product picker starts in a neutral state — no product is preselected,
   the form header shows no product card, and submitting without a selection shows
   a “Please select a product first” message (explicit selection via the product
   attribute, URL parameter or saved default still preselects)
 * Improvement: switching the selected product no longer wipes what the customer
   has already typed — review text, title, pros/cons, name/email, rating and criteria
   selections are preserved across the product change
 * Fix: the Reviews Page ([pvr_all_reviews]) now loads its styles and scripts correctly
   on WordPress 6.9+ — enqueues with unregistered dependencies are rejected since
   6.9, and the shared frontend assets are now registered explicitly before the 
   page-specific ones
 * Improvement: Submit Review / Submit Reply buttons are right-aligned in the review
   and reply forms
 * Improvement: products without a featured image show a neutral image placeholder
   instead of an empty box in the product picker and the selected-product row
 * Improvement: product picker list is cached for 10 minutes to reduce database 
   load on high-traffic pages
 * Improvement: media limits are clamped consistently to 0–10 on both the front-
   end and the server
 * Cleanup: removed the redundant “You can remove files or rotate photos” hint below
   the media uploader

#### 1.1.6

 * New: form field toggles in Settings  General  Display fields — separately disable
   the reviewer avatar, photo upload, video upload, and the product photo/name shown
   in the review form; all toggles are enforced server-side (upload requests are
   rejected, limits drop to zero), not just hidden in the UI
 * New: “Disabled” option for “Who can reply” and “Who can vote” — fully turn off
   review replies or helpfulness voting (the Reply button and the “Was this review
   helpful?” block are hidden and the AJAX endpoints reject direct requests)
 * Improvement: Submit Review / Submit Reply buttons are now aligned to the right
   of the form
 * Improvement: product picker accessibility — proper combobox/listbox/option roles,
   aria-expanded and keyboard navigation announcements for screen readers
 * Improvement: products without a featured image show a neutral image placeholder
   instead of an empty box (picker results and the selected-product row)
 * Improvement: product picker list is cached for 10 minutes to reduce database 
   load on high-traffic pages
 * Fix: media limits are now clamped consistently to 0–10 on both the front-end 
   and the server, so entering a higher number in the admin no longer causes client/
   server validation to disagree
 * Fix: schema auto-repair now backs off for an hour after a failed attempt instead
   of re-running the repair on every request
 * Fix: product picker dropdown could silently fail to render results due to a JavaScript
   indexing error

#### 1.1.5

 * Fix: runtime database schema guard — if PVR’s custom tables are missing (e.g.
   the site was deployed by copying files/DB without running plugin activation, 
   or the database user lacks CREATE privileges), the plugin now detects this automatically,
   creates the missing tables non-destructively, restores review submissions, and
   shows an admin notice describing what was repaired or what blocked the repair.
   Previously this situation caused “Failed to save review” errors on submission
   while the WooCommerce review itself was still created

#### 1.1.4

 * New: Review Form widget — the complete PVR review form (rating, title, text, 
   pros/cons, photo/video upload, moderation flow) can now be rendered on any page
   or post with the [pvr_review_form] shortcode and assigned to a specific WooCommerce
   product. Perfect for a standalone “Share Your Experience” page during early-stage
   launches
 * New: product selector with name autocomplete — search products by title with 
   photo thumbnails, optional approved-review counts per option, keyboard navigation(
   arrows/Enter/Escape); changing the product re-renders the form in place so rating
   criteria always match the selected product
 * New: “Review Form Widget” settings tab — configure defaults (default product,
   picker mode, custom picker label, list size, category filter, product ordering,
   review counts) and build the shortcode with a live preview builder
 * New: shortcode attributes — product, picker, limit, category_id, sort (title /
   newest / rating), counts, picker_label, exclude, ids; attributes override the
   saved defaults
 * New: per-link product preselect — append ?pvr_product=123 (alias ?product_id=
   123) to the page URL to point the form at a product without editing the shortcode
 * Design: unified review form — product photo and name shown in the form header
   on product pages and the standalone widget, clear section labels (Your profile),
   compact 56px reviewer avatar with stacked name/Change photo layout, rating criteria
   without nested cards, lighter upload zone, reduced review textarea height
 * Fix: the pvrev_frontend_data filter is now actually applied to the localized 
   front-end config (previously registered but never invoked, so third-party modifications
   and permission flags were silently ignored)
 * Fix: product and category autocomplete in the admin (Widgets tab and review editor)
   sent requests to unprefixed action names and always failed with a 400 error; 
   response keys also normalized so selecting a product fills the hidden field correctly

#### 1.1.3

 * New Design tab — full color scheme customization for the review section: Light/
   Dark / Auto scheme, custom accent, star, card, surface, text, muted text, border
   and link colors (applied site-wide as CSS variables) and corner radius; no CSS
   knowledge required
 * Color scheme Auto mode now detects the site theme itself instead of the visitor’s
   operating system — dark review cards no longer appear on light sites when the
   visitor uses OS dark mode; genuinely dark sites still get the dark palette automatically
 * Template overrides: review-item.php, review-list.php and review-form.php can 
   now be copied into the theme’s “pvr-media-reviews-for-woocommerce/” folder and
   customized (child theme  parent theme  pvrev_template_path filter  plugin); an
   admin notice warns when a copied template becomes outdated after a plugin update
 * New developer filters: pvrev_review_item_html (single review card HTML, everywhere
   it renders), pvrev_review_list_html (the whole rendered reviews section), pvrev_frontend_css_vars(
   programmatic CSS variable overrides) — completing the front-end branding toolkit
   alongside the existing hooks
 * Admin: the Design tab moved next to System Info at the end of the settings tabs
 * Translations updated (EN, RU, ES)

#### 1.1.2

 * All-media grid: fixed “Show all media” on the reviews hub opening without filters;
   new photo/video filter, media is now grouped by review in page order, skeleton
   loading placeholders replace the “Show more” button with seamless infinite scrolling,
   and thumbnails load lazily
 * Details modal: flipping through media reviews now continues infinitely in both
   directions — additional reviews are loaded in the background (previously limited
   to the reviews rendered on the page); neighboring full-size photos are preloaded
   so navigation feels instant
 * Media: new default image quality presets (thumbnails 90%, modal preview 80%, 
   lightbox 70%) for lighter pages; generated images are never upscaled beyond the
   original size; fixed a WebP quality bug where the per-format quality was silently
   discarded during format conversion
 * Review Widgets (Pro): block titles are now configurable per widget — custom text,
   HTML tag (h2–h5/div) and additional CSS classes for matching your theme styles(“
   Title Selector” field); the live shortcode preview includes the title attributes
 * Review Widgets (Pro): fixed the settings page jumping back to the carousel sub-
   tab after saving on the grid sub-tab, and the shortcode preview losing its values
   after save
 * Admin: the License tab no longer shows a stray Renew link for lifetime licenses(
   a CSS rule was overriding the hidden attribute); after a failed renewal the Renew
   link is now a prominent colored button matching the license state (orange during
   the grace period, red when Pro is disabled)
 * Translations updated (EN, RU, ES)

#### 1.1.1

 * Emails & Notifications: admin notification, customer confirmation and reply emails
   are rebuilt with a shared branded template; new accent color settings (gradient
   + text color) style the email header, buttons and coupon badge; store logo, name,
   phone and email are shared across all emails
 * Emails & Notifications: the admin now receives a media follow-up email when photos/
   videos finish uploading to an already-approved review; duplicate admin/author
   notifications are fixed; the customer confirmation is sent when a review is approved
   manually, including bulk approve
 * Emails & Notifications: the plugin From name/address is now applied only to plugin
   emails instead of overriding all site emails
 * Reviewer avatars: avatar URLs are now versioned by file modification time, so
   updated avatars appear immediately instead of staying cached in the browser
 * Admin: the License tab shows the license type (“Lifetime” or “Expires: date”),
   adds a Renew row after a failed renewal attempt and a “Re-install” button on 
   the Plugin Updates card; new confirmation dialogs for deleting an issued coupon
   and restoring reminder templates
 * Review Widgets (Pro): new per-breakpoint display settings for the carousel and
   grid (slides, columns, navigation, pagination, autoplay, inertia, avatar and 
   thumbnail sizes) with a live shortcode builder, previewable in the free version
 * Review editor: the bottom of the admin review editor is now extensible via the
   pvrev_admin_review_edit_bottom hook
 * Reviews: approving reviews via bulk actions now sends the customer confirmation
   email (numeric status was not recognized)
 * Landing Pages (Pro): fixed landing pages silently failing to save after a plugin
   update — the database table is now created automatically on save and any database
   error is reported in the admin instead of being swallowed
 * Translations updated (ES, FR, DE, PL, PT-BR)

#### 1.1.0

 * License server migrated to a new domain (admin.pv-reviews.site) — license validation,
   Pro upgrades and automatic updates now point to the new address; installs must
   update to 1.1.0 to keep checking licenses after the old domain shutdown
 * Coupons (Pro): default texts for the customer email message and the review-form
   notice are now prefilled in settings as editable examples
 * Coupons (Pro): usage restrictions moved to a dedicated sub-tab with searchable
   multi-select pickers for products and categories (no more manual ID lists) and
   detailed field descriptions
 * Coupons (Pro): the tab is now organized into sub-tabs (General / Usage Restrictions/
   Email Template / Frontend Display)
 * Pros/Cons: new “Min” length limit setting; when set, Pros/Cons fields become 
   required and are validated on the client and server (“Pros/Cons too short (min%
   d chars)”)
 * Review form: media section title and limits are now dynamic (“Photos”, “Videos”
   or “Photos & Videos” with correct per-type limits); the section is hidden when
   both limits are 0
 * Upload previews now display the file size of each prepared (compressed) file
 * Admin: fixed settings assets not loading when the screen hook differs from the
   menu slug
 * Admin: reply auto-approve setting clarified (“Auto-approve comments” with description)
   and moved up in the Replies tab
 * Admin: third-party Sortable.js library updated to 1.15.7; update-check AJAX errors
   now return a readable message instead of a fatal

#### 1.0.9

 * Landing Pages (Pro): the list moved below the form with live search (category/
   manufacturer/H1), status filter, pagination and inline status toggles; editing
   highlights the row, and the form stays on the Landing Pages sub-tab after saving
 * Landing Pages (Pro): fixed “The link you followed has expired” error when saving
   or deleting landing pages
 * Analytics (Pro): new date-range filter (7/30/90 days / all time), cached aggregates
   with manual refresh, reviews trend chart, monthly dynamics, “Needs Attention”
   low-rated products table, and new KPIs: pending moderation, verified buyers, 
   reply rate, helpful ratio
 * Widgets (Pro): new “Review scope” option — show reviews of products from the 
   current product category (optionally including child categories) when the shortcode
   is placed on a category page; shortcode attribute scope=”” added
 * Widgets (Pro): [pvr_reviews_carousel] and [pvr_reviews_grid] shortcodes are now
   built from current settings immediately, not only after changes
 * Landing Pages / SEO: fixed %category% and similar placeholders being corrupted
   on save (WordPress sanitize_text_field strips %XX sequences); templates are now
   sanitized with a placeholder-safe helper
 * Admin: fixed %placeholders% being corrupted when saving SEO template sets and
   landing page fields
 * Pro tab previews (free version) updated to reflect the actual Pro features
 * Performance: widget review queries and category product lists are now cached (
   1 hour, auto-invalidated on review changes)
 * Landing Pages (Pro): fixed a stale-nonce “link expired” error caused by the criteria
   admin handler intercepting landing POST actions

#### 1.0.8

 * Reviews Page (Pro): customer media strip between filters and sorting — all media
   from loaded reviews with a “Show all media” grid; new thumbnails append after“
   Show more”
 * Reviews Page (Pro): filter sections now have headers (Categories / Manufacturers),
   smaller filter buttons
 * Reviews Page (Pro): sorting restyled as text links with direction arrow (like
   the demo page)
 * Reviews Page (Pro): “Show more” is a text block with a refresh icon and remaining-
   count (“Show 12 more reviews out of 37”); pagination now follows the loaded pages
 * Reviews Page (Pro): fixed an invalid wpdb::prepare call notice when no filter
   was selected
 * Reviews Page (Pro): removed a stray closing script tag on the System Info tab;
   fixed .htaccess block preview detection
 * Emails & Notifications: plugin From name/address is now applied only to plugin
   emails (no longer overrides all site emails)
 * Emails & Notifications: fixed duplicate admin/author notifications when reviews
   have media
 * Emails & Notifications: author confirmation is now sent when a review is manually
   approved
 * Coupons (Pro): coupons are now actually issued (hook name mismatch fixed); correct
   reward type for reviews with media; no coupons for reviews pending moderation
 * Reminders (Pro): fixed broken unsubscribe link, unsubscribed customers are skipped
 * Reminders (Pro): fixed broken UTF-8 encoding in multipart emails
 * System Info: fixed “Change PHP Limits” never working on Apache (invalid IfModule
   wildcard), added CGI/FastCGI and LiteSpeed support; manual instructions updated
 * System Info: added clear notice that .user.ini changes take ~5 minutes (PHP-FPM/
   CGI cache) so users do not re-click “Apply Changes”

#### 1.0.7

 * Reviews Page (Pro): new manufacturer filter based on native WooCommerce Brands
 * Reviews Page (Pro): category and manufacturer filter lists are interdependent—
   only filters with reviews in the current scope are shown
 * Reviews Page (Pro): SEO template sets for Category, Manufacturer and combined
   filtering; HTML
 * Reviews Page: overlay spinner moved closer to the top of the loading overlay 
   for better visibility
 * Review widgets (Pro): Category filter now actually filters reviews in Grid and
   Carousel
 * Review widgets (Pro): media modal shows the full review text instead of a truncated
   excerpt
 * Review widgets (Pro): “Read more” button is available even when voting is restricted;
   voting permission is now checked against the reviewed product
 * Review Criteria (Pro): fixed criteria not being created/edited/deleted in admin(
   form field name mismatch), fixed status toggle failing due to nonce mismatch
 * Review Criteria (Pro): criteria summary on the product page is now license-gated
   and rendered via a hook
 * Assets are now cache-busted by file modification time so browser caches stay 
   fresh between updates

#### 1.0.6

 * Reviews Page: filtering, sorting and pagination now work without page reload (
   AJAX + pushState URL updates)
 * Reviews Page: loading overlay with spinner during AJAX filtering; per-request
   HTTP isolation improvements
 * Reviews Page: fixed pagination broken by canonical redirect (custom rpage param)
   and Show more AJAX action
 * Reviews Page: fixed Date sort direction and category SEO settings not persisting
 * License module: network requests are now fully isolated from frontend and admin
   page rendering (offline key validation only; server calls limited to daily cron
   and explicit License tab actions)
 * License module: fixed invalid regex when license domain uses wildcard notation(*.
   example.com)
 * License module: automatic reactivation attempts are now rate-limited (once per
   10 minutes)
 * Admin: file size is displayed under each media thumbnail in the review editor

#### 1.0.3

 * Added configurable default admin name setting (General Settings tab)
 * Fixed auto-approve mode setting not saving (missing from schema and save flow)
 * Fixed Pros & Cons toggle not saving (form field name mismatch with option key)
 * Fixed video/photo max size display in review form (trailing zeros were stripped
   incorrectly)

#### 1.0.2

 * Added translation support for Spanish, French, German, Polish, and Brazilian 
   Portuguese
 * Updated plugin banners and icons

#### 1.0.1

 * Minor bug fixes and stability improvements

#### 1.0.0

 * Initial release
 * Photo and video uploads for WooCommerce reviews
 * Client-side video compression using MediaRecorder API
 * Automatic video thumbnail generation
 * Helpful/unhelpful voting system
 * Store reply threads
 * Reviewer avatars with crop modal
 * Schema markup for rich snippets
 * Configurable email notifications
 * Custom rating criteria system (Pro)
 * Email review reminders (Pro)
 * Review coupons (Pro)
 * Analytics dashboard (Pro)
 * Carousel and grid review layouts (Pro)
 * All Reviews page with category/rating/helpfulness filters and SEO templating (
   Pro)
 * Full i18n support (English, Spanish, French, Russian, German, Polish, Brazilian
   Portuguese)

## Meta

 *  Version **1.2.6**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress Version ** 6.0 or higher **
 *  Tested up to **7.0.7**
 *  PHP Version ** 7.1 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/pvr-media-reviews-for-woocommerce/)
 * Tags
 * [customer reviews](https://en-au.wordpress.org/plugins/tags/customer-reviews/)
   [photo reviews](https://en-au.wordpress.org/plugins/tags/photo-reviews/)[product reviews](https://en-au.wordpress.org/plugins/tags/product-reviews/)
   [video reviews](https://en-au.wordpress.org/plugins/tags/video-reviews/)[woocommerce](https://en-au.wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://en-au.wordpress.org/plugins/pvr-media-reviews-for-woocommerce/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  2 5-star reviews     ](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/reviews/)

## Contributors

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

## Support

Issues resolved in last two months:

     7 out of 7

 [View support forum](https://wordpress.org/support/plugin/pvr-media-reviews-for-woocommerce/)