JReviews logo Docs
Menu
Version

Release Notes

Changes and improvements in JReviews v6

JReviews 6 is a seamless upgrade from JReviews 5 with no backward-breaking changes. Your existing site continues working exactly as before, while giving you access to powerful new features when you're ready.

Version 6.1.0 (06-13-2026)

This release expands JReviews 6 with a unified widget workflow, seven additional Early Access pages, and three new widget types built on the redesigned search and filter system.

Site Widgets

A new admin area under Setup → Site Widgets where you build a widget configuration once in JReviews and then deploy the same widget to multiple places by selecting it from a dropdown:

  • A single Joomla JReviews Universal Module replaces juggling a dozen per-type modules.
  • A single WordPress (JReviews) Universal Widget for the classic widgets screen.
  • A new JReviews Widget block for the WordPress block editor with server-side rendered preview.
  • The shortcode [jreviews type="widget" id="..."] for use in articles, posts, banner custom fields, and template overrides.

A Where Used disclosure on each widget lists every Joomla module, WordPress sidebar, block instance and shortcode placement currently referencing it, so unpublishing or deleting a widget is no longer a guessing game. A standalone preview page under Support → Site Widgets Preview lets you walk through several preview scenarios per widget type, with a dark-mode toggle, before deploying.

When creating a new widget you can copy settings from any existing V6 widget or import from a legacy Joomla module instance or WordPress sidebar widget. The legacy per-type Joomla modules and WordPress widgets remain fully supported and coexist on the same site.

See Site Widgets for the full walkthrough.

Widget Types

The full set of widget types available in Site Widgets:

  • Listings — lists of listings with filtering, ordering, and customizable card layouts.
  • Comments — lists of comments and reviews with filtering and ordering.
  • Media — photo and video grids drawn from listing media.
  • Directories — directory cards with optional category trees and listing counts.
  • Totals — aggregate counts for listings, reviews, members, and add-on extension content.
  • Fields — lists of custom field values that link to filtered search results.
  • Calendar — interactive month/week calendar driven by listing date custom fields.
  • Reviewer Rank — top reviewers leaderboard with podium and list layouts.
  • Favorite Users — authors with the most favorited listings.
  • Listing Search — search form with cascading directory → listing type → category dropdowns, combobox multi-select, optional clear-all, live results panel, and a Content Block element for free-form layout. Replaces the legacy mod_jreviews_advsearch module / WordPress advanced search widget.
  • Listing Filters — sidebar (or dialog, on smaller viewports) with grouped active filter chips, dependency cascading, autosuggest for large option lists, and a configurable Filter Builder. URLs update live on V6 list pages; on legacy list pages the form submits as a normal search.
  • Comment Filters — the counterpart to Listing Filters for comment and review list pages, with dedicated Category and Listing Type filter elements scoped to the comment context.

The Listings, Media, Totals and Comments widgets each include a Content Source setting that limits the widget to a specific add-on extension's content. The search and filter widgets each include a Default Sort Order setting for the destination list page.

YOOtheme Pro Add-on

Two additions to the YOOtheme Pro integration:

  • JReviews Site Widget element — a new YOOtheme builder element that places any published Site Widget into a YOOtheme layout, with a widget selector, live preview in the customizer, an Edit-in-JReviews shortcut, and a hide-title option. The YOOtheme equivalent of the WordPress Gutenberg block.
  • Media ordering in dynamic content — the YOOtheme Media dynamic source now exposes an Ordering field on photos, videos, audio and attachments, so galleries and grids can be sorted by the manual media order set in JReviews.

See the YOOtheme Pro article for the full Site Widget element walkthrough.

Maps Add-on

The Maps add-on (5.6.0) is rebuilt for the JReviews V6 architecture:

  • Proximity search — a new location-based search filter and widget search element with a "Use my location" geolocation button, an adjustable radius, and address autocomplete.
  • Interactive map panel on list pages — an embedded map that stays in sync with the displayed results, powering the map split-view on the new V6 Listing List Pages.
  • The map widget is rebuilt for V6 with marker clustering, sidebar and bottom listing cards, responsive layouts, and dark-mode-aware styling.

Other Improvements

  • RSS feeds for listings, reviews, and comments, with legacy URL compatibility.
  • Structured data enrichment — new additionalType and additionalProperty schema settings, plus Schema.org structured data added to the comment detail and "view all reviews" pages. See Structured Data Setup.
  • Redesigned Early Access settings presented as a grouped features grid, and add-ons can now register their own Early Access features.
  • PHP 8.4 compatibility.
  • Refreshed V6 frontend theme and control panel with refined cards, footers, and comprehensive dark mode support.
  • Media uploads from URLs are hardened against SSRF and restricted to allowed targets.

Early Access Features

Seven new Early Access flags become available in this release, each gating a complete rewrite of an existing front-end page:

  • Directory Page — rewritten directory list with CMS-agnostic alpha index URLs.
  • Listing List Pages — category listings, featured, latest, popular, top rated, search results and all other list page types. Adds a layout switcher, table layout, map split-view, configurable RSS feeds, and a redesigned toolbar.
  • Advanced Search Page — rewritten advanced search with numeric range and date range field components, Any/All match toggles, and configurable date presets.
  • Comments/Reviews List Pages — rewritten review list pages, with the legacy my-reviews URL automatically routed to the new V6 page.
  • Discussion Pages — rewritten discussions list and detail pages.
  • Media Pages — rewritten dedicated photo and video gallery pages with full-screen Swiper modal, lazy loading, and Schema.org structured data.
  • Reviewer Rank Page — rewritten reviewer leaderboard with podium and list layouts.

See the Early Access Features article for the full list and migration guidance.

Version 6.0.1 (02-17-2026)

  • New early access setting for the rewritten listing comparison page.

Version 6.0.0 (02-11-2026)

Early Access Features

The following early access settings are available:

  • Listing detail page
  • Listing form
  • YOOtheme Pro - 11 new custom elements for comments/reviews, ratings, and listing management (requires Early Access listing detail)

The development work required to rewrite just these two frontend areas was substantial. The listing detail page includes numerous core features—such as comments, favorites, manage actions, media layouts, and related listings—along with integrations for multiple addons: AssistAI, EngageUsers, ListingResources, Maps, MyLists, and PaidListings.

To learn more detail about the early access features and other important changes related to template customizations and hooks read the Early Access features article.

Existing Customizations?
If you have template, language, or hook customizations for listing detail pages or forms, review the migration checklist before enabling Early Access features.

Blade Template Formatting for Custom Fields (Early Access)

When the Early Access listing detail page is enabled, custom field output formatting uses a new Blade template-based system with different syntax and variables:

  • Use Blade directives (@foreach, @if, etc.) instead of PHP tags (<?php ?>)
  • Field data is available in the $data variable (pre-parsed for FormBuilder fields)
  • Use {{ $variable }} for output instead of <?php echo $variable; ?>
  • Declare expected variables with @props(['data', 'listing'])
  • Template files use .blade.php extension instead of .thtml

The system supports both inline code and template files:

  • "Blade template code" setting - Write Blade syntax directly in the field settings
  • "Field output Blade template" setting - Select from .blade.php templates in fields_phpformat/

Migration Note: When you enable Early Access, the legacy PHP format system (php_format, php_format_theme) is replaced by the Blade template system. Existing PHP format customizations will be ignored and fields will fall back to their default Output Format until migrated to Blade syntax. The standard PHP format system continues to work when Early Access is disabled.

See the Custom Field PHP Formatting documentation for complete examples and step-by-step migration guidance.

Action Required if You Use Custom Field Formatting
This change only affects custom fields where you have added custom code in the field's Advanced Settings using the **"PHP output format"** editor or **"Field output template"** dropdown. If you have customized any fields this way, those customizations will not work when you enable Early Access - the fields will fall back to their "Output format" setting instead. Plan time to migrate these specific fields to Blade syntax (using the new "Blade template code" and "Field output Blade template" settings) before enabling Early Access on production sites. Fields without custom code in these settings are unaffected. See Early Access Features for more information.

PHP 8.2

Minimum PHP 8.2 required (upgrade from 8.1)

JSON Query Builder

JReviews 6 introduces a new JSON Query Builder that replaces the legacy Custom Where/Order SQL system with a secure, structured, and validated approach. The JSON Query Builder prevents SQL injection vulnerabilities, works across different modules/pages, and is easier to maintain.

In this version the feature is only available in detail page related listing widgets.

See the JSON Query Builder documentation for complete usage details.

Migrating from Legacy Custom Where/Order

If you're currently using Custom Where/Order settings in JReviews 5, you can migrate them to the new JSON Query Builder using the patterns below. These patterns show common SQL queries and their JSON equivalents.

Pattern 1: Simple WHERE Condition

Legacy (Joomla):

Listing.state = 1

JSON:

{
    "where": [
        {
            "column": "state",
            "operator": "=",
            "value": 1
        }
    ]
}
Pattern 2: Multiple AND Conditions

Legacy (Joomla):

Listing.state = 1 AND Listing.catid = 5 AND Field.jr_price >= 100

JSON:

{
    "where": [
        {
            "column": "state",
            "operator": "=",
            "value": 1
        },
        {
            "column": "catid",
            "operator": "=",
            "value": 5
        },
        {
            "column": "field_data.jr_price",
            "operator": ">=",
            "value": 100
        }
    ]
}
Pattern 3: OR Conditions

Legacy (Joomla):

Listing.state = 1 AND (Field.jr_city = 'New York' OR Field.jr_city = 'Los Angeles')

JSON:

{
    "where": [
        {
            "column": "state",
            "operator": "=",
            "value": 1
        },
        {
            "logic": "OR",
            "conditions": [
                {
                    "column": "field_data.jr_city",
                    "operator": "=",
                    "value": "New York"
                },
                {
                    "column": "field_data.jr_city",
                    "operator": "=",
                    "value": "Los Angeles"
                }
            ]
        }
    ]
}
Pattern 4: IN Operator

Legacy (Joomla):

Listing.catid IN (5, 6, 7, 8)

JSON:

{
    "where": [
        {
            "column": "catid",
            "operator": "IN",
            "value": [5, 6, 7, 8]
        }
    ]
}
Pattern 5: LIKE Pattern

Legacy (Joomla):

Listing.title LIKE '%hotel%'

JSON:

{
    "where": [
        {
            "column": "title",
            "operator": "LIKE",
            "value": "%hotel%"
        }
    ]
}
Pattern 6: Date Functions

Legacy (Joomla):

Listing.created >= DATE_SUB(NOW(), INTERVAL 30 DAY)

JSON:

{
    "where": [
        {
            "column": "created",
            "operator": ">=",
            "value": "DATE_SUB(NOW(), INTERVAL 30 DAY)"
        }
    ]
}
Pattern 7: Date Extraction

Legacy (Joomla):

MONTH(Field.jr_eventdate) = MONTH(NOW()) AND YEAR(Field.jr_eventdate) = YEAR(NOW())

JSON:

{
    "where": [
        {
            "column": "MONTH(field_data.jr_eventdate)",
            "operator": "=",
            "token": "current_month"
        },
        {
            "column": "YEAR(field_data.jr_eventdate)",
            "operator": "=",
            "token": "current_year"
        }
    ]
}
Pattern 8: Dynamic Tokens

Legacy (Joomla):

Listing.created_by = {user_id}

JSON:

{
    "where": [
        {
            "column": "created_by",
            "operator": "=",
            "token": "user_id"
        }
    ]
}
Pattern 9: Ratings/Aggregates

Legacy (Joomla):

Totals.user_rating >= 4.5 AND Totals.user_rating_count >= 10

JSON:

{
    "where": [
        {
            "column": "aggregates.user_rating",
            "operator": ">=",
            "value": 4.5
        },
        {
            "column": "aggregates.user_rating_count",
            "operator": ">=",
            "value": 10
        }
    ]
}
Pattern 10: ORDER BY

Legacy Custom Order (Joomla):

Totals.user_rating_rank DESC, Listing.created DESC

JSON:

{
    "order": [
        {
            "column": "aggregates.user_rating_rank",
            "direction": "desc"
        },
        {
            "column": "created",
            "direction": "desc"
        }
    ]
}
Pattern 11: Subqueries (Same Author)

Legacy (Joomla):

Listing.id != {listing_id} AND Listing.created_by = (SELECT created_by FROM #__content WHERE id = {listing_id})

JSON:

{
    "where": [
        {
            "column": "id",
            "operator": "!=",
            "token": "listing_id"
        },
        {
            "column": "created_by",
            "operator": "=",
            "subquery": {
                "select": "created_by",
                "from": "#__content",
                "where": [
                    {
                        "column": "id",
                        "operator": "=",
                        "token": "listing_id"
                    }
                ]
            }
        }
    ]
}