Forum Replies Created

Viewing 11 replies - 1 through 11 (of 11 total)
  • Plugin Author lebedgor

    (@lebedgor)

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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:

    [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.

    Plugin Author lebedgor

    (@lebedgor)

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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:

    [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:

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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:

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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.

    Plugin Author lebedgor

    (@lebedgor)

    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)