Released on:
WPML 4.9.3 brings a wide range of fixes and improvements — from site migration and string translation to performance, admin usability, and editor compatibility.
Features
- New filter hook for developers to return translated user meta values
WPML now intercepts calls toget_user_meta()and returns the translated value for the current language. This is useful when displaying user profile fields (e.g. job title, bio) on multilingual sites. To enable this behaviour, add the following to your theme or plugin:add_filter( 'wpml_translate_get_user_meta', '__return_true' ); - New filter hook to globally disable all WPML email notifications
WPML sends automatic emails from several internal components (translation job assignments, overdue job reports, batch summaries, etc.). Previously there was no official way to suppress them — developers had to rely on workarounds inspecting the call stack. This new hook provides a single, supported way to disable all WPML emails at once:add_filter( 'wpml_send_email_notification', '__return_false' );Or selectively, based on email type and recipient:
add_filter( 'wpml_send_email_notification', function( $send, $email_type, $recipient ) { if ( $email_type === 'overdue_jobs_report' ) { return false; } return $send; }, 10, 3 );This is particularly useful on staging or development environments where you want to prevent emails from reaching real users.
Improvements
Migration and Setup
- Safer and More Reliable Migration Process
WPML now makes it safer and easier to move or copy a site from one domain to another. If something goes wrong during the migration, the wizard stays visible so users can retry, with clearer messages, better logging, and guidance on where to find the migration code. WPML also automatically fixes misconfigured alias domains, removes the unsafe “Move” option, and improves performance for sites using the Classic Translation Editor. - Added a new option to reset the WPML Setup Wizard when it gets into a corrupted state.
- WPML now notifies the translation service when a site key is unregistered.
Performance
- Reduced redundant language filtering calls on sites with many ACF fields for better performance.
- Removed outdated WP Super Cache integration code that was no longer needed.
Admin and User Experience
- Unlocked WPML settings are now visually indicated in the admin interface.
- String Translation dashboard filters now show labels and default to Frontend strings.
- Clarified how Media Translation settings affect images and featured images.
- The notification about jobs that cannot be finished now links directly to the Translation Dashboard.
Fixes
- Some posts containing Base64-encoded data were not being sent for translation
In a previous release, we started blocking some posts because they contained Base64-encoded data, to prevent issues during the translation process. However, this also blocked some posts that could actually be translated, or where the Base64 content could simply be ignored. We’ve updated how WPML handles Base64-encoded content — posts that can be safely translated are no longer blocked. A more precise validation approach is planned for an upcoming release. - Fixed an issue with WPML blocks causing the Gutenberg editor to use an outdated rendering mode.
- Fixed an issue with Payments & Maintenance tab failing to load on sites with WordPress installed in a subdirectory.
- Fixed a PHP warning triggered when search queries contained array parameters.
- Fixed an issue with Full Site Editing category templates not applying to translated pages.
- Fixed an issue with translator assignment failing after a database restore or site migration.
- Fixed an issue with active subscriptions incorrectly shown as expired on the last day of the billing cycle.
- Fixed an issue with String Translation failing to load translation files due to domain name casing conflicts.
- Performance improvements when the Classic Translation Editor is selected.
- Fixed an issue with memory exhaustion errors on sites where user accounts had accented characters in their username.
- Fixed an issue with minimal custom field values being lost during the translation process.
- Fixed an issue with page preview slowness or timeouts on resource-limited servers when WPML is active.
- Fixed an issue with REST API requests using non-pretty URLs being incorrectly redirected.
- Fixed an issue with CSS changes in the WPML development project not being compiled correctly.
- Fixed a privacy policy link showing the original language page title instead of the translated one.
- Fixed an issue with the alias domain notice showing the same URL twice during site migrations.
- Fixed internal links using Cyrillic or non-Latin characters not being translated correctly.
- Fixed an issue with category and taxonomy terms not triggering the re-translation process correctly.
- Fixed an issue with browser language redirect not working correctly when a root page is set.
- Fixed an issue with the Classic Translation Editor causing PHP warnings and translation status loss on reload.
- Fixed an issue that was allowing posts to be accessed via the wrong category URL.
- Fixed an issue where String Translation file scanning was causing database corruption on large sites.
- Fixed an issue with the translation feedback button displaying incorrectly on Arabic (RTL) pages.
- Fixed a menu synchronization performance issue causing slowness or crashes on large multilingual sites.
- Fixed an issue with the Automatic Translation Payment & Maintenance tab failing to load on some sites.
- Fixed an issue with the development site banner failing the WCAG accessibility contrast requirements.
- Fixed an issue with internal links using www vs. non-www variants not being automatically translated.
- Fixed an issue with several WPML interface strings not being translated due to incorrect domain assignments.
- Fixed an issue with translated Elementor templates not displaying correctly on the frontend.
- Fixed an issue with Media Translation causing images to appear duplicated in the Media Library.
- Fixed an issue with the Save button remaining disabled when clearing translation context fields.
- Fixed an issue with website UUID mismatches causing translation service connectivity problems.
- Fixed WCAG accessibility issues with the legacy language switcher and SSO iframe.
- Fixed an issue with translator search causing heavy database load and CPU spikes.
- Fixed the word count calculation for translation jobs failing on Nginx/Kubernetes environments.
- Fixed a PHP 8.3 compatibility issue causing the Translation Dashboard to freeze.
- Fixed an issue with alias domain setting not being automatically removed when a domain mismatch is detected.
- Fixed a vulnerability in a WPML JavaScript file reported by SonarQube.
- Fixed an issue with class name causing issue in analytics code that could cause failures on Linux servers.
Download and Update
You can get this release directly to the WordPress admin or download and install manually. To receive automatic updates, you need to register WPML on your site. Then, visit the Plugins or Updates admin pages. To download manually, visit your wpml.org account and go to Downloads. Follow the installation and upgrade instructions for complete details.
When you update WPML, be sure to update together all the components that you are using. Don’t use a mixture of new and older versions.
Feedback? Need Help?
We love feedback. To make a suggestion, ask a question or give an idea, leave your comment here. If you need technical support and help troubleshooting problems, please use our technical support forum.