WP Multilang


WP Multilang is a multilingual plugin for WordPress.

Translations of post types, taxonomies, meta fields, options, text fields in miltimedia files, menus, titles and text fields in widgets.

Features of the plugin WP Multilang

  • 100% free.
  • Translation at PHP.
  • Compatible with REST.
  • Support configuration for translate multidimensional arrays in options, meta fields, post content.
  • Support multisite.
  • Support WordPress in sub-folder.
  • Separate menu items, posts, terms, widgets, comments per language.
  • Many filters for dynamic applying translation settings.
  • No duplicate posts, terms, menus, widgets.
  • No sub-domain for each language version.
  • No additional tables in database.
  • Possibility set many languages with one localization. For example, for localization in the region.
  • Possibility to set custom locale for html(If installed locale is en_US, you can set locale like: en, en-UK, en-AU etc. Without installation another localization)
  • Possibility for add new languages for any user with capability manage_options.
  • Exist the role “Translator” for editing posts, terms. It can not publish or delete.
  • No limits by languages or by possibilities.

WP Multilang compatible with plugins

  • ACF, ACF Pro
  • WooCommerce
  • WooCommerce Customizer
  • Gutenberg
  • Yoast Seo
  • Contact Form 7 (added mail tag [_language] for send user language in mail)
  • WPBakery Visual Composer
  • Page Builder by SiteOrigin
  • NextGEN Gallery
  • All in One SEO Pack
  • MailChimp for WordPress
  • Newsletter
  • Maps Builder
  • Max Mega Menu
  • MasterSlider
  • WP-PageNavi
  • BuddyPress
  • Meta Slider
  • TablePress
  • Download Monitor (Redefine templates for links in your theme and translate link texts)
  • Better Search

Manage translation settings via json.

Add in the root of your theme or plugin file wpm-config.json.

Sample configurations can be viewed in config files in folder ‘configs’ in root the plugin.

Configuration is updated after switching theme, enable or update any plugins.

The plugin has filters for dynamic application configuration for translate.

For turn off translation, set null into the desired configuration.
For example, you must turn off translation for a post type post.
There are two ways:

  1. In json.
    Create in root of a theme or a plugin file wpm-config.json with:

           "post_types": {
             "post": null
  2. Through the filter.
    Add in functions.php

    add_filter ( 'wpm_post_post_config', '__return_null');

To enable translation pass an empty array in php array() or empty object in json {}.
Supports translation multidimensional array of options, meta fields and post_content.

Supports the removal of established localizations.

Supports translation via GET parameter. Add in the GET parameter lang code desired language.

Supports clean database of translations when removing the plugin. Translations are only removed from the built-in tables.

Supports import term translations from qTranslate(by Soft79).

Ideal for developers.

For display language switcher in any place add the code to your template

if ( function_exists ( 'wpm_language_switcher' ) ) wpm_language_switcher ();

Function accepts two parameters:
$type – ‘list’, ‘dropdown’, ‘select’. Default – ‘list’.
$show – ‘flag’, ‘name’, ‘both’. Default – ‘both’.

Available features for translation:

wpm_translate_url ($url, $language = ''); - translate url
wpm_translate_string ($string, $language = ''); - translate multilingual string
wpm_translate_value ($value, $language = ''); - translate multidimensional array with multilingual strings

Supports automatically redirect to the user’s browser language, if he visits for the first time.

Update translation occurs at PHP. Therefore plugin has high adaptability, compatibility and easily integrates with other plugins. This is what distinguishes it among similar.

Available translation html tags by JS for strings what do not have WP filters before output.

Add your tags in config:

"admin_html_tags": {
    "admin_screen_id": {
      "attribute": [

admin_screen_id – admin screen id.
attribute – attribute what need to translate. Available ‘text’ – for translate text node, ‘value’ – for translate form values. Or other tag attribute, like ‘title’, ‘alt’.
selector – css selector for search needed tag. Each selector is a new array item.

For set translation uses the syntax:

[:en]Donec vitae orci sed dolor[:de]Cras risus ipsum faucibus ut[:]

Supports translating from syntax qTranslate, qTranslate-X, WPGlobus etc.

Compatible with REST-API.
Supports transfer the required translation through option lang in the GET request to REST.
Has the ability to keep recording the target language through the transmission parameter lang in the request.

Migration from qTranslate-X

  1. Before installing/uninstalling, make database backup.
  2. Deactivate qTranslate-X.
  3. Install and activate WP Multilang.
  4. Create in root of your theme file ‘wpm-config.json’.
  5. Add all needed post types, taxonomies, options, fields to ‘wpm-config.json’. Setting from qTranslate-X not importing.
  6. Import term names from qTranslate.
  7. Check that everything is okay.
  8. If everything is okay, remove qTranslate-X. If not, make screenshots of errors, restore database from backup and add support issue with your screenshots and description of errors.


Do not support different slug for each language(Yet).

Not compatible with:
– WP Maintenance

Known issues

Function ‘get_page_by_title’ not working, because in title field are stored titles for all languages. Use function ‘wpm_get_page_by_title( $title )’ as solution.


  • Settings page
  • Post list page
  • Taxonomy list page
  • Taxonomy edit page
  • Post edit page


  1. Upload the plugin files to the /wp-content/plugins/wp-multilang directory, or install the plugin through the WordPress plugins screen directly.
  2. Activate the plugin through the ‘Plugins’ screen in WordPress.
  3. Adjust languages on WP Multilang Settings page.


Installation Instructions
  1. Upload the plugin files to the /wp-content/plugins/wp-multilang directory, or install the plugin through the WordPress plugins screen directly.
  2. Activate the plugin through the ‘Plugins’ screen in WordPress.
  3. Adjust languages on WP Multilang Settings page.
I saved post and translation for language by default is disappeared.

For saving post which do not translated never before, you need save post on default language. And only then on different language.

I add new translation, but it rewrite another translation on different language.

If you have opened several browser tabs for editing this post in different languages, translation will be saved for the language that you opened last.


It Works Great!!!

I was looking for a new plugin instead of qtranslate-x to set a new website in 3 languages with woocommerce cart. Besides that it’s free this plugin does correctly what you expect. Easy to use, the UI it’s similar to qtranslate and after some tests I succeeded in setting my site.
The support was quick and our exchange was useful to set some bugs, so latest version is faster and works fine out of the box.
I found it a bit difficult when I need to translate some fields not included in the plugin scheme but maybe because I’m not a developer.
I wish the developer will find an easier way to translate additional field of plugin.
Thanks for your great job!! Go on this way, other plugin even paid or premium are not the value of this one.


Nice job

Plugin works well and has high potential. Developer definitely knows his job.
With best regards 🙂

Read all 16 reviews

Contributors & Developers

“WP Multilang” is open source software. The following people have contributed to this plugin.


“WP Multilang” has been translated into 5 locales. Thank you to the translators for their contributions.

Translate “WP Multilang” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • fixed filters priority on removing in ACF integration


  • added WC setting ‘woocommerce_bacs_accounts’ in translate config
  • added support region languages
  • fixed set new translate notice
  • fixed translate ACF groups
  • fixed MegaMenu compatibility
  • fixed product duplication in WC
  • fixed get_term for taxonomy hierarchy query
  • fixed check for translate posts
  • fixed Gutenberg compatibility


  • added types for language switcher in menu
  • removed current language link from language switcher(for SEO)
  • fixed ACF integration
  • added check for merge new value in translating value
  • fix css rules for .wrap (tnx @Soft79)


  • fix Siteorigin integration
  • add filters in add, update and get functions for meta fields


  • fix deleting


  • add language tag indicator
  • add separating comments per language
  • fix many redirect on home page when using ssl and lang param in url
  • fix updating errors


  • change syntax for more accurate search in database
  • fix support Gutenberg
  • fix translating post and term fields fields
  • fix translating html widget
  • fix add new taxonomy


  • fix save widget translation
  • fix translate url filter name
  • fix check insert new term


  • fix save settings for titles in Yoast SEO and AIOSP
  • add filter for getting original url
  • add filter for current url
  • fix acf notices
  • add Bulgarian localization
  • fix save language option in widgets for WP 5
  • fix translation settings in Better Search
  • add filter for untranslated text
  • fix error echo lang code for some languages in ‘esc_attr_e()’
  • add function for getting page by title ‘wpm_get_page_by_title($title)’
  • fix installing notices
  • fix updating notices
  • fix message when deleting localization


  • change parameters for functions ‘wpm_language_switcher’, ‘wpm_get_language_switcher’
  • add settings api
  • add possibility for set default language for all
  • add error for adding taxonomy in exist name for current language
  • disable integration with Gutenberg. Gutenberg very unstable.
  • fix uninstalling
  • fix translate url for site in subfolder(thanks for mwillberg)
  • fix integration with SiteOrigin (thanks for soft79)
  • fix cache for language switcher widget(thanks for soft79)
  • fix adding languages to menu


  • add flag selector autocomplete
  • add setting for set Yoast SEO Opengraph locale
  • add support WooCommerce attributes
  • add compatibility with WooCommerce Customizer
  • add compatibility with Better Search
  • add import taxonomies from qTranslate(Thanks for Soft79)
  • fix add $_GET ‘lang’ param
  • Other fixes and improvements


  • fix separate posts per language


  • fix set ‘lang’ GET param for home page
  • fix redirect when exist GET ‘lang’ param
  • translate url


  • remake logic for set language and translation
  • add possibility fo set custom locale
  • add possibility for set many languages for one localization
  • set new design for language settings
  • add option for redirect to browser language in first time
  • add option for use prefix for default language
  • add option for deleting unused language packs
  • admin localization use only installed languages
  • add user role Translator
  • Move WP Multilang settings to separate page
  • add config for Download Monitor
  • add config for new widgets in Page Builder by SiteOrigin
  • add filters for customizing language settings
  • add Background Updater
  • fix separate posts per languages
  • fix save title settings in Yoast SEO
  • fix switch user language in admin dashboard

All changelog available on GitHub.