I’ve been working on a fairly large website with six languages.
The stack is:
- Bricks for theming
- WPML for translations
- WS Form for forms
One recurring issue I ran into was form translation.
WS Form itself works great, but making forms multilingual with WPML turned out to be awkward, especially when you want to keep the translation link between pages intact.
Using different forms per language usually meant:
- breaking the page translation relationship, or
- manually managing form IDs inside WPML’s translation editor
Neither option felt clean or scalable.
The Solution
I wrote a small plugin that allows you to map one “base” WS Form to translated versions, without involving WPML’s translation editor at all.
The idea is simple:
- You always place one base form ID
- The plugin automatically swaps the form ID at runtime based on the current WPML language
How to Use It
Instead of using the Bricks WS Form element, place forms via shortcode.
Replace:
[ws_form id="123"]
With:
[wpml_ws_form id="123"]
That’s it.
If you already used the WS Form shortcode everywhere, you can simply run a search & replace to update all occurrences.
Plugin Options
Base form
Add the form ID that belongs to your default language.
Translations per language
For each base form, you can link a different WS Form ID per language.
Fallback option
Enable this to automatically fall back to the default language form when:
- a translated form doesn’t exist yet, or
- you intentionally don’t want a translated version for a specific language
If no translation is configured, the plugin will safely fall back — nothing breaks.
Why This Works Well
- No WPML String Translation
- No Advanced Translation Editor
- No broken page translation links
- Works perfectly with Bricks
- Scales cleanly across many languages
GitHub
Download link:
Hope this saves you some time and frustration if you’re working with the same stack.
- Odinn, Kinekt.io