Releases: senlin/quick-multilingual
Releases · senlin/quick-multilingual
Release list
version 2.0.3
- date: September 5, 2026
- Added: "Number of Languages" selector (3–20) at the top of the General Settings tab, shown faded/disabled with a "Coming Soon" overlay; it will be enabled by the upcoming QML Premium addon.
- Changed: General Settings tab now groups the HTML lang attribute and hreflang fields per language (Primary Language / Secondary Language rows). Option keys unchanged; stored settings are unaffected.
version 2.0.2
- date: September 5, 2026
- Fixed: silenced Plugin Check prefix warnings on the uninstall.php helper variables and the so_qmp filter names (false positives; the sniffer derives its expected prefix from the plugin name).
version 2.0.1
- date: September 5, 2026
- Added: filter-aware accessors for tier limits (so_qmp/tier, so_qmp/max_languages, so_qmp/max_page_mappings) in preparation for the Premium addon.
- Changed: the html lang attribute is now driven by the plugin's page mappings instead of page hierarchy; pages removed from the mapping fall back to the primary language.
- Fixed: unmapped pages no longer output self-referencing hreflang and x-default links.
- Fixed: mapping rows beyond the stored "Number of Pages to Map" are ignored on the frontend and deleted from the database when the count is reduced.
version 2.0.0 major refactor OOP
- date: August 19, 2026
- Note: Major refactor. Minimum WP raised to 6.2. Minimum PHP raised to 8.2. No breaking changes to stored settings; existing
so_qmp_*options are preserved. - New: OOP architecture under the
SOWP\QuickMultilingualnamespace with split class files insrc/. - New: Canonical URL output for mapped pages (
<link rel="canonical">), removing WordPress corerel_canonicalon those pages to prevent duplicate tags. - New: Activation guard deactivates the plugin and shows an admin notice when PHP < 8.2 or WordPress < 6.2.
- Changed: Minimum PHP requirement raised from 7.0 to 8.2.
- Changed: Minimum WP requirement raised from 5.0 to 6.2.
- Changed: Page mapping loop now follows the tier limit (
MAX_PAGE_MAPPINGS = 4) instead of a hardcoded 4, preparing for the Premium tier. - Developer: Lite/Premium roadmap; tier limits centralised in
Config. Settings page markup kept compatible with the existingadmin.js(.nav-tab,.so_qmp-tab-content,#so_qmp_number_of_pages,#page-translations-table,.page-mapping-row).
version 1.5.8
- date: August 19, 2026
- Fixed: HTML lang attribute now correctly switches to the secondary language based on the page hierarchy instead of unreliable URL string matching.
version 1.5.7
- date: August 18, 2026
- Fixed: Escaped all admin option outputs and dropdowns to satisfy PHPCS/PCP checks and prevent unescaped output vulnerabilities.
- Fixed: Added explicit casting with absint() for stored page IDs (for example so_qmp_language_folder_page) to ensure integer values are used where expected.
- Fixed: Added translators comment for the "Page %d" label to clarify the placeholder meaning.
- Changed: Replaced hardcoded script version with SO_QMP_VERSION and bumped asset versioning to improve cache-busting for admin.js and admin.css.
- Fixed: Added a targeted PHPCS ignore for an admin-only exclude usage in wp_dropdown_pages() to address a WordPress VIP performance warning (settings screen; excludes a small, bounded set of pages).
- Changed: Prefixed uninstall.php file-scope variables to follow plugin naming conventions and remove PCP naming warnings.
- Notes: No breaking changes. Behaviour is unchanged; changes are defensive and to satisfy code-quality checks.
- tested up to WP 7.1
v1.5.5
v1.5.4
v1.5.3
1.5.3 - improvements after review by WP Plugins Team
- Change the namespace from
hlh_ toso_qmp_ - Improve sanitisation and escaping throughout the plugin
- Properly enqueue scripts and styles
- Internationalise all user-facing strings, including those in JavaScript
- Update the uninstall.php file for better security and precision
- Ensure proper handling of external links