Title: lebedgor's Replies | WordPress.org

---

# lebedgor

  [  ](https://wordpress.org/support/users/lebedgor/)

 *   [Profile](https://wordpress.org/support/users/lebedgor/)
 *   [Topics Started](https://wordpress.org/support/users/lebedgor/topics/)
 *   [Replies Created](https://wordpress.org/support/users/lebedgor/replies/)
 *   [Reviews Written](https://wordpress.org/support/users/lebedgor/reviews/)
 *   [Topics Replied To](https://wordpress.org/support/users/lebedgor/replied-to/)
 *   [Engagements](https://wordpress.org/support/users/lebedgor/engagements/)
 *   [Favorites](https://wordpress.org/support/users/lebedgor/favorites/)

 Search replies:

## Forum Replies Created

Viewing 11 replies - 1 through 11 (of 11 total)

 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Advice on Adding Optional Review Titles](https://wordpress.org/support/topic/advice-on-adding-optional-review-titles/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [1 day, 5 hours ago](https://wordpress.org/support/topic/advice-on-adding-optional-review-titles/#post-19041428)
 * Hi,
 * I went the native route — it’s already implemented and shipped in **1.2.1**, 
   no customisation needed.
    - **Settings → General → Display fields** → toggle “Show review title” (off 
      by default).
    - **Settings → Limits & Anti-spam** → Title Min / Max. Min = 0 (default) = optional
      field; Min > 0 makes it required, with the asterisk and validation like any
      other field. The internal ceiling is 200 characters.
 * Once set, the title shows at the top of the review text on the product page, 
   in My Account → My Reviews, on the all-reviews hub and in the review details 
   modal. It also survives a product switch mid-form and is editable in the admin
   review editor.
 * Two notes: your storage finding was correct — it just had no UI attached. And
   the Product Picker’s `title` is unrelated: it’s the option to sort **products**
   by title in the selector.
 * One action on your side: you override `review-form.php` and `review-item.php`,
   and both changed in 1.2.1 (input + headline output) — the template-version notice
   will flag your copies for a one-time sync. I built this natively partly because
   there’s no hook to add fields to the submit payload, so a custom version would
   have required patching the frontend JS.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Character limits set to 0 still truncate review at 5,000 characters](https://wordpress.org/support/topic/character-limits-set-to-0-still-truncate-review-at-5000-characters/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [1 day, 6 hours ago](https://wordpress.org/support/topic/character-limits-set-to-0-still-truncate-review-at-5000-characters/#post-19041402)
 * Hi,
 * Thanks for flagging this – you were right that the admin handlers were missed,
   and your three requirements made us reconsider where the limits actually belong.
   Final behaviour after review:
    - **Customer form** – unchanged: Min/Max are the form contract; 0 means no limit,
      violations return a visible error, nothing is trimmed silently.
    - **Admin editors** – deliberately do **not** apply Review Max / Reply Max: 
      those settings govern what customers type, while a trusted editor must be 
      able to curate legacy or imported content even after a limit was tightened(
      the same reason minimums were never enforced on admin saves). The author name
      is capped only by the WordPress column limit (250 for reviews, 100 for replies)—
      the previous hardcoded 200 is gone.
    - **One physical safety ceiling everywhere** – WordPress stores review and reply
      bodies in 64KB text columns, and a permissive MySQL would trim longer input
      silently. Both front-end and admin saves now stop at 16,000 characters with
      a visible error instead, so nothing can ever disappear during a save regardless
      of settings.
    - **Title** – the intentional 200-character internal limit stays.
 * While there, the review editor now surfaces the server’s validation message on
   a failed save (previously a generic error), and a status-only save from the Comments
   list (approve without re-sending content) was fixed so it can no longer fail –
   or overwrite the reply content.
 * Min/Max remain front-end only on purpose: editing an older, shorter review or
   a longer one can never be blocked by a limit configured later.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Character limits set to 0 still truncate review at 5,000 characters](https://wordpress.org/support/topic/character-limits-set-to-0-still-truncate-review-at-5000-characters/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [2 days, 2 hours ago](https://wordpress.org/support/topic/character-limits-set-to-0-still-truncate-review-at-5000-characters/#post-19040701)
 * Hi,
 * Quick answers to your questions:
    - **0 means no limit** — for all four settings (Review, Name, Reply, Pros/Cons).
    - Your reading was correct: the hardcoded 5,000-character cut for reviews was
      a leftover that ignored the setting. It’s fixed — the save-time ceiling now
      follows Review Max, and at 0 nothing is truncated. The only remaining boundary
      is WordPress’s own comment column (~64KB), and exceeding it produces a visible
      save error, never silent loss.
    - **Reply** had the same problem in worse form: it was always trimmed to a hardcoded
      2,000 characters regardless of the setting. Reply Min/Max are now validated
      with a visible error message, and 0 means unlimited. **Pros/Cons** were already
      correct. **Name** was never truncated by the plugin, but WordPress’s own table
      caps the author field at 250 characters — the field now respects that, and
      it’s noted in the Limits tab.
    - **Title (200 chars)** — yes, that’s an intentional internal limit for a technical
      field. The review form has no title input, so customer reviews never carry
      one; it exists only for external integrations/legacy data.
    - Your main concern is addressed: nothing is silently removed during save anymore.
 * All of this ships in 1.2.0.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Only Customers (bought product) rejects a verified purchaser](https://wordpress.org/support/topic/only-customers-bought-product-rejects-a-verified-purchaser/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [2 days, 22 hours ago](https://wordpress.org/support/topic/only-customers-bought-product-rejects-a-verified-purchaser/#post-19039920)
 * Hi,
 * Your diagnosis was exactly right — both submit-side checks were called without
   the product ID, so `check_permission()` fell back to `global $product` / `get_the_ID()`,
   got 0 in the `admin-ajax.php` request and returned `false` before the purchase
   check ever ran. The form loaded fine because `handle_get_review_form()` does 
   pass the ID.
 * Fixed and released in **1.1.9**:
    - `PVREV_Review::submit()` now passes `$product_id` to the permission check.
    - I also removed the earlier duplicate check that fired first — it was masking
      the real error, which is why you saw the generic “You do not have permission
      to leave a review.” instead of the mode-specific one. You should now get “
      Only customers who bought this product can leave a review.” when the purchase
      check genuinely fails, and a successful submission when it passes.
    - The same bug existed for replies (`Who can reply = Only customers (bought 
      product)` rejected every reply) — also fixed.
 * Reply visibility and submission are still governed solely by `pvr_can_reply`;
   it is not tied to the review permission.
 * Please re-run your original test (same customer, same completed/processing order,`
   Only Customers (bought product)`) on 1.1.9.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Front-end customization of PVR Media Reviews](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [3 days, 21 hours ago](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/#post-19039015)
 * This makes sense at the plugin level, so I implemented it there rather than leaving
   it for VELARA to customize. It shipped in 1.1.8.
 * How the picker behaves now:
    - Focus/click on an empty field → the full product list opens immediately, no
      typing required.
    - The same happens when the field already holds the currently selected product—
      switching products becomes a one-click browse instead of re-typing the name.
    - If the field contains text that isn’t the selected product, it searches as
      before. Autocomplete itself is unchanged: 2+ characters, thumbnails, review
      counts, keyboard navigation.
    - The list shown on focus is the exact result set the picker already queried—
      nothing new was added. It uses the shortcode’s `sort` (title / newest / rating),
      is capped by `limit`, honours `category_id`, `ids`, `exclude` and `counts`,
      and is cached for 10 minutes, so focusing the field costs no extra database
      work.
 * If you ever want the previous behaviour back, one attribute restores it:
 *     ```wp-block-code
       [pvr_review_form picker="yes" list="no"]
       ```
   
 * No new settings, no additional search or catalogue machinery — just the same 
   query served for an empty input.
 * No action needed on your side — the new behaviour is the default from 1.1.8.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Front-end customization of PVR Media Reviews](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [4 days, 16 hours ago](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/#post-19038148)
 * Thank you — glad 1.1.5/1.1.6 resolved the schema issue and that the new access
   controls work as expected. Answers to your three points:
 * **1. Media upload with `picker="yes"` — confirmed bug, fixed**
 * You were right: after the product change, the uploader’s event handlers stayed
   bound to the old form nodes. Fixed — the uploader now re-binds when the form 
   is re-rendered, so previews and uploads work after every product change.
 * **2. Daily IP limit**
 * It’s in **PV Reviews → Settings → Security** (the separate Security tab; in the
   latest release its cards moved into Limits & Anti-spam — same settings). Defaults:
    - **Reviews from IP / Day: 10** — the limit you hit; set to `0` to disable, 
      raise it for testing;
    - **Reviews from User / Day: 20** — separate limit for logged-in accounts;
    - plus media count/weight per day.
 * Note: the IP limit applies to everyone regardless of login or verified-purchase
   status (it’s keyed by IP), so testing from one machine consumes it quickly.
 * **3. Product preselection in the picker**
 * The first-product preselection was intentional, but we agree the neutral start
   is the better default — changed: the picker now starts empty (no product card),
   and submitting without a selection shows a “Please select a product first” message.
   The product card appears once a product is chosen. Explicit preselection still
   works via the `product` attribute, the `?pvr_product=` URL parameter, and the
   saved default product in the Review Form Widget settings.
 * **Bonus:** switching the selected product no longer wipes what the customer has
   already typed — review text, pros/cons, name/email and rating criteria are preserved
   across the change.
 * **When you can test:** all of the above ships in **1.1.7**, which WordPress.org
   will release to sites in **about 5 hours** (their standard delay for moderator/
   security review). Once your dashboard shows the 1.1.7 update, apply it and continue
   testing the picker flow.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Front-end customization of PVR Media Reviews](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [5 days, 2 hours ago](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/#post-19037576)
 * Thank you for the detailed update. That sounds like a very sensible approach,
   and we’re glad PVR fits the architecture you’re aiming for.
 * Your idea of keeping your brand-specific logic around PVR while letting PVR handle
   the actual review workflow is exactly the kind of integration we had in mind.
 * A few practical notes before you start the prototype:
 * **1. Please update to PVR Media Reviews 1.1.5 first**
 * Version 1.1.5, released today, includes the database schema fix from the issue
   you reported earlier. The plugin now checks for its required tables and can automatically
   restore missing ones.
 * This should give you a clean baseline for testing the standalone review flow,
   including review submission and media uploads.
 * **2. The standalone form can now be used directly**
 * For the prototype, you can use the new Review Form shortcode:
 *     ```wp-block-code
       [pvr_review_form picker="yes"]
       ```
   
 * This renders the complete PVR review form on a normal WordPress page.
 * We have also added a dedicated **Review Form Widget** tab to the PVR settings
   in WordPress Admin. It works as a shortcode builder, so you can configure the
   form options you need for your site and the builder will generate the corresponding
   shortcode for you.
 * The available options include the product, product picker, product limit, category,
   sorting, review counts, picker label, product exclusions and specific product
   IDs.
 * With the product picker enabled, customers can select the product they want to
   review, and the form updates according to the selected product, including the
   applicable review criteria.
 * **3. You can also preselect a product**
 * For your access and eligibility flow, you may find it useful to pass the product
   through the URL:
 *     ```wp-block-code
       https://your-site.com/share-your-experience/?pvr_product=393
       ```
   
 * The form will automatically use that product, while still allowing the selector
   to be used if enabled.
 * An explicit `product` attribute in the shortcode takes precedence over the URL
   parameter.
 * This gives you some flexibility when connecting the form to your own customer
   or purchase-verification logic.
 * **4. Your existing brand-specific logic can remain around PVR**
 * You don’t need to move all of your existing logic into the PVR form.
 * Your own integration can continue to control things such as:
    - customer/account access;
    - which products a customer is eligible to review;
    - how customers are directed to the review page;
    - any additional business rules specific to your store.
 * PVR can then handle the review itself, including the rating, review content, 
   photo/video uploads, validation, moderation and WooCommerce review submission.
 * The form is also fully customizable through the existing template override system
   and PVR’s CSS variables, so you can adapt its appearance to your own brand without
   rebuilding the form.
 * **5. One thing to keep in mind when testing**
 * The reviews submitted during the missing-database-table issue in 1.1.3 are historical
   cases. Because the PVR media-processing step never completed for those submissions,
   their media cannot automatically be associated with those existing reviews.
 * New submissions after updating to 1.1.5 should use the complete review and media
   workflow normally.
 * We’re looking forward to seeing how the prototype works with your existing architecture.
   And thank you for offering to share your experience on WordPress.org if PVR ultimately
   proves to be a good fit. Genuine implementation feedback is particularly valuable
   for a relatively young plugin.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] PVR returns HTTP 500 “Failed to save review” although WooCommerce review is crea](https://wordpress.org/support/topic/pvr-returns-http-500-failed-to-save-review-although-woocommerce-review-is-crea/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [5 days, 2 hours ago](https://wordpress.org/support/topic/pvr-returns-http-500-failed-to-save-review-although-woocommerce-review-is-crea/#post-19037567)
 * Hello,
 * Thank you for the exceptionally detailed report. Your analysis correctly pointed
   us to the right part of the submission flow, and we were able to identify the
   root cause in the code.Root cause
 * The submission flow is essentially:
    1. `wp_insert_comment()` creates the native WooCommerce review. This is why the
       review appeared under **Products → Reviews** and the pending-review count was
       updated.
    2. PVR then stores its additional review data in its own `pvr_review_meta` table,
       including the verified-purchase flag, helpful counters, source, etc.
    3. The submission then continues with media processing, notifications, and the 
       remaining PVR-specific processing.
 * On your site, step 2 was failing because the PVR database tables were missing.
 * This caused the AJAX endpoint to return:
 * `HTTP 500 / "Failed to save review"`
 * The WooCommerce review had already been created by that point, but the PVR-specific
   processing could not continue. This also explains why the photos were never associated
   with the reviews.
 * It also explains why **PV Reviews → Reviews** showed no reviews while the native
   WordPress/WooCommerce pending-review count was still working.
 * So the different symptoms you reported were all caused by the same underlying
   issue.Fixed in PVR Media Reviews 1.1.5
 * We have released **PVR Media Reviews 1.1.5**, which adds a runtime database-schema
   check.
 * The plugin now verifies that its required tables exist and automatically creates
   any missing tables without modifying or dropping existing data.
 * It also shows a one-time admin notice when a missing table has been repaired.
   If the database user does not have permission to create the required tables, 
   the admin will instead show an error with instructions for completing the database
   sync manually.
 * The missing-table situation normally occurs when a site is migrated or deployed
   by copying the plugin/database without the normal plugin activation process running
   on the destination site.
 * Your PHP, LiteSpeed, MariaDB and upload-limit settings are therefore not the 
   cause of this particular issue.What to do
 * Please update to **PVR Media Reviews 1.1.5** and then submit a new test review
   through the normal WooCommerce product page.
 * You should then see the normal successful submission state, and photo/video uploads
   should work normally for new submissions.
 * The reviews that were created during the affected period are not lost. The underlying
   WooCommerce reviews still exist, and once the PVR metadata table is restored,
   they should become available again in **PV Reviews → Reviews** and in the PVR
   review display.
 * If you cannot update immediately, the equivalent manual repair is available under:
 * **WP Admin → PV Reviews → Import / Export → Sync database structure**
 * This operation is non-destructive and only creates missing PVR tables.About the
   media from the affected submissions
 * Because the PVR media-processing step never completed for those submissions, 
   PVR cannot automatically associate media with those existing reviews.
 * Any media that was not successfully persisted by PVR cannot be recovered retroactively.
   If necessary, media can be added again through the PVR review editor after the
   database structure has been restored.
 * If you want to verify the database state manually, you can also run:
 *     ```wp-block-code
       SHOW TABLES LIKE '%pvr_%';
       ```
   
 * This will show the PVR-specific tables, including `pvr_review_meta`, `pvr_media`,`
   pvr_votes`, `pvr_replies`, and `pvr_email_queue`, along with the additional Pro
   tables where applicable.
 * With 1.1.5, missing tables should be detected and created automatically during
   the next request.
 * Please update to 1.1.5 and test one new review. The behavior you reported should
   be resolved by the update.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Front-end customization of PVR Media Reviews](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [5 days, 18 hours ago](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/#post-19037061)
 * Yes, the workflow you describe is technically compatible with PVR. The main limitation
   is that PVR does not currently provide a ready-made way to render the complete
   review form outside a WooCommerce product page.
 * The good news is that the review submission itself is already independent of 
   the page where the form is displayed.
 * **1. The PVR review flow already supports this**
 * The review is submitted through the `pvrev_submit_review` AJAX endpoint, which
   receives the target `product_id` with the submission and performs the usual validation,
   including the product, rating, content limits, access rules, submission limits,
   and duplicate-review checks.
 * Photo and video uploads are handled separately and attached to the resulting 
   review, so they are also not tied to the product-page context.
 * In other words, the underlying flow already works as:
 * **Share Your Experience → PVR form → selected product → native WooCommerce/PVR
   review**
 * The resulting review is the same review that PVR displays on the product page.
 * **2. What is currently missing**
 * There are currently two pieces that are tied to the normal product-page context:
    - PVR’s front-end assets are not automatically loaded on an arbitrary WordPress
      page.
    - On a non-product page, the front-end configuration does not have a product
      ID by default, so the form would need to be told which product it is submitting
      the review for.
 * Both of these can be handled through PVR’s existing hooks.
 * **3. What you can do today**
 * A small custom integration can render the existing PVR review form on your **
   Share Your Experience** page.
 * It would essentially:
    1. Load the PVR front-end assets on that page.
    2. Pass the selected WooCommerce product ID to PVR.
    3. Render the existing PVR review form.
    4. Let PVR handle the complete submission process, including the rating, review
       text, photo/video uploads, validation and moderation.
 * Your existing purchase-verification and product-selection logic can remain in
   place. You would only be replacing the Elementor review form itself with the 
   native PVR form.
 * So you could keep your current workflow while removing the need to maintain a
   separate review form and the Elementor-to-WooCommerce review bridge.
 * **4. Native support**
 * We agree that a dedicated shortcode such as:
 * `[pvr_review_form product="123"]`
 * would be the cleanest long-term solution for this use case. It could allow the
   complete PVR review form to be placed on any WordPress or Elementor page while
   specifying the target product.
 * This is a natural extension of the existing PVR template and hook system, and
   we can consider adding it as a supported feature in an upcoming release.
 * For now, however, the functionality is already achievable with a small amount
   of custom integration, without changing the underlying PVR review system.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Front-end customization of PVR Media Reviews](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [5 days, 23 hours ago](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/#post-19036742)
 * **Update (since the latest release, v1.1.3):**
 * **1. Template overrides — now supported.**
 * Since v1.1.3, PVR includes a theme-overridable template system. You can copy 
   the following templates into your (child) theme folder `your-theme/pvr-media-
   reviews-for-woocommerce/` and they will be loaded instead of the plugin’s own
   copies:
    - `review-item.php` — single review card
    - `review-list.php` — the reviews section (summary, list header, list)
    - `review-form.php` — the review form
 * The resolver checks: child theme → parent theme → the `pvrev_template_path` filter
   → plugin defaults. There is also an admin notice that warns you when a copied
   template becomes outdated after a plugin update (templates carry `@version` headers),
   so overrides stay maintainable.
 * **2. HTML-level filters**
 * In addition to hooks, there are output filters that let you modify the rendered
   markup directly without overriding templates:
    - `pvrev_review_item_html` — the entire HTML of a single review card (everywhere
      it renders)
    - `pvrev_review_form_html` — the rendered review form
    - `pvrev_review_list_html` — the whole rendered reviews section
    - `pvrev_frontend_css_vars` — programmatically adjust/replace the CSS variable
      values PVR prints (useful for matching a brand palette from code)
 * **3. Built-in Design settings (no CSS required)**
 * The admin → Settings → Design tab lets you change the color scheme (light / dark/
   auto), accent, star, card, surface, text, muted text, border and link colors,
   plus the corner radius — all applied as CSS variables site-wide. The Auto mode
   detects your site’s own theme and switches the palette automatically, so a light
   product page never gets dark review cards.
 * **4. Pro widgets markup**
 * If you use the review widgets, block titles are fully configurable (custom text,
   HTML tag `h2–h5/div`, and extra CSS classes for theme matching), so widget headings
   blend into your theme’s typography.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Photo & Video Reviews for WooCommerce — PVR Media Reviews] Front-end customization of PVR Media Reviews](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/)
 *  Plugin Author [lebedgor](https://wordpress.org/support/users/lebedgor/)
 * (@lebedgor)
 * [6 days, 4 hours ago](https://wordpress.org/support/topic/front-end-customization-of-pvr-media-reviews/#post-19036528)
 * Hello,
 * Thank you for evaluating PVR Media Reviews. It’s great to hear that it works 
   well with your existing WooCommerce reviews.
 * Here is a detailed breakdown of the front-end customization options:
 * **1. Custom CSS — yes, extensively.**
 * The entire front-end, including the review summary, review list, review form,
   and media lightbox, uses a dedicated `**pvr-**` CSS class namespace and CSS custom
   properties such as `**--pvr-accent-color**`, `**--pvr-star-color**`, `**--pvr-
   card-bg**`, `**--pvr-radius**`, and `**--pvr-border-color**`, along with shadow
   and gradient variables.
 * Overriding these variables in your theme’s CSS allows you to restyle the main
   visual elements globally, while regular CSS selectors can be used for more fine-
   grained customization.
 * This means the default PVR appearance does not have to be retained. The review
   experience can be styled to closely match the design of your existing WooCommerce
   product page.
 * **2. HTML structure / templates**
 * The front-end markup is organized into PHP template files covering areas such
   as the review summary/list, review form, review items, replies, and media modals.
 * Currently, these templates are loaded directly from the plugin, so there is **
   no child-theme template override mechanism** at this time.
 * Structural customization is instead handled through the available hooks and filters
   described below. If a project requires full template override support, we can
   also consider adding that capability in a future update.
 * **3. Hooks and filters — yes**
 * PVR provides developer hooks for extending and modifying its front-end behavior,
   including:
    - `pvrev_review_form_fields`
    - `pvrev_review_form_before_fields`
    - `pvrev_review_item_data`
    - `pvrev_frontend_data`
    - `pvrev_review_approved`
    - `pvrev_after_review_saved`
 * There are additional hooks available depending on the specific customization 
   required.
 * PVR also uses standard WordPress/WooCommerce mechanisms, so it can be extended
   using the usual WordPress development patterns.
 * For displaying reviews in custom locations, PVR also provides shortcodes such
   as:
    - `pvr_reviews_grid`
    - `pvr_reviews_carousel`
 * **4. CSS classes and update safety**
 * PVR uses a dedicated `**pvr-**` namespace for its front-end classes, which helps
   prevent conflicts with theme styles.
 * For customizations that need to remain robust across plugin updates, we recommend
   using the documented CSS variables and developer hooks wherever possible rather
   than relying on highly specific internal markup.
 * Any notable compatibility changes are documented in the plugin changelog.
 * In short, you can keep PVR’s full review functionality, including photo/video
   uploads, voting, replies, and schema markup, while making the entire review experience
   visually consistent with your own brand and WooCommerce product-page design.
 * If you share your current product-page design or brand palette, we can also point
   you toward the specific PVR variables and customization points that would be 
   most useful.

Viewing 11 replies - 1 through 11 (of 11 total)