Skip to content

Voxel Toolkit Changelog

Release notes for every Voxel Toolkit release, newest first. The current release is 1.7.3.

Updates install through the normal WordPress updates screen once your license is active — see Installation & Licensing.

Back up before updating a production site

Voxel Toolkit writes to post meta, taxonomy terms, and Voxel's own data structures. Update on staging first where you can.

1.7.3

AI Autofill (New)

  • AI Autofill feature - Paste a website URL, Google Maps link, or business name and let AI fill a new Voxel listing draft — title, description, categories, location, hours, images, and more. Enable it under Voxel Toolkit → Functions, then drop the "AI Autofill (VT)" Elementor widget onto your submission page. All of its options (rate limits, Google Places key, image-rights consent, vision curation, and more) live right in the AI Autofill settings panel — no separate settings page.
  • Uses your existing AI configuration - AI Autofill uses the same provider and API key you already set in Voxel Toolkit → AI Settings, so there's no second AI to configure.
  • WordPress AI (Connectors API) - AI Settings now offers "WordPress AI (Recommended)" for sites on WordPress 7.0+. It routes through WordPress's native AI Client, so you configure AI once, in WordPress, and every plugin can use it — no API key stored in Voxel Toolkit at all. Includes a one-click "Test Connection" button. Your existing OpenAI or Anthropic key configuration is unchanged.

Fixes

  • Profile Progress widget - Restored the missing "Profile Progress (VT)" Elementor widget. It had been hidden by an internal setting that was never surfaced; it now has its own toggle under Voxel Toolkit → Widgets.
  • Messenger - The floating messenger bubble no longer appears unresponsive when you have no conversations yet — it now shows a "No conversations yet" message when opened.
  • Image Optimization - Removed a harmless-but-noisy JavaScript error (wp is not defined) that could appear in the browser console on the front end.

1.7.2.1

Translations

  • Updated Translation Template - Regenerated languages/voxel-toolkit.pot so it includes all strings added since 1.6.1.4, covering the FluentCRM Integration, Image Crop Tool, Social Proof visibility controls, and other recent features (4,145 strings, up from 3,776).

1.7.2

FluentCRM Integration (New)

  • Sync Members to FluentCRM - Automatically creates and keeps a FluentCRM contact in sync for each Voxel user — on registration, profile save, email change, and deletion — with a configurable field map and new-contact subscription status.
  • Contact-Screen Tabs - Adds Voxel context to the FluentCRM contact screen: a member's Reviews, Timeline activity, Membership, Paid Listings, and per-post-type tabs.
  • Auto-Tagging - Automatically applies and removes FluentCRM tags based on a member's WordPress role, active membership plan, active paid-listing plan, and state flags (has a listing, has a membership). A one-time "Sync Users" backfill also applies tags to existing members.
  • Automation Triggers (FluentCRM Pro) - New Voxel triggers for the FluentCRM funnel builder: Listing Published, Membership Purchased, Membership Cancelled, Order Completed, and Review Submitted — each with the Voxel Toolkit icon in the trigger list.
  • Bulk Sync Tool - Backfill your entire existing member base into FluentCRM in one pass from the settings panel.

Image Crop Tool (New)

  • Crop on Upload with Aspect Ratio - Added to the Image Optimization function: an interactive crop interface that appears before upload, with a default aspect ratio and per-field-type ratios (Avatar, Logo, Featured, Cover, Generic image) — choose Disabled, Free, 1:1, 16:9, 4:3, or 3:2. The crop step is skipped for batch uploads, the gallery field, mobile/touch devices, and any field set to Disabled.

Social Proof

  • Visibility Controls - New settings to hide social-proof notifications for logged-in users, and to exclude specific post types or specific pages.
  • Widget No Longer Hangs on a Spinner - The saved-search list could get stuck on a loading spinner whenever a saved search contained a filter. The list now builds safely and always clears the loading state.
  • "View Search" Opens the Right Page - The magnifying-glass button in the saved-search list could land on a blank page when the post type had no archive. Saved searches now remember the page they were created on and reopen it with the filters applied.

1.7.1.2

Recurring Events

  • Cards Match the Date Filter - When a recurring-date filter (Today, This Week, This Month, etc.) was active, the results could include occurrences from outside that window and even relabel a card's date incorrectly (e.g. showing a weekday in place of the year). Cards now show only the occurrences that fall inside the selected window, with their dates rendered correctly.

Active Filters Widget

  • Default Term & Location Now Show as Chips - When a search form had a pre-selected category or a default location, those defaults weren't appearing as active-filter chips. They now show up alongside the rest of your filters.

Saved Search

  • Email "View" Link Works - The link in saved-search notification emails pointed at an empty address and showed a blank post type. It now links to the real listing and shows the correct type label.
  • Cleaner Modal Separators - The dividers between items in the saved-search popup were drawing in the wrong places. The Popup Border Color control now styles the header, footer, and item separators as expected.
  • Enable Save / Load on Every Search Form - Two new options let the Save Search and Load Search buttons appear on all search forms at once, instead of toggling each widget individually.

Messenger

  • Bubble Appears by Default - A messenger that was never explicitly configured could stay hidden. It now displays by default unless you turn it off.

Location Filter

  • Icons No Longer Covered After Denying Location - After declining a browser location prompt, the Suggest Edits modal's styling was bleeding onto the location filter and painting over its icons. That styling is now scoped to the modal only.

AI Bot

  • Respond in Any Language - Added a "Custom" option to the response-language setting so you can have the bot reply in any language you specify, not just the ones in the preset list.

Add Category

  • Placeholder Color Control - Added an Input Placeholder Color styling control so the placeholder text in the Add Category form can be set to any color (and shows at full strength across browsers).

1.7.1.1

Advanced Phone Input

  • Selected Country Code Now Saves - Picking a country (e.g. Suriname +597) and saving no longer reverts to +1. The full international number is now stored on the field itself, so the country survives a save — in both single phone fields and repeater rows — and the default-country setting takes effect.

Reading Time

  • Counts Repeater & Custom-Field Content - Reading time now counts text stored in custom and repeater fields, not just the main content area, so posts whose body lives in repeaters get an accurate estimate instead of always showing "1 min".

Messenger

  • Chat Reliably Opens When Clicked - The floating messenger button could stop responding to clicks, and the shortcode loaded no script at all. The button now opens the chat consistently whether placed via the widget or the shortcode.

AI Bot

  • Clear "No Results" Feedback - When a search matched nothing, the bot could hang on "Searching…" with no follow-up. It now always tells you when nothing was found.
  • Model List Cleanup - Removed retired Claude models from the AI provider settings so only currently-supported models can be selected.

Auto-Share to Timeline

  • Listing Images Now Appear in Shared Cards - When a listing's image lived in Voxel's cover field, the auto-shared timeline card came up blank — the feature was looking for a field named cover_image, which doesn't exist. It now checks the correct cover field first, so those cards show their image.
  • No More Broken-Image Icons - When a post had no image at all, the timeline card rendered a broken-image icon (Voxel draws the preview image with no empty-source guard). The card now falls back to a default preview image, or your site logo, so it never looks broken.
  • New "Default preview image" Setting - Set a placeholder image to use whenever a shared post has no featured or Voxel image. Found under Auto-Share to Timeline → Message.
  • Front-End Submissions Keep Their Image - For listings submitted from the front end, the featured image often finishes uploading a moment after the post is created — so the card used to lock in with no image, permanently. The card now updates itself automatically as soon as the image lands.
  • Theme Override Hook (developers) - New filters let a theme supply a custom preview image (e.g. the site's Open Graph image) without editing the plugin: voxel_toolkit/auto_share/preview_image, voxel_toolkit/auto_share/fallback_image, and voxel_toolkit/auto_share/image_field_keys.

1.7.1

AI Bot

  • Search Actually Returns Results - The AI Bot was getting stuck after saying "Searching for…" and never showing anything. It now returns real matches instead of stopping at the announcement.
  • More Reliable Responses - Tightened up how prompts are sent so the bot returns search results consistently instead of occasionally going off into chatty replies.
  • Welcome Message No Longer Grows Backslashes - Every time the AI Bot settings were saved, an extra backslash crept into apostrophes (you're → you're → you\'re). Saving is fixed, and any already-corrupted messages clean up automatically on the next page load.

Active Filters Widget

  • Hide on Tablet / Hide on Mobile Now Works - Elementor's responsive visibility controls had no effect on this widget. They work now.
  • Pre-Applied Filters Show on Archive Load - On archives where filters are active by default (user-profile location, default radius, persisted filters from a previous visit) but the URL doesn't show them yet, the filter chips were rendering empty. They now show every filter that's actually applied.
  • Smoother Mobile Swiping - Side-to-side swipes on the horizontal-scroll filter row no longer fight the page scroll or accidentally trigger pull-to-refresh.
  • Child Terms No Longer Disappear - When a post was tagged with both a parent and a child term, the child term sometimes vanished from the trail (e.g. "Connecticut > [Fairfield missing] > Listing"). The full hierarchy now shows every time, regardless of how the term names sort.

Advanced Phone Input

  • Mobile Phone Buttons Now Work - Phone numbers entered with a leading 0 (common in Europe) produced a broken tel: link that mobile dialers refused to call. The leading 0 is now stripped automatically so the dialer always receives a valid international number.
  • One-Click Cleanup for Existing Numbers - New tool on the Advanced Phone Input settings page that fixes every previously-saved phone number on your site in one click. No need to ask users to re-save their profiles.

Image Optimization

  • Social Link Previews Now Work with WebP - WhatsApp (and several smaller link scrapers) can't decode WebP, so shared links from sites using WebP optimization were showing no preview thumbnail. New Social Fallback setting keeps or generates a JPEG copy alongside each WebP and swaps it into the meta tags WhatsApp, Facebook, and Twitter look at — so previews show up everywhere.
  • Backfill JPEG Copies - For sites that already converted everything to WebP, a new backfill action generates JPEG companions for existing images so the social-fallback feature works retroactively.

AI Post Summary

  • Clearer Error Reporting - When a summary fails to generate (API key missing, post has no content, OpenAI/Anthropic returns an error), the reason now appears in the error log alongside the post ID. Easier to tell which posts failed and why.

RSVP Widget

  • Post Authors Can Export Their Own Attendees - The Export CSV button on the attendee list was effectively admin-only. New widget setting picks who sees the button (admins, or admins plus the post author), and the export now honors the post author's edit permission so authors can actually download their event's attendee list.

Suggest Edits Widget

  • Location Filter Icons Stop Disappearing - On pages with both this widget and a search form, denying the browser's location-permission prompt could make the icons in the search form's location filter vanish. Fixed.
  • Faster Page Loads - The widget was pulling in WordPress's full media library JavaScript on every page where it appeared, even if the photo-upload feature was turned off. That payload now loads only when photo-upload is actually enabled.

Route Planner

  • Mapbox Map No Longer Errors Out - Under certain timing conditions, the Mapbox map would fail to display with a "no access token" error. Fixed.
  • Route Waypoint Popups Render on Mapbox - Popups on Mapbox setups were failing silently. Now works across Google, Mapbox, and Leaflet.

Add Category

  • Form Button Border Radius - Added an Elementor style control for the Submit and Cancel button corners on the add-category form.

Saved Search Modal

  • More Style Controls - Added Elementor controls for button corner radius, input focus border color, input focus glow, notification toggle text color, and checkbox color.

1.7.0

New: Multi-Locations

  • Integrated Multi-Locations function - Map a Voxel post type to a repeater field that holds additional locations; indexed locations show as extra map markers on archive maps and post cards match location-based searches when any of their multi-locations falls within the search area. Per-post-type mappings with badge color controls, spatial index table, and a chunked re-index tool inside the Voxel Toolkit settings panel

New: Auto-Share to Timeline

  • Integrated Auto-Share to Timeline function - When a user publishes a new listing, automatically creates a sitewide user_timeline entry with a link-preview card pointing to the post. Per-post-type source selection, per-role / per-plan access control, rate limits per request and per author/hour, customizable message template with placeholders and one-click copy, and support for HTML entity emoji codes

New: Recently Viewed (VX) Widget

  • Integrated Recently Viewed widget - Track each user's recently viewed Voxel posts (user meta for logged-in users, localStorage for guests) and display them via an Elementor widget or [voxel_recently_viewed] shortcode. Cards render from the Voxel post type's card template, not a custom layout, so they match the rest of the site

Active Filters Widget

  • Mobile Horizontal Scroll - New control that makes the filter row horizontally scroll on screens under 768px instead of wrapping. Scrollbar is hidden and a soft right-edge mask hints at more content off-screen; Clear All stays pinned
  • Location Abbreviation - New control that strips coordinate tails (;lat,lng,radius) and parens (Nearby(lat,lng)) from location filter values, and shortens full addresses to "City, State ZIP". Prevents the long 13079 N Torrey Pines Rd, San Diego, CA 92121, USA;32.9348, 117.26, 50 chip from dominating mobile screens

Bulk Resize (Image Optimization)

  • Update Content References on Conversion - New opt-in setting (default on). When Bulk Resize converts an image to WebP, the old URL no longer breaks images embedded in posts. Targets wp_posts.post_content / post_excerpt via SQL REPLACE and walks wp_postmeta with a serialization-safe pass so length-prefixed PHP strings stay valid. Catches absolute, CDN, protocol-relative, and root-relative URL variants by rewriting the relative path within /uploads
  • UTF-8-safe attachment metadata - pathinfo() was mangling multibyte filenames into ? placeholders on servers running in the C/POSIX locale, which poisoned attachment titles in the media library; now uses UTF-8 aware regex extraction and validates the result before writing to the database

Onboarding Widget

  • Fix for Archive Templates - The March fix only checked templates on single pages. Archive templates (and taxonomy archives) now also go through the template scan, so the intro.js tour runs correctly on archive-rendered pages

Schedule Posts

  • Fix for Single-Page Create Forms - The scheduler never appeared on non-stepped Create Post forms because the submit-button detection rejected all anchor tags to avoid matching the confirmation page "View" link. Single-page forms render the publish element as <a class="ts-save-changes">, so the gate now keys on that class instead of tag name

Saved Search Modal

  • New modal style controls - Added Elementor controls on the Voxel search form widget for the Save Search modal: button border radius, input focus border + glow, "Enable notifications" text color, and "Enable notifications" checkbox color
  • Softer default focus ring - Removed the strong purple focus glow from the input; default is a subtle gray border with no ring (still customizable via the new focus controls)

Add Category

  • Fix fatal on Voxel Events admin page - The term dynamic tags (@term(name), @term(taxonomy), etc.) were exposed as a Tag::Object data type, which Voxel's Exporter::add_group() rejects with a fatal type error that took out every event's admin row. Now exposed via a proper Base_Data_Group subclass with the same tag keys, so existing email templates keep working

1.6.1.9

  • Fix for WordPress 6.8 Compatibility - Temporary login links stopped working after a WordPress update; resolved the compatibility issue so temp login URLs function correctly again

AI Chatbot

  • Fix Temperature Error with Reasoning Models - OpenAI reasoning models (o1, o3, o4 series) reject custom temperature values, causing an API error when using the AI Chatbot; now omits the temperature parameter for reasoning models, letting the API use its default

1.6.1.8

Onboarding Widget

  • Fix for Single Listing Templates - Onboarding widget scripts (intro.js) were not loading on single listing pages because the asset check only looked at the listing post's Elementor data, not the Voxel template's; now checks all post type templates so the tour triggers correctly on any Voxel-rendered page

Suggest Edits

  • Fix Multi-Select/Taxonomy Override - Accepting a suggested edit for multi-select or taxonomy fields no longer replaces all existing values; suggested values are now merged with existing ones (e.g., suggesting "Free WiFi" on a listing with "Toilets, Vegan Options" will add it rather than replacing them)
  • Prefix & Suffix Text Style Controls - Added Elementor style controls (color, typography, spacing) for the Prefix Text and Suffix Text options; sections appear conditionally when text is set

Add Category

  • Fix UI Leaking into Header/Menu Popups - The "Add new term" form was appearing in header user menu and create listing popups after selecting a taxonomy in the listing creation form; now expires the stale form group reference and skips injection into header/navigation contexts
  • Fix Multi-Field Term Selection - When multiple taxonomy fields had add-term enabled, creating a term in the second field would autofill into the first field; now captures the correct form group reference at injection time and filters Vue component resolution by field key
  • Fix OAuth/Social Login Interference - The external link warning modal was intercepting Google login and other OAuth redirects, blocking social login flows; now automatically bypasses known OAuth providers (Google, Facebook, Apple, Microsoft, GitHub, Twitter/X, Discord, LinkedIn) and any URL with a redirect_uri pointing back to the current site

RSVP Widget

  • Fix Disappearing Admin Buttons - Approve, Reject, and Delete buttons on the attendee list were disappearing on page load because the cache-proof refresh rebuilt the list without admin action buttons; now passes admin state via data attributes so buttons persist after refresh
  • Searchable Parent Category Dropdown - New option to convert the native Parent Category <select> on taxonomy term add/edit pages into a searchable Select2 dropdown; useful when taxonomies have many terms to scroll through; toggle in Admin Taxonomy Search settings

Saved Search Widget

  • Dialog Style Controls - Added Elementor style controls for Save/Load Search modals: input field (background, border, focus border, focus shadow), notification toggle (label color, checkbox accent), button border radius, and divider colors (header, footer, item separator)
  • Load Search Border Fix - Fixed stray top border appearing on the first search result after the "Clear Filters" row in the Load Search modal

Duplicate Title Checker

  • Fix Self-Match on Edit - Editing a listing 2+ times would trigger a false "duplicate title" warning because the checker failed to detect the current post ID from Voxel's frontend URL (?post_id=); now correctly excludes the post being edited

Address Modifier

  • Geocode Failure Caching - Failed geocoding results are now cached for 1 hour to avoid repeatedly hitting the API for the same bad address; successful results remain cached for 24 hours
  • Nominatim Rate Limiting - Added 1 request/second rate limiter for Nominatim (OpenStreetMap) geocoding to comply with their usage policy; also added explicit 10s timeout and SSL verification

Profile Completion

  • Support for first_name, last_name, and taxonomy fields - profile_completion modifier now correctly detects first_name and last_name (fetched from wp_usermeta instead of post meta) and taxonomy fields (checked via get_the_terms() instead of post meta); also accepts voxel:-prefixed keys (e.g., voxel:first_name)

Image Optimization

  • Server-Side WebP Conversion for Media Uploads - Added wp_handle_upload filter that converts JPEG/PNG to WebP server-side when client-side plupload conversion fails (e.g., Media > Add Media File); respects optimization_mode setting, applies max_width/max_height resize and output_quality; skips files already arriving as WebP, originals_only mode, and servers without WebP support; returns original file unchanged on any failure

Route Planner

  • Fix Two-Finger Gesture on Mobile - initCooperativeGestures() referenced this.map.source which is undefined; changed to this.map.getSourceObject() so cooperative gestures (Google Maps, Mapbox, Leaflet) now actually initialize on touch devices

Checklist

  • Safari Compatibility Fix - Replaced RegExp lookbehind assertion in progress text update that caused the entire JS file to fail in Safari < 16.4 (and iOS Safari), breaking all checklist interactivity; uses a single capture-group regex instead
  • HTML Support in Descriptions - Checklist item descriptions now support HTML tags (links, bold, italic, lists, etc.); sanitized with wp_kses_post() on save and output so users can add clickable links and basic formatting

1.6.1.7

Route Planner

  • Two-Finger Gesture on Mobile - Map now requires two-finger gestures to pan on touch devices, so single-finger swipe scrolls the page normally instead of trapping the user; shows a brief "Use two fingers to move the map" overlay on single touch; uses native cooperative gestures for Google Maps, cooperativeGestures API (with fallback) for Mapbox, and a manual handler for Leaflet/OSM; toggleable in Elementor, enabled by default

Image Optimization

  • Fix Ghost Upload Slot in Media Library - Rewrote plupload integration to swap file content in-place on the existing plupload File object instead of removing/adding queue entries; the old approach broke WordPress's internal file-to-attachment mapping, causing a second upload slot that stalled at ~20% and required re-selecting the image

Listing Plan Notifications

  • New Function - Send email notifications to users when their individual listings are approaching expiration (based on voxel:listing_plan user meta with fixed_days expiration mode); supports per-listing dedup, 7 dynamic tags ({listing_title}, {expiration_date}, {remaining_days}, {plan_name}, {post_type}, {amount}, {currency}), test emails, and manual trigger with stats

1.6.1.6

Saved Search Widget

  • Notification Button Active State - Notification toggle button now reflects Elementor Active tab styles (background, icon color, border) when notifications are ON, not just on click
  • Filter Tags Text Color Fix - Text Color control under Filter Tags now correctly applies to criterion values (was blocked by base CSS specificity)

International Phone Input

  • Deferred XHR/Fetch Hooking - XHR and fetch monkey-patches are now only installed when a phone input actually exists on the page, eliminating unnecessary string checks on every AJAX request site-wide (calendar, notifications, Cloudflare beacons, etc.)
  • Conditional Visibility Fix - Fixed @post(phone) Is not empty always evaluating false when Advanced Phone Input is enabled; added render fallback to the dynamic data tag so bare @post(phone) returns the raw phone value

Weather Widget

  • Localized Forecast Dates - Forecast day names now respect the widget's language setting using IntlDateFormatter (e.g., "pon., 16 lut" in Polish); falls back to English if the intl extension is unavailable
  • Forecast Humidity & Wind - Forecast cards now show humidity and wind speed when those toggles are enabled (previously only shown on Current Weather view)
  • Translated Detail Labels - "Humidity" and "Wind" labels are now translated across all 40 supported languages in both Current Weather and Forecast views

1.6.1.4

Enhanced TinyMCE Editor

  • Upload Capability for All Users - Dynamically grants upload_files capability to all logged-in users when Enhanced Editor is active; fixes media uploads silently failing for roles like Voxel's "visitor" (mapped to subscriber) that lack this capability by default

Saved Search Widget

  • Share Search Button - Added a Share button to each saved search card that copies the search URL to the clipboard; includes Elementor toggle, custom label, success message, and icon controls
  • Action Button Hover & Active States - Added Normal/Hover/Active tab controls for action button background, icon color, and border color styling

AI Settings

  • Updated AI Model Lists - Replaced outdated OpenAI models with GPT-5 Mini, GPT-5.2, GPT-5 Nano, and o4-mini; replaced outdated Anthropic models with Claude Haiku 4.5, Sonnet 4.5, Sonnet 4, Opus 4, Opus 4.5, and Opus 4.6
  • OpenAI GPT-5 Compatibility Fix - Fixed all OpenAI models (GPT-5 series and o4-mini) failing with "Unsupported parameter: max_tokens" by switching to the required max_completion_tokens parameter

Saved Search Notifications

  • Double Email Fix - Fixed users receiving two emails (one from Voxel async, one from batch processor) when email batching is enabled; Voxel's async email is now properly suppressed even after admin config merge
  • Batch Email Reliability - Batch emails now process immediately after queuing instead of relying solely on WP-Cron, ensuring timely delivery
  • Voxel Email Template - Batch emails now use Voxel's styled email template (logo, accent colors, footer) instead of a basic HTML wrapper
  • Admin Template Support - Batch emails now respect admin-customized email subject/message from Voxel's app events settings
  • Dynamic Tag Fix - Fixed @recipient(display_name) and other recipient/site tags not rendering in batch emails

Weather Widget

  • Kelvin Units Fix - Fixed "Error loading weather data" when Kelvin units selected by mapping to the correct OpenWeatherMap API parameter

Image Optimization

  • WebP Upload Inflation Fix - Fixed client-side optimization inflating WebP files by re-encoding through canvas; same-format files that don't need resize or watermark now skip the canvas pipeline entirely, preserving original file size
  • Size Comparison Fallback - Added safety net that keeps the original file when canvas re-encoding produces a larger result (e.g., resize/watermark applied but output is still bigger)
  • Keep Original Name Fix - Fixed "Keep original name" filename format still appending counter and session suffix (e.g., -01-djsv); now preserves the original filename with only the extension changed when format conversion occurs
  • Watermark Media Uploader - Replaced the plain URL text input for watermark images with a proper WP media uploader (preview, upload/remove buttons); watermark PNG uploads now bypass image optimization to prevent WebP conversion; existing URL-only settings are auto-migrated to attachment IDs

1.6.1.3

Table of Contents Widget

  • Repeater Field Completion - Fixed repeater fields not showing green completion indicator when items are added
  • Conditional Field Visibility - Fixed conditional fields still appearing in TOC when their conditions aren't met; TOC now syncs with form visibility

AI Post Summary

  • Increased Max Token Limit - Raised the maximum token limit from 1,000 to 5,000 for longer AI-generated summaries

Show Field Description

  • Repeater Child Description Fix - Fixed child field descriptions (e.g., image field) incorrectly appearing on parent repeater fields that have no description

Dynamic Tags

  • Address Part City Fix - Fixed address_part(city) returning state/county instead of city for Polish and other addresses by adding fallbacks for sublocality, sublocality_level_1, and administrative_area_level_3 (municipality/gmina) before falling back to administrative_area_level_2 (county)

1.6.1.2

Pending Suggestions Widget

  • Removed Built-in Visibility Conditions - Removed logged-in, admin, and post author checks; use Voxel's Elementor conditions instead for flexible visibility control
  • Added Accepted Status Filter - Status dropdown now includes All, Pending, Queued, and Accepted options
  • Show Accepted in All View - Accepted suggestions now display when "All" filter is selected
  • Accepted Status Badge - Added green status badge for accepted suggestions

Translations

  • Complete POT File Generation - New generate-pot.php script scans all PHP files and extracts 3,775+ translatable strings (previously only ~60 strings were in the POT file)

Dynamic Tags

  • Address Part Localization - The address_part method now returns address components (city, country, etc.) in the site's current language by re-geocoding with Google/Mapbox API; supports WPML, Polylang, TranslatePress, and WordPress locale with 24-hour caching
  • Modal Border Radius Setting - New setting to customize modal border radius (was hardcoded to 12px)
  • Overlay Background Setting - New setting to customize the overlay/backdrop color
  • CSS Variables for All Styling - All modal styling now uses CSS variables; no more hardcoded values

AI Bot

  • Localized UI Messages - "No results", "error", "rate limit", and "login required" messages now respect the AI Response Language setting (supports 15 languages including Russian, Ukrainian, Polish, Arabic, Japanese, Chinese, etc.)
  • Improved Taxonomy Search - Schema now includes taxonomy_name for taxonomy/term fields so AI knows the correct WordPress taxonomy to use with _taxonomy: filter
  • Better Taxonomy Hints - Field hints now explicitly tell the AI to use _taxonomy:taxonomy_name format with term slugs

Schedule Posts

  • Native Date Input - Replaced Pikaday calendar popup with native HTML date input; eliminates z-index/positioning issues with footers and other elements
  • Pending Status Support - Posts with "pending" status can now be scheduled (previously only worked with "publish" status)
  • Translated Sites Fix - Fixed scheduling field incorrectly appearing on confirmation page for translated sites
  • Hide When Empty - Load Search button now automatically hides when user is logged out or has no saved searches

Phone Field

  • New Caledonia Missing - Added New Caledonia to backend country selection list (was only available on frontend)
  • Liechtenstein Missing - Added Liechtenstein to backend country selection list (was only available on frontend)

Admin Notifications

  • Individual Users Fix - Fixed individual users not receiving email notifications due to type mismatch

Online Status

  • Display Location Settings Fix - Fixed "Display Locations" checkboxes not saving when unchecked; messenger/inbox/dashboard toggles now work correctly
  • Notification Avatar Fix - Fixed avatars becoming square in notification popup when Online Status is enabled

App Events

  • Admin Page Crash Fix - Fixed PHP Fatal error on Voxel App Events admin page caused by dynamic_tags() methods returning arrays instead of proper data group instances

Active Filters Widget

  • AJAX Label Fix - Fixed filter labels showing field key (e.g., "terms") instead of field label (e.g., "Category") during AJAX search; labels now read from Voxel's Vue search form at runtime

Saved Search

  • Improved Notification Reliability - Fixed timing issue where notifications could fail when admins publish posts from wp-admin; now uses deferred processing at request shutdown to ensure all post data is saved before matching
  • Debug Logging - Added comprehensive debug logging (enable with define('VT_SAVED_SEARCH_DEBUG', true) in wp-config.php) to trace notification failures

1.6.1.1

Suggest Edits Improvements

  • Hierarchical Taxonomy Display - Taxonomy fields in the suggest edit modal now display with proper parent/child hierarchy using indentation
  • Checkbox List UI for Multi-select - Replaced native <select multiple> with a scrollable checkbox list featuring circle/checkmark indicators for clearer selection state
  • Pre-fill with Current Values Toggle - New Elementor control to pre-populate multi-select fields with current values, allowing users to add or remove items without re-selecting everything
  • Admin Display Fix - Taxonomy and select field suggestions now show labels instead of IDs in the admin suggestions table
  • Template Editor Fix - Fixed "Fields to Show" dropdown showing empty when editing Elementor templates

Schedule Posts Fixes

  • Pikaday Calendar Fix - Fixed calendar not displaying by loading Pikaday directly from Voxel theme
  • CSS Loading Fix - Fixed stylesheet not loading due to hook timing issue
  • Inline Layout - Date and time inputs now display side-by-side as intended
  • Consistent Styling - Time input now matches date selector height (44px)

Image Optimization

  • Watermark Opacity Control - New setting to adjust watermark transparency (0-100%) for both text and image watermarks
  • Translation Support - Toast notifications and messages are now translatable via Loco Translate and similar plugins
  • Elementor Media Library Support - Image optimization now works with Elementor image widgets, Gutenberg blocks, and WordPress Media Library uploads

Social Proof

  • Translation Support - Time ago strings (minutes, hours, days, ago) are now translatable for boost events

Saved Search

  • Alert Width Fix - Fixed alert popup text overlapping when using translated languages (e.g., Polish)

Admin Columns

  • Verification Status Column - New column type showing post verification status with configurable labels, custom icon support, and show/hide toggles for icon and text

Add Category

  • Elementor Styling Fix - Fixed form input styling controls not applying in Elementor editor
  • Translation Support - Added all frontend strings to POT file for translation (Add new, Term name, etc.)

Messenger Widget

  • Input Text Color Default - Set default input text color to black for better visibility

Promotion Create Form

  • Package Icons Fix - Custom SVG icons from promotion package settings now display correctly in the create form
  • Duration Color Control - New Elementor color control for styling the duration text independently from other card elements

Bulk Resize

  • WebP Format Conversion - Bulk resize now converts images to WebP based on the optimization mode setting, even for images that don't need resizing
  • Warning for Larger Files - Shows warning icon with tooltip for images that increased in size after conversion
  • Backup Original Files - New option to keep original images in a backup folder (wp-content/uploads/vt-originals/) instead of deleting them during WebP conversion
  • Delete Originals Button - Backup Management card shows file count and size with a delete button requiring "confirm" input for safety

Translation

  • Complete POT File - Regenerated translation template with 3,749 translatable strings for full Loco Translate support

Built by Code Wattz.