This thread is resolved. Here is a description of the problem and solution.
Problem: The client is experiencing issues with custom widgets turning into 'Missing widget' entries after saving a page in SiteOrigin Page Builder, following updates to WPML v4.8.4 and String Translation v3.4.1. Additionally, there is a 404 error on the pagination of a custom post type archive, which temporarily resolves upon re-saving the ACF custom post type but reappears later.
Solution: We have determined that the issue with the widgets is not directly caused by WPML or String Translation, but rather by how the custom widgets are loaded and registered. Ensure that all custom widgets are registered using the standard
widgets_init
action and confirm that widget IDs and class names exactly match those saved in SiteOrigin. Also, check for PHP 8.3 compatibility as the plugin might use outdated code.
For the 'Missing widget' issue, disabling the 'Automatically detect best options for translating image texts' setting under WPML → Settings → Media Translation might resolve the issue. This is because WPML's media duplication process could be stripping necessary backslashes from the widget's data when saved in a secondary language. If problems persist, it's recommended to use
wp_slash()
when saving data to ensure backslashes are preserved.
If these solutions do not resolve the issues or if new problems arise, we recommend opening a new support ticket. Additionally, it's advisable to check related known issues at https://wpml.org/known-issues/, verify the version of the permanent fix, and confirm that you have installed the latest versions of themes and plugins. For further assistance, please visit our support forum at WPML Support Forum.
This is the technical support forum for WPML - the multilingual WordPress plugin.
Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.
Background of the issue:
I am experiencing an issue with SiteOrigin Page Builder and custom widgets after updating to the latest versions of WPML v4.8.4 and String Translation v3.4.1. After updating, our custom widgets, defined in a separate plugin developed by a third party, are transformed into 'Missing widget' entries after saving a page in the SiteOrigin Page Builder editor. Examples of affected widgets include: MTTSteioriginWidgetsWidgetsMTTCoverMTTCover and MTTSteioriginWidgetsWidgetsMTTTextImageNumbersMTTTextImageNumbers. The widgets appear correctly before saving, but once the page is saved, they are replaced by 'Missing widget'. See image at hidden link. Additionally, we are seeing a 404 error on the pagination of a custom post type archive: hidden link. The custom post type is registered via ACF (Advanced Custom Fields). Interestingly, if we re-save the ACF custom post type, the pagination starts working again, but after some time, the 404 error reappears without any other changes. Link to a page where the issue can be seen: hidden link
Symptoms:
Custom widgets are transformed into 'Missing widget' entries after saving a page in SiteOrigin Page Builder. A 404 error occurs on the pagination of a custom post type archive.
Questions:
Is this a known compatibility issue between WPML 4.8.4 / String Translation 3.4.1 and SiteOrigin Page Builder or custom widgets loaded via plugins?
Could WPML affect pagination or rewrite rules for ACF-based custom post type archives?
As I can tell, the issue isn’t directly caused by WPML or String Translation, but by how the custom Morning Train SiteOrigin widgets are loaded.If you disable debug.log you will see some notification / message like:
[31-Oct-2025 12:08:20 UTC] PHP Notice: Function WP_Block_Type_Registry::register was called incorrectly. Block type names must contain a namespace prefix. Example: my-plugin/my-custom-block-type Please see Debugging in WordPress for more information. (This message was added in version 5.0.0.) in /var/www/www.odensehavn.dk/test_environments/www/wp-test-002/wp-includes/functions.php on line 6121
[31-Oct-2025 12:08:22 UTC] PHP Deprecated: Use of "static" in callables is deprecated in /var/www/www.odensehavn.dk/test_environments/www/wp-test-002/wp-content/plugins/mtt-siteorigin-widgets/lib/tools/class.autoloader.php on line 112
Since the same happens even when String Translation is off, it means the problem is in how the widgets are registered — not in WPML itself.
Make sure all custom widgets are registered using the standard widgets_init action and not later.
Widget names – confirm the widget IDs and class names exactly match the ones saved in SiteOrigin.
PHP 8.3 compatibility – the Morning Train plugin uses an old autoloader that may fail on PHP 8.3. It should be updated.
Please have the Morning Train developers check the widget registration and code.
Let us know how it goes and if there is anything else we can do to help.
Thank you for getting back to me. I will look into the issue. And what about my question reguarding the 404 error on pagination?
Additionally, we are seeing a 404 error on the pagination of a custom post type archive: hidden link. The custom post type is registered via ACF (Advanced Custom Fields). Interestingly, if we re-save the ACF custom post type, the pagination starts working again, but after some time, the 404 error reappears without any other changes. Link to a page where the issue can be seen: hidden link
Could WPML affect pagination or rewrite rules for ACF-based custom post type archives?
Regarding the second issue, it’s difficult to say for sure. Since it occurs in the default language, I recommend testing on a staging site with WPML disabled to confirm whether it’s related to WPML. Although it’s unlikely because it affects the default language, there’s still a small chance it could be a bug.
If the problem persists, the next step would be to test without any custom code, plugins, or themes — as customizations could be causing the issue.
If it turns out the issue is related to WPML and happens only when WPML is active, please open a new ticket and we’ll be happy to investigate further.
I’ve tested again and fixed the PHP deprecated warning:
[31-Oct-2025 12:08:22 UTC] PHP Deprecated: Use of "static" in callables is deprecated in /wp-content/plugins/mtt-siteorigin-widgets/lib/tools/class.autoloader.php on line 112
However, this has not solved the issue with the widget being renamed and turning into “Missing Widget”.
I would also like to clarify that I don’t fully agree with the conclusion that the issue occurs even when WPML and String Translation are disabled.
From my testing, the widget only gets renamed when WPML (and String Translation) are active.
If I create a new widget and save the page while WPML and String Translation are both deactivated, the widget class name remains correct — it is not renamed.
I do agree that once a widget has already been renamed and saved as “Missing”, it will remain missing even after deactivating WPML. But the renaming itself only happens while WPML is active.
I think I may not have explained it clearly enough — the issue also occurs when the WPML String Translation plugin is disabled, with only the main WPML plugin active. I did not mean otherwise.
I’ve shared your case with our second-tier support team to review and advise further.
I am trying to reproduce the issue on clean test site, but I have trouble installing additional plugin to download your custom plugins, seems there is some error when searching for plugins to install via your website. You might want to check as it is breaking AJAX function, I tried some other way but no luck.
To speed things up can you please go to next test site: hidden link
and install your custom plugin / theme and lets check if same issue happens there as well. Please do not add any additional content or plugins that are not needed for this issue.
But the theme throws an cretical error because the plugins was not activated before the theme. And i dont think i can activate the plugins with the critical error.
I’ve tried uploading both the plugins and the theme, but I keep running into an issue: the theme expects certain elements to be activated within the SiteOrigin Widgets Bundle, while these can only be registered and activated once the theme itself is active. Because of that dependency loop, I’m unable to get it running properly on your environment.
However, I’ve set up a staging site with a minimal configuration that should allow you to debug the problem. I can also provide FTP access if needed.
You can use the same login credentials as previously shared, but access it via the following URL:
🔗 hidden link
Please note that the error has shifted from the Danish language layer to the English one — it no longer appears on the Danish version, only on the English site on hidden link.
I’ve created the Demo page on both the Danish and English versions. On the English layer, you can add the widgets without any issue, but as soon as the page is saved, those widgets turn into missing widgets — whereas on the Danish layer, this does not happen.