Fix: the 2.2 identifier migration could be skipped on sites where the first admin_init after the upgrade fired without manage_options (editor-role user, custom roles, AJAX/cron contexts), leaving vacancies stored under the legacy vacatures post type and invisible in admin and on the front-end. The migration now re-checks for legacy vacatures / cities / position rows on every admin page load and renames any that remain, regardless of whether the multiposter_migration_v22 flag was previously set
Fix: bust the posts and terms object-cache last_changed keys after the migration so cached query results pick up the renamed post type and taxonomies immediately
2.3
Security: escape forward slashes in the JobPosting JSON-LD output so vacancy fields containing </script> cannot break out of the schema <script> tag
Switched the archive AJAX handler to wp_send_json and now caches the response as a structured array instead of a raw JSON string
Removed the unprefixed [jobs_archive] and [job_single] shortcode aliases — please update existing pages to use [multiposter_archive] and [multiposter_single]
2.2
Renamed text domain to match the WordPress.org plugin slug
Prefixed custom post type, taxonomies and shortcodes with multiposter_ to avoid collisions
Added one-time migration that updates existing posts and terms on first admin load after upgrade — no manual action required
Hardened API-key sanitization, escaped vacancy title in the the_content filter callback, moved the inline admin loading-overlay style into the enqueued stylesheet
Documented the candidate registration endpoint and the public source repository in the readme
2.1
Documented external services (Multiposter API, social share endpoints)
Switched JSON responses to wp_json_encode
Hardened output escaping on share buttons and admin settings tabs