Skip to main content
Skip to footer
New Features
- Remote Work Filter: New search filter that lets visitors narrow the job board to roles allowing remote work, with
remote_work_allowed added to normalized job meta. Configurable from the Elementor widget, the Bricks widget, and the shortcode generator.
- Google JobPosting Schema Validation: A built-in schema validator that surfaces the structured-data health of every listing directly in the Jobs tab.
- Status badge on each job row, shown whenever schema output is enabled.
- Per-listing breakdown of exactly which required fields are missing.
- Click-to-preview of the generated schema, so you can inspect what Google receives without leaving the dashboard.
- Selective Job Sync: New single-job sync action in the Jobs tab, backed by a dedicated endpoint, allowing an individual listing to be refreshed on demand instead of triggering a full sync.
- Sync Mode Switcher: New setting to select the synchronization mode, letting the sync strategy be matched to listing volume and update frequency.
- Template Version Tracking: Template files now carry version markers, enabling detection of outdated theme overrides after a plugin update.
- Auto-Select Phone Country: New setting that defaults the apply form’s phone country to the individual listing’s country code from raw job meta, taking precedence over the site-wide default phone region.
Improvements
- Duplicate Job Prevention: Added MySQL-level source job locking to eliminate duplicate listings created by concurrent inserts.
- Post-sync dedupe pass to catch any duplicates that slip through.
- Deterministic base slug generation with dedupe slug normalization, so recurring listings retain stable, clean URLs across removal and re-posting.
- New
limestaff_job_base_slug filter for developers needing custom slug logic.
- Sync Queue Watchdog: The queue process now detects stalls and automatically re-spawns after 15 minutes, allowing an interrupted sync to recover without manual intervention.
- Taxonomy Term Recount: Added a term recount step to the sync process, keeping job category and location counts accurate as listings are added and removed.
- Normalized Location Output: Job locations are now built into a single normalized address (city, full state name, country), cached in meta, and used consistently across search results, single job templates, and schema output.
- Application Log Retention: Automatic cleanup now covers pending and failed logs as well as successful ones, retaining them for twice the configured retention window so failures remain available for review.
- Company Visibility Control: Single job templates now honor the per-listing
company_hidden value alongside the global company toggle.
- Default Sort Order: Job listings now default to descending published date.
- Webhook Teardown Safety: Added locking and a failure queue around webhook deletion to prevent conflicts when a teardown fails partway through.
- Clean Code Maintenance: Added a migration helper with step logging for smoother upgrades, separated the apply form JavaScript cache-busting version so script updates reach visitors immediately, and resolved a deprecated null-handling warning in the inline style helper.
Fixes
- Payload Serialization: Resolved an issue where certain characters in the Loxo payload caused raw meta serialization to fail, silently breaking the affected listings.
- Schema Hiring Organization: Corrected a null-coalescence misuse that left the
hiringOrganization field empty in the generated JobPosting schema.
- Hierarchy Field Validation: Dynamic hierarchy fields on the apply form now validate against the topmost options container, eliminating false validation errors on nested selections.
- Application Error Output: Removed extraneous error detail rendered to candidates when an application submission failed.
- Elementor Widget Styling: Fixed the parent job wrapper overriding button styles, corrected apply button hover text specificity, and fixed an incorrect CSS target for the button background hover state.
- Bricks Widget Styling: Improved style specificity so widget styling is no longer overridden by theme defaults.
- Plugin Activation Failure: Fixed a fatal error on activation on hosts where a relative autoloader path could resolve to an unrelated Composer autoloader, leaving the plugin’s own classes unloadable. Plugin requires are now anchored to the plugin directory.
All Releases