{"id":284612,"date":"2026-04-17T16:10:33","date_gmt":"2026-04-17T16:10:33","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/g-reviews-pro-engine-ultra\/"},"modified":"2026-09-10T23:36:06","modified_gmt":"2026-09-10T23:36:06","slug":"etchenet-reviews-for-google-business","status":"publish","type":"plugin","link":"https:\/\/bho.wordpress.org\/plugins\/etchenet-reviews-for-google-business\/","author":16192456,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"7.0.14","stable_tag":"7.0.14","tested":"7.1.1","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Etchenet Reviews for Google Business","header_author":"Etchenet","header_description":"Display Google reviews in a carousel, floating badge, and side panel. Manual reviews, CSV\/Excel import, and API sync.","assets_banners_color":"5a7694","last_updated":"2026-09-10 23:36:06","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/paypalme\/etchenet\/","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/etchenet-reviews-for-google-business\/","header_author_uri":"https:\/\/profiles.wordpress.org\/etchenet\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":647,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"6.1.0":{"tag":"6.1.0","author":"etchenet","date":"2026-04-17 16:09:56","revision":3509082},"6.1.1":{"tag":"6.1.1","author":"etchenet","date":"2026-04-17 16:51:44","revision":3509110},"6.1.2":{"tag":"6.1.2","author":"etchenet","date":"2026-05-04 12:34:03","revision":3522352},"6.1.3":{"tag":"6.1.3","author":"etchenet","date":"2026-05-04 12:34:03","revision":3522352},"6.1.4":{"tag":"6.1.4","author":"etchenet","date":"2026-05-04 12:34:03","revision":3522352},"6.1.6":{"tag":"6.1.6","author":"etchenet","date":"2026-08-01 16:47:25","revision":3631153},"7.0.0":{"tag":"7.0.0","author":"etchenet","date":"2026-08-02 02:02:36","revision":3631422},"7.0.14":{"tag":"7.0.14","author":"etchenet","date":"2026-09-10 23:36:06","revision":3690607},"7.0.9":{"tag":"7.0.9","author":"etchenet","date":"2026-08-05 14:09:33","revision":3635471}},"upgrade_notice":{"7.0.9":"<p>Separates the side-panel close button&#039;s pointer-hover colors from its automatic and keyboard focus states.<\/p>","7.0.8":"<p>Restores the seven style settings identified as non-functional by the completed style audit: four carousel-card surface settings and three component shadow presets.<\/p>","7.0.7":"<p>Applies all side-panel Read-more visual settings through explicit panel-only CSS properties while preserving hover-width inheritance and keyboard focus accessibility.<\/p>","7.0.6":"<p>Separates the side-panel Read-more border from its keyboard-focus outline and adds an optional hover-only border width.<\/p>","7.0.5":"<p>Separates the carousel read-more border from its keyboard-focus outline and adds an optional hover-only border width.<\/p>","7.0.4":"<p>Prevents carousel read-more controls from being clipped at narrow widths or with large visual settings, while preserving configured aspect ratios whenever the content fits.<\/p>","7.0.3":"<p>Adds independent inner and outer carousel-container spacing controls, with a safe automatic migration, responsive overflow protection, and corrected visual-setting bindings.<\/p>","7.0.2":"<p>Restores complete Google + manual review management and global manual reordering in the 7.x administration screen, and adds the carousel-container radius control. Existing manual-order sequences are retained and completed automatically.<\/p>","7.0.1":"<p>Improves floating-badge hover and keyboard-focus states, removes the non-configurable blue container outline, and migrates the new controls automatically.<\/p>","7.0.0":"<p>Major administration-interface and settings-architecture refactor. Existing configurations are migrated automatically on upgrade; no manual action is required.<\/p>","6.1.7":"<p>Uses the configured review count consistently in the floating badge and side panel, including their live administration previews.<\/p>","6.1.6":"<p>Adds configurable full-review modal and \u201cRead more\u201d control colors, plus a modal layer above the side panel.<\/p>","6.1.5":"<p>Adds an optional Google badge review-count override and allows manual reviews without a comment or image.<\/p>","6.1.4":"<p>Finalized English source strings and release metadata updates for WordPress.org translation compliance.<\/p>","6.1.3":"<p>Readme and translation catalogs updated; default UI strings are US English for directory compliance.<\/p>","6.1.2":"<p>Fixes color picker live preview in admin, card header centering, and sidebar panel CSS isolation.<\/p>","6.1.0":"<p>First stable release suitable for the WordPress.org directory. Translation-ready; supports manual order and CSV\/Excel import.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3509082,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3509082,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon-512x512.jpg":{"filename":"icon-512x512.jpg","revision":3509082,"resolution":"512x512","location":"assets","locale":"","width":512,"height":512}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3509082,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3509082,"resolution":"772x250","location":"assets","locale":"","width":1544,"height":500}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["6.1.0","6.1.1","6.1.2","6.1.3","6.1.4","6.1.6","7.0.0","7.0.14","7.0.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3516582,"resolution":"1","location":"assets","locale":"","width":3600,"height":2040},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3516582,"resolution":"2","location":"assets","locale":"","width":3837,"height":2238},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3631434,"resolution":"3","location":"assets","locale":"","width":1954,"height":2095}},"screenshots":[]},"plugin_section":[],"plugin_tags":[786,15046,21827,80,1518],"plugin_category":[43,50,53],"plugin_contributors":[260471],"plugin_business_model":[],"class_list":["post-284612","plugin","type-plugin","status-publish","hentry","plugin_tags-carousel","plugin_tags-google-business","plugin_tags-google-reviews","plugin_tags-shortcode","plugin_tags-testimonials","plugin_category-customization","plugin_category-media","plugin_category-ratings-and-reviews","plugin_contributors-etchenet","plugin_committers-etchenet"],"banners":{"banner":"https:\/\/ps.w.org\/etchenet-reviews-for-google-business\/assets\/banner-772x250.jpg?rev=3509082","banner_2x":"https:\/\/ps.w.org\/etchenet-reviews-for-google-business\/assets\/banner-1544x500.jpg?rev=3509082","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/etchenet-reviews-for-google-business\/assets\/icon-128x128.jpg?rev=3509082","icon_2x":"https:\/\/ps.w.org\/etchenet-reviews-for-google-business\/assets\/icon-256x256.jpg?rev=3509082","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/etchenet-reviews-for-google-business\/assets\/screenshot-1.png?rev=3516582","caption":""},{"src":"https:\/\/ps.w.org\/etchenet-reviews-for-google-business\/assets\/screenshot-2.png?rev=3516582","caption":""},{"src":"https:\/\/ps.w.org\/etchenet-reviews-for-google-business\/assets\/screenshot-3.jpg?rev=3631434","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>Etchenet Reviews for Google Business<\/strong> shows your Google Business reviews in a modern carousel (Swiper), a floating badge, and a side panel. Ideal for building trust and social proof on your site.<\/p>\n\n<h4>Internationalization<\/h4>\n\n<ul>\n<li>All translatable strings in the plugin use <strong>English (United States, <code>en_US<\/code>)<\/strong> as the message source, as required for community translation on WordPress.org.<\/li>\n<li>On a site whose locale is <code>en_US<\/code>, WordPress typically uses those strings <strong>as-is<\/strong> from the plugin (no separate English file required).<\/li>\n<li>Spanish (<code>es_ES<\/code>) and French (<code>fr_FR<\/code>) translation files are included under <code>languages\/<\/code>. Other locales can use language packs from wordpress.org when available, or custom <code>.mo<\/code> \/ <code>.l10n.php<\/code> files.<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Carousel<\/strong> \u2013 Shortcode <code>[etn_egr_reviews_carousel]<\/code> with configurable columns, autoplay, arrows, dots<\/li>\n<li><strong>Floating badge<\/strong> \u2013 Shows rating and total reviews; click to open the side panel<\/li>\n<li><strong>Side panel<\/strong> \u2013 List of reviews in a slide-out panel (position and styles configurable)<\/li>\n<li><strong>Manual reviews<\/strong> \u2013 Add and manage your own reviews in the admin (same structure as Google)<\/li>\n<li><strong>CSV\/Excel import<\/strong> \u2013 Bulk import from <code>.csv<\/code> or <code>.xlsx<\/code> with a header row such as <strong>Author, Text, Stars, Date, Photo URL<\/strong> (minimum: Author, Stars). Text is optional, including in headerless files. Spanish column names (e.g. Autor, Texto) are also recognized for compatibility.<\/li>\n<li><strong>Google API sync<\/strong> \u2013 One-click sync with Google Places API (API Key + Place ID); optional daily cron<\/li>\n<li><strong>Order<\/strong> \u2013 Sort by newest, oldest, best\/worst rating, or drag-and-drop manual order in the admin list<\/li>\n<li><strong>Customizable<\/strong> \u2013 Colors, excerpt length, min stars, \u201cRead more\u201d modal, Rich Snippets (JSON-LD)<\/li>\n<li><strong>Translations<\/strong> \u2013 Text domain: <code>etchenet-reviews-for-google-business<\/code>; see <em>Internationalization<\/em> above<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.0+<\/li>\n<li>PHP 7.4+<\/li>\n<li>PHP ZIP, XMLReader and SimpleXML extensions for XLSX imports (CSV imports do not require them)<\/li>\n<li>Google API Key and Place ID (for syncing from Google); optional for manual-only use<\/li>\n<\/ul>\n\n<h4>How reviews are loaded from the Google API<\/h4>\n\n<p>The plugin uses the <strong>Google Places API (Place Details)<\/strong>. It requests the <code>reviews<\/code> field for your place (using your API Key and Place ID). Google returns a <strong>limited number of reviews per request<\/strong> (typically 5) and does not support pagination for reviews.<\/p>\n\n<p>On each sync, the plugin fetches the current batch from Google, updates matching reviews while preserving their visibility, and adds new reviews to the stored list for the same Place ID. API failures are reported even when older reviews are available. If you change the Place ID, the previous place's reviews are not displayed under the new place; reset the stored Google reviews explicitly before syncing a different place. The API response is cached for 12 hours to avoid excessive requests.<\/p>\n\n<h4>Stored review data and Google's limits<\/h4>\n\n<p>Because the API returns only a small set per call (usually 5) and has no pagination:<\/p>\n\n<ul>\n<li><strong>Stored reviews.<\/strong> This version preserves the existing local Google review inventory and its optional daily synchronization. Google Places restricts the storage of reviews and profile photos; a 12-hour response cache does not establish permission to retain the stored inventory. Confirm the rights applicable to your use of Google data. This release does not introduce a new retention policy or a Google Business Profile integration.<\/li>\n<li><strong>Manual reviews and import.<\/strong> Add testimonials you have the right to use or import them from CSV\/Excel. These reviews are identified separately from Google API reviews; mixed collections use a neutral review heading.<\/li>\n<\/ul>\n\n<p>For full details, check the plugin settings and this readme file.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to Google services to fetch and display Google Business reviews.<\/p>\n\n<ol>\n<li>Google Places API (maps.googleapis.com)<\/li>\n<\/ol>\n\n<p>- Purpose: fetch place details and public reviews (rating, review count, business name, review entries).\n- Data sent: configured <code>place_id<\/code>, configured API key, requested review language (two-letter code derived from the site\u2019s WordPress <code>get_locale()<\/code>, e.g. <code>en<\/code> for <code>en_US<\/code>, <code>es<\/code> for <code>es_ES<\/code>), optional <code>reviews_sort<\/code> parameter.\n- When sent: on manual sync and on optional daily WP-Cron sync. Two requests are made per sync (one sorted by relevance, one by newest) to maximize review collection within Google's 5-review-per-request limit.<\/p>\n\n<ol>\n<li>Remote profile-photo download (Google-hosted image URLs)<\/li>\n<\/ol>\n\n<p>- Purpose: cache public reviewer profile images locally for faster\/stable display.\n- Data sent: HTTP GET request to the profile photo URL returned by Google for each review.\n- When sent: during synchronization, for new reviews or changed profile-photo URLs when no reusable local cached image is available.<\/p>\n\n<p>The server-side API and profile-photo download requests do not send personal data from your site visitors. If a profile photo cannot be cached locally, its remote URL may be displayed directly: the visitor's browser then contacts that image host and may send its IP address, browser user agent and referrer according to the browser's policy.<\/p>\n\n<p>Google Maps Platform Terms of Service:\nhttps:\/\/mapsplatform.google.com\/terms\/<\/p>\n\n<p>Google Privacy Policy:\nhttps:\/\/policies.google.com\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install via <strong>Plugins \u2192 Add New<\/strong> and upload the zip.<\/li>\n<li>Activate <strong>Etchenet Reviews for Google Business<\/strong> in the Plugins screen.<\/li>\n<li>Go to <strong>Etchenet Reviews<\/strong> in the admin menu.<\/li>\n<li>Enter your <strong>Google API Key<\/strong> and <strong>Place ID<\/strong> (or use only manual reviews and\/or CSV\/Excel import).<\/li>\n<li>Click <strong>Sync now<\/strong> (Connectivity tab) to fetch reviews, or add manual reviews \/ import from file.<\/li>\n<li>Insert the shortcode <code>[etn_egr_reviews_carousel]<\/code> in any page or post where you want the carousel.<\/li>\n<li>Optionally enable the <strong>floating badge<\/strong> and adjust layout, filters, and styles on the same settings page.<\/li>\n<\/ol>\n\n<h4>Optional: Translations<\/h4>\n\n<p>The plugin ships with Spanish and French translation files in <code>languages\/<\/code>. No extra plugin is required for those languages to work when the site locale matches.<\/p>\n\n<ul>\n<li>To add or improve translations: use <a href=\"https:\/\/wordpress.org\/plugins\/loco-translate\/\">Loco Translate<\/a> or <a href=\"https:\/\/poedit.net\/\">Poedit<\/a> with the template <code>languages\/etchenet-reviews-for-google-business.pot<\/code>.<\/li>\n<li>Place <code>.po<\/code>\/<code>.mo<\/code> files in <code>wp-content\/plugins\/etchenet-reviews-for-google-business\/languages\/<\/code> or in <code>wp-content\/languages\/plugins\/<\/code> (e.g. <code>etchenet-reviews-for-google-business-es_ES.mo<\/code>, <code>etchenet-reviews-for-google-business-fr_FR.mo<\/code>).<\/li>\n<\/ul>\n\n<h4>If you use Loco Translate (or pass the plugin to someone who does)<\/h4>\n\n<ol>\n<li>Install and activate <strong>Loco Translate<\/strong> in WordPress.<\/li>\n<li>Go to <strong>Loco Translate \u2192 Plugins<\/strong> and open <strong>Etchenet Reviews for Google Business<\/strong>.<\/li>\n<li>You will see the translation set <strong>etchenet-reviews-for-google-business<\/strong>.<\/li>\n<li>Choose the language (e.g. Fran\u00e7ais, Espa\u00f1ol, English) and edit\/save. Loco will save into the plugin\u2019s <code>languages\/<\/code> folder by default, so translations travel with the plugin.<\/li>\n<li>Use only files whose names start with <strong>etchenet-reviews-for-google-business-<\/strong> (e.g. <code>etchenet-reviews-for-google-business-fr_FR.po<\/code>).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20google%20api%20key%3F\"><h3>Do I need a Google API Key?<\/h3><\/dt>\n<dd><p>You need an API Key and Place ID only if you want to sync reviews from Google. You can use the plugin with manual reviews and\/or CSV\/Excel import only.<\/p><\/dd>\n<dt id=\"the%20carousel%20shows%20a%20%E2%80%9Cno%20data%E2%80%9D%20message\"><h3>The carousel shows a \u201cno data\u201d message<\/h3><\/dt>\n<dd><p>If you see a message like <em>No data to show. Sync from the admin or add manual reviews\u2026<\/em>, check that you have either synced from Google or added manual reviews (or imported). Also check <strong>Filters &amp; content<\/strong> in settings: minimum stars and \u201cexclude reviews without text\u201d can hide every review.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20order%20of%20reviews%3F\"><h3>Can I change the order of reviews?<\/h3><\/dt>\n<dd><p>Yes. In <strong>Etchenet Reviews<\/strong> go to <strong>Reviews<\/strong>, click <strong>Reorder reviews<\/strong>, drag rows by the handle (\u22ee\u22ee), and click <strong>Save current order<\/strong>. The complete Google and manual-review inventory is shown in this dedicated mode. The saved sequence is used when <strong>Manual order<\/strong> is selected under <strong>Filters &amp; content<\/strong>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>7.0.14<\/h4>\n\n<ul>\n<li>Fixed hidden manual reviews reappearing when no visible reviews remain.<\/li>\n<li>Fixed overlapping avatars after image optimizers wrap images in picture elements.<\/li>\n<li>Fixed scroll locking for review dialogs and combined hover\/focus autoplay pauses.<\/li>\n<li>Fixed false synchronization success, stale review updates, and mixing different Place IDs.<\/li>\n<li>Added support for inline XLSX strings and bounded malformed spreadsheet input.<\/li>\n<li>Fixed CSV carriage-return escaping and preserved Google photo URLs in exports.<\/li>\n<li>Distinguished manual testimonials from Google API reviews and completed the Swiper MIT notice.<\/li>\n<li>Preserved the existing Google review history; documented its separate retention-policy limitation.<\/li>\n<\/ul>\n\n<h4>7.0.13<\/h4>\n\n<ul>\n<li>Compact badge: moved the rating above the stars to reduce its horizontal footprint on mobile and floating placements.<\/li>\n<\/ul>\n\n<h4>7.0.12<\/h4>\n\n<ul>\n<li>Fixed the mobile carousel width when navigation arrows are disabled, preventing unnecessary text wrapping and overly tall default cards.<\/li>\n<li>Reduced mobile-only card padding slightly when arrows are disabled, without changing configured desktop or tablet styling.<\/li>\n<\/ul>\n\n<h4>7.0.11<\/h4>\n\n<ul>\n<li>Fixed the settings save-state indicator so it is shown only after a real settings change and returns to the saved state when changes are reverted.<\/li>\n<\/ul>\n\n<h4>7.0.10<\/h4>\n\n<ul>\n<li>Added an optional compact floating-badge format and mobile-only compact mode.<\/li>\n<li>Added independent badge controls for the Google logo and review count.<\/li>\n<li>Added an accessible Spanish label for the Google write-review button.<\/li>\n<\/ul>\n\n<h4>7.0.9<\/h4>\n\n<ul>\n<li>Side-panel close-button hover colors now apply only during a real pointer hover; automatic focus on panel opening keeps the configured normal colors.<\/li>\n<li>Keyboard focus retains an independent <code>:focus-visible<\/code> accessibility outline without reusing the hover background, icon, or border colors.<\/li>\n<\/ul>\n\n<h4>7.0.8<\/h4>\n\n<ul>\n<li>Carousel card background and border settings now remain authoritative when a theme applies competing important shorthands to the shared card class.<\/li>\n<li>Carousel-card, side-panel, and side-panel-card shadow presets now control their complete preset state, including activation, when resolved on the frontend.<\/li>\n<\/ul>\n\n<h4>7.0.7<\/h4>\n\n<ul>\n<li>Side-panel Read-more styling now uses explicit, component-scoped background, border, radius, and logical padding properties so every saved panel setting is applied independently of carousel, theme, and Elementor links.<\/li>\n<li>Hover border width continues to inherit the normal panel border width when its optional setting is left empty; keyboard focus keeps its independent accessibility outline.<\/li>\n<\/ul>\n\n<h4>7.0.6<\/h4>\n\n<ul>\n<li>Side-panel Read-more borders: hover now uses the configured border color and an optional hover-only width that inherits the normal width when left empty.<\/li>\n<li>Accessibility: removed the mouse-hover <code>currentColor<\/code> outline from the side-panel Read-more link; an independent outline is reserved for <code>:focus-visible<\/code> keyboard navigation.<\/li>\n<\/ul>\n\n<h4>7.0.5<\/h4>\n\n<ul>\n<li>Read-more borders: hover now uses the configured border color and an optional hover-only width that inherits the normal width when left empty.<\/li>\n<li>Accessibility: removed the mouse-hover <code>currentColor<\/code> outline from the carousel read-more link; an independent outline is now reserved for <code>:focus-visible<\/code> keyboard navigation.<\/li>\n<\/ul>\n\n<h4>7.0.4<\/h4>\n\n<ul>\n<li>Carousel actions: deployed the saved read-more spacing value to the public stylesheet and retained strict component scoping for the slider link.<\/li>\n<li>Responsive safety: cards preserve their selected aspect ratio while content fits, then expand only when large translated or administrator-styled header\/footer controls would otherwise be clipped.<\/li>\n<li>Read-more sizing: padding and borders now stay inside the card content width, with centered wrapping for deliberately large values on narrow screens.<\/li>\n<li>French translation: aligned the public read-more action with the established \u201cLire la suite\u201d terminology; Spanish remains \u201cLeer m\u00e1s\u201d.<\/li>\n<\/ul>\n\n<h4>7.0.3<\/h4>\n\n<ul>\n<li>Carousel container: added separately saved inner and outer spacing controls for top, right, bottom, and left, with an accessible linked\/unlinked editing mode.<\/li>\n<li>Rendering: the frontend and live preview now use scoped carousel-container spacing variables, responsive effective horizontal values, and protected internal navigation clearance so margins and padding cannot overflow their shortcode parent or clip arrows, pagination, or card shadows.<\/li>\n<li>Fix: the carousel \"Read more\" spacing setting now applies to the public component; live-preview badge and side-panel card radii now use the same 0\u201380 px bounds as saved frontend values; modal padding and maximum width now honour the full ranges accepted by the settings screen.<\/li>\n<li>Upgrade: existing configurations receive zero-valued spacing keys automatically without overwriting any saved carousel settings.<\/li>\n<\/ul>\n\n<h4>7.0.2<\/h4>\n\n<ul>\n<li>Reviews administration: restored one complete inventory for stored Google and manual reviews. Hidden reviews remain manageable in the administration screen and are not removed from storage.<\/li>\n<li>Review management: added search, source\/rating\/status filters, total counters, page sizes (10, 20, 50, 100, or all), and accessible pagination.<\/li>\n<li>Manual order: restored a dedicated unpaginated <strong>Reorder reviews<\/strong> mode with a global drag-and-drop list covering both Google and manual reviews. Saving validates a complete unique sequence before it is stored and selects Manual order for public components.<\/li>\n<li>Data integrity: added an idempotent upgrade migration that retains legacy 6.x order keys and completes the saved sequence with stored reviews. Deleting a manual review now removes only its obsolete order key.<\/li>\n<li>Review status: restored the visible\/hidden control for both review sources. CSV export now includes all stored reviews, including hidden ones.<\/li>\n<li>Carousel container: added an independent 0\u2013200 px container-radius setting with a live preview. It applies only to the carousel container and does not clip its arrows, pagination, or shadows.<\/li>\n<\/ul>\n\n<h4>7.0.1<\/h4>\n\n<ul>\n<li>Floating badge states: separated normal, hover, and keyboard-focus border colors, widths, and styles. Hover and keyboard-focus widths or styles can inherit the normal badge border when left empty.<\/li>\n<li>Accessibility: removed the non-configurable <code>currentColor<\/code> outline from the badge container and from mouse-focus states. Keyboard focus now uses configurable <code>:focus-visible<\/code> outlines only on the actual badge and write-review controls.<\/li>\n<li>Preview: the real-time administration preview now mirrors the frontend badge border and keyboard-focus logic, including hover borders when the normal border width is zero.<\/li>\n<li>Migration: existing 7.0 settings receive the new focus-state fields automatically without overwriting saved badge, hover, or write-review settings.<\/li>\n<\/ul>\n\n<h4>7.0.0<\/h4>\n\n<ul>\n<li>Major refactor: rebuilt the administration experience around eight task-focused tabs and a shared real-time preview that uses the public component markup.<\/li>\n<li>Settings architecture: slider, floating badge, side panel, review window, and their actions now have component-scoped options so that a setting cannot leak into another component.<\/li>\n<li>Visual system: added component-specific colors with opacity, typography controls, borders, spacing, and independent structured shadows for the badge, panel, review cards, carousel, modal, and supported controls.<\/li>\n<li>Component improvements: refreshed the floating badge, side panel, and full-review modal with isolated layers, accessible close controls, responsive behavior, and styles protected from theme or Elementor resets.<\/li>\n<li>Display controls: added independent slider pagination, native SVG arrows, structured shadows, a configurable Google write-review button, and shared displayed review-count and rating controls for the badge and side panel. A component-scoped Swiper compatibility fix preserves the left\/right direction of previous and next arrows without affecting other sliders.<\/li>\n<li>Critical carousel stability: the slider now uses a private, explicit Swiper runtime with reliable script dependencies, hidden-container recovery, ResizeObserver updates, and no fallback to Elementor or theme Swiper globals.<\/li>\n<li>Card layout: restored a dedicated card-aspect-ratio control (automatic, 16:9, 3:2, 4:3, or custom width \/ height) alongside independent height behaviour (automatic, equal, minimum, or fixed). The ratio applies only to the inner carousel card; Swiper slide widths and the side panel remain unaffected.<\/li>\n<li>Card content: ratio and fixed-height cards keep their header and footer visible while the review text truncates cleanly when space is limited. Existing 6.x ratios and early 7.0 ratio-as-height values migrate automatically without overwriting saved choices.<\/li>\n<li>Preview parity: the administration preview now runs the same real Swiper lifecycle and card markup as the frontend, including pagination and navigation.<\/li>\n<li>Preview usability: the administration preview always inspects one complete review card, independently of the public carousel columns. New Desktop, Tablet, and Mobile controls change only the simulated preview width.<\/li>\n<li>Arrow borders: added separate normal, hover, and keyboard-focus border colors, plus independent border thickness and style controls for this plugin\u2019s carousel arrows.<\/li>\n<li>Floating badge controls: added independent normal, hover, and keyboard-focus border colors, border style, width, and transition. The Google write-review button can now appear to the left, right, or compactly inside the badge with its own visual, hover, and focus controls.<\/li>\n<li>Badge compatibility: configurations from 6.x retain the historic integrated + button when that layout can be identified safely; saved left\/right configurations are preserved unchanged.<\/li>\n<li>Manual reviews: reviews created with an author and stars only remain visible in the carousel, floating badge, and side panel even when the optional empty-text filter is enabled.<\/li>\n<li>Translation safety: upgrades preserve administrator-managed legacy translation files; the settings migration never deletes locale customizations.<\/li>\n<li>Migration: existing configurations are migrated automatically on upgrade. The migration is idempotent, preserves legacy and unknown values, and never overwrites a saved configuration.<\/li>\n<\/ul>\n\n<h4>6.1.7<\/h4>\n\n<ul>\n<li>Display: the configurable review count is now the single source of truth for every public review-count label, including the floating Google badge and both side-panel header layouts.<\/li>\n<li>Admin: the badge and side-panel previews now update together in real time when this value changes.<\/li>\n<li>Data integrity: review filtering, the average rating, review cards, operational admin totals, and structured-data counts continue to use real review data.<\/li>\n<\/ul>\n\n<h4>6.1.6<\/h4>\n\n<ul>\n<li>Full-review modal: added separate color controls for the modal, its close button, and the \u201cRead more\u201d link, including hover and keyboard-focus states.<\/li>\n<li>Display: the modal is now a shared footer component with its own overlay. It opens above the side panel and works when the floating badge is used without a carousel shortcode.<\/li>\n<li>Compatibility: isolated modal and \u201cRead more\u201d styles from theme-level button and link resets, including Hello Elementor.<\/li>\n<li>Security: protected the manual Google-review sync with an administrator capability check and nonce, hardened remote avatar caching, and neutralized spreadsheet formulas in CSV exports.<\/li>\n<li>Import: headerless files can now omit the optional review text (for example: Author, Stars, Date, Photo URL).<\/li>\n<li>Dependencies: updated Swiper to 12.1.2 and replaced the broken alpha color-picker bundle with its readable GPL-2.0-or-later source.<\/li>\n<\/ul>\n\n<h4>6.1.5<\/h4>\n\n<ul>\n<li>Badge: added an optional setting to override only the review count displayed on the floating Google badge; leave it empty to keep the real filtered count.<\/li>\n<li>Manual reviews: author name and a whole-star rating are now the only required fields. Review text and profile image are optional in add, edit, and CSV\/Excel import workflows.<\/li>\n<li>Display: manual reviews without text remain visible in the carousel, badge, and side panel without an empty-text gap; Google empty-text filtering is unchanged.<\/li>\n<\/ul>\n\n<h4>6.1.4<\/h4>\n\n<ul>\n<li>Internationalization: finalized English source strings in the active trunk code for WordPress.org translation workflows<\/li>\n<li>Admin\/UI consistency: aligned remaining visible labels and export headers with the English source baseline<\/li>\n<li>Release prep: version bump and readme metadata updated for the 6.1.4 tag<\/li>\n<\/ul>\n\n<h4>6.1.3<\/h4>\n\n<ul>\n<li>Internationalization: user-facing strings use English (<code>en_US<\/code>) as the translation source (WordPress.org \/ Polyglots guidelines)<\/li>\n<li>Readme: aligned with admin labels; clarified default locale, CSV headers, and Google API <code>language<\/code> parameter<\/li>\n<li>Regenerated translation template and refreshed bundled <code>es_ES<\/code> \/ <code>fr_FR<\/code> \/ <code>en_US<\/code> catalogs<\/li>\n<\/ul>\n\n<h4>6.1.2<\/h4>\n\n<ul>\n<li>Fix: admin color pickers (Esthetica tab) now update the live preview in real time<\/li>\n<li>Fix: card header layout \u2014 author name and stars are centered on the full card width while the avatar stays pinned left<\/li>\n<li>Fix: sidebar panel review cards no longer inherit slider-only CSS (avatar sizing, star alignment)<\/li>\n<\/ul>\n\n<h4>6.1.0<\/h4>\n\n<ul>\n<li>Carousel, badge, and side panel with manual reviews and Google API sync<\/li>\n<li>CSV\/Excel import; drag-and-drop order; translation-ready (EN, ES, FR)<\/li>\n<li>Rich Snippets (JSON-LD), configurable styles and filters<\/li>\n<\/ul>","raw_excerpt":"Display Google Business reviews in a carousel, floating badge, and side panel, with manual reviews, imports, and API sync.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/284612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=284612"}],"author":[{"embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/etchenet"}],"wp:attachment":[{"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=284612"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=284612"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=284612"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=284612"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=284612"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bho.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=284612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}