{"id":374629,"date":"2026-09-25T04:43:18","date_gmt":"2026-09-25T04:43:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/workmore-site-translator\/"},"modified":"2026-09-25T11:07:13","modified_gmt":"2026-09-25T11:07:13","slug":"workmore-site-translator","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/workmore-site-translator\/","author":23560158,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.2","stable_tag":"1.1.2","tested":"7.1.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"WorkMore Site Translator","header_author":"Connext System","header_description":"Translate your site into any number of languages, each under its own URL prefix (\/th\/, \/ja\/): every translation is its own post or page, with per-language menus, a language switcher and hreflang tags.","assets_banners_color":"9cc5c2","last_updated":"2026-09-25 11:07:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/workmore.connextsystem.com\/site-translator","header_author_uri":"https:\/\/workmore.connextsystem.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":57,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"connextsystem","date":"2026-09-25 04:42:51","revision":3712365},"1.1.2":{"tag":"1.1.2","author":"connextsystem","date":"2026-09-25 11:07:13","revision":3712921}},"upgrade_notice":{"1.1.2":"<p>The settings screen follows your profile language throughout.<\/p>","1.1.1":"<p>The language dropdown in the block editor&#039;s sidebar fits its box again.<\/p>","1.1.0":"<p>Add as many languages as you need, and translate custom post types and taxonomies.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3712365,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712365,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3712365,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3712365,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3712365,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.1","1.1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3712365,"resolution":"1","location":"assets","locale":"","width":2880,"height":1800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3712365,"resolution":"2","location":"assets","locale":"","width":2880,"height":1800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3712365,"resolution":"3","location":"assets","locale":"","width":2880,"height":1800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3712365,"resolution":"4","location":"assets","locale":"","width":2880,"height":1800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3712365,"resolution":"5","location":"assets","locale":"","width":2880,"height":2500},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3712365,"resolution":"6","location":"assets","locale":"","width":2880,"height":2500},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3712365,"resolution":"7","location":"assets","locale":"","width":2880,"height":1800}},"screenshots":{"1":"The Pages list with the Languages column: each page's language, its translations and \"+\" to create one.","2":"The Language box in the block editor: the language of the content and links to its translations.","3":"A translated page under its own URL, with the language switcher in the menu and in the content.","4":"Appearance \u2192 Menus \u2192 Manage Locations: a twin of every menu location for each language.","5":"Settings: any number of languages with their URLs and language packs, and the content types to translate.","6":"Settings: site title and tagline per language, and the language switcher with a live preview.","7":"hreflang and canonical tags on a translated page, and a sitemap per language in robots.txt."}},"plugin_section":[],"plugin_tags":[6370,2993,22323,99,2333],"plugin_category":[48],"plugin_contributors":[281388],"plugin_business_model":[],"class_list":["post-374629","plugin","type-plugin","status-publish","hentry","plugin_tags-bilingual","plugin_tags-hreflang","plugin_tags-language-switcher","plugin_tags-multilingual","plugin_tags-translation","plugin_category-language-tools","plugin_contributors-connextsystem","plugin_committers-connextsystem"],"banners":{"banner":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/banner-772x250.png?rev=3712365","banner_2x":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/banner-1544x500.png?rev=3712365","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/icon.svg?rev=3712365","icon":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/icon.svg?rev=3712365","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/screenshot-1.png?rev=3712365","caption":"The Pages list with the Languages column: each page's language, its translations and \"+\" to create one."},{"src":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/screenshot-2.png?rev=3712365","caption":"The Language box in the block editor: the language of the content and links to its translations."},{"src":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/screenshot-3.png?rev=3712365","caption":"A translated page under its own URL, with the language switcher in the menu and in the content."},{"src":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/screenshot-4.png?rev=3712365","caption":"Appearance \u2192 Menus \u2192 Manage Locations: a twin of every menu location for each language."},{"src":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/screenshot-5.png?rev=3712365","caption":"Settings: any number of languages with their URLs and language packs, and the content types to translate."},{"src":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/screenshot-6.png?rev=3712365","caption":"Settings: site title and tagline per language, and the language switcher with a live preview."},{"src":"https:\/\/ps.w.org\/workmore-site-translator\/assets\/screenshot-7.png?rev=3712365","caption":"hreflang and canonical tags on a translated page, and a sitemap per language in robots.txt."}],"raw_content":"<!--section=description-->\n<p>WorkMore Site Translator makes a WordPress site multilingual the way WordPress works best: every translation is a real post or page. Your existing content stays exactly as it is and is served at the root of your site; every other language \u2014 as many as you need \u2014 lives under its own prefix (for example <code>\/th\/<\/code> or <code>\/ja\/<\/code>), and translations are written in whatever editor you already use \u2014 the block editor, Elementor, Flatsome's UX Builder or any other \u2014 because a translation is simply another post.<\/p>\n\n<p><strong>Translate by copying<\/strong><\/p>\n\n<ul>\n<li>Posts and pages, and any custom post type you tick in the settings (portfolios, Elementor templates, Flatsome UX Blocks\u2026), show a Languages column in their lists. One click creates a draft copy in another language \u2014 content, excerpt, featured image, template, parent, builder data and custom fields included \u2014 and opens it for translation.<\/li>\n<li>Categories, tags and custom taxonomies are translated the same way, and a copied post is filed under the translated terms automatically (created on the fly when missing).<\/li>\n<li>Translations are linked, so the switcher, the hreflang tags and the admin bar always know where the other languages live.<\/li>\n<\/ul>\n\n<p><strong>Clean URLs, correct SEO<\/strong><\/p>\n\n<ul>\n<li>Sub-directory URLs (<code>example.com\/<\/code>, <code>example.com\/th\/<\/code>, <code>example.com\/ja\/<\/code>\u2026) that search engines index separately, one URL per post; a post opened under the wrong prefix is redirected to its own.<\/li>\n<li><code>hreflang<\/code> alternates and <code>x-default<\/code> on every translated page, self-referencing canonical URLs, per-language sitemaps advertised in robots.txt \u2014 with WordPress' built-in sitemap, Yoast SEO and Rank Math.<\/li>\n<li>Visitors on <code>\/th\/<\/code> only see Thai content: archives, search, feeds, category lists, page lists, previous\/next links and sticky posts are all scoped to the language. The front page and the posts page map to their translations.<\/li>\n<\/ul>\n\n<p><strong>Menus, switcher, site title<\/strong><\/p>\n\n<ul>\n<li>Every menu location of your theme gets a twin per language under Appearance \u2192 Menus \u2192 Manage Locations. Assign a menu built in that language and the theme shows it on translated pages \u2014 no theme changes.<\/li>\n<li>A language switcher in four styles \u2014 inline links, list, pills or dropdown, with an optional accent color and a live preview in the settings \u2014 as a menu item, a widget, the <code>[wmst_switcher]<\/code> shortcode or the <code>wmst_language_switcher()<\/code> template tag. It links to the translation of the current content and loads no JavaScript.<\/li>\n<li>The site title and tagline can be set per language.<\/li>\n<\/ul>\n\n<p><strong>Language packs do the interface<\/strong><\/p>\n\n<p>On translated pages WordPress loads the language's own packs, so core, your theme and your plugins show their interface text (buttons, dates, form labels) in that language automatically. A one-click installer for the pack lives in the settings.<\/p>\n\n<p><strong>Light<\/strong><\/p>\n\n<ul>\n<li>Language is a normal, indexed term relationship; lists are filtered by one clause. No output buffering, no HTML parsing, no cookies.<\/li>\n<li>No JavaScript and no stylesheet files on the frontend. Pages that show a language switcher get its CSS (1\u20133 KB) inline, through WordPress' own style API.<\/li>\n<\/ul>\n\n<p><strong>Source code<\/strong><\/p>\n\n<p>The plugin's JavaScript ships minified for performance; the human-readable source is included in the plugin's <code>src\/<\/code> directory together with the build configuration (<code>vite.config.js<\/code>).<\/p>\n\n<p><strong>Pro add-on<\/strong><\/p>\n\n<p>Everything above is free and complete, whatever the number of languages or content types. A separate Pro plugin, sold on <a href=\"https:\/\/workmore.connextsystem.com\/site-translator\">workmore.connextsystem.com<\/a>, adds a WooCommerce integration: products, variations, categories and attributes, synced price and stock, shop, cart, checkout and account pages per language, cart and order language, customer emails in the customer's language. Inside this plugin the add-on is only mentioned on the \"Upgrade to Pro\" settings tab; nothing here is locked or limited.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20translate%20a%20page%3F\"><h3>How do I translate a page?<\/h3><\/dt>\n<dd><p>Open Pages, find the page and click the \"+\" in its Languages column. A draft copy opens in your editor; translate it and publish. The two pages are linked from then on.<\/p><\/dd>\n<dt id=\"how%20many%20languages%20can%20i%20add%3F\"><h3>How many languages can I add?<\/h3><\/dt>\n<dd><p>As many as you need. Settings \u2192 Site Translator lists them; each one gets its own URL prefix, its own menu locations, its own site title and tagline, and a place in the language switcher.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20custom%20post%20types%20and%20taxonomies%3F\"><h3>Can I translate custom post types and taxonomies?<\/h3><\/dt>\n<dd><p>Yes. The Content card under Settings \u2192 Site Translator lists every post type and taxonomy that has an admin screen; tick the ones that should carry a language. Unticked content is shown in every language as it is.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%2C%20flatsome%20and%20other%20page%20builders%3F\"><h3>Does it work with Elementor, Flatsome and other page builders?<\/h3><\/dt>\n<dd><p>Yes. A translation is a copy of the page including the builder's data, so it opens in Elementor, Flatsome's UX Builder or any other builder exactly like the original \u2014 you translate the texts in place.<\/p><\/dd>\n<dt id=\"what%20about%20my%20existing%20content%3F\"><h3>What about my existing content?<\/h3><\/dt>\n<dd><p>Everything that exists when you activate the plugin is in your default language and keeps its URL. Nothing is copied or changed until you create a translation.<\/p><\/dd>\n<dt id=\"which%20language%20should%20be%20the%20default%3F\"><h3>Which language should be the default?<\/h3><\/dt>\n<dd><p>The language most of your content is written in. Visitors get that language at your plain URLs and every other language under its prefix (<code>\/th\/<\/code>, <code>\/en\/<\/code>, \u2026). The default language also decides which core, theme and plugin translations the visitor side loads \u2014 independently of Settings \u2192 General \u2192 Site Language, which keeps governing the dashboard. If you already have content in several languages, pick the biggest one as the default and mark the rest in the Language box or with Tools \u2192 Assign.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20language%20switcher%3F\"><h3>How do I add the language switcher?<\/h3><\/dt>\n<dd><p>Three ways, all set up under Settings \u2192 Site Translator, where you pick the style (inline links, list, pills or a dropdown), the label (native name, English name or code) and an optional accent color, and see a live preview: as a menu item (Appearance \u2192 Menus \u2192 \"Language switcher\"), as a widget, or with the <code>[wmst_switcher]<\/code> shortcode \/ <code>wmst_language_switcher()<\/code> template tag anywhere in your content, builder or theme. No JavaScript is loaded; the switcher takes the color of the text around it, so it fits light and dark headers alike, and <code>color=\"\u2026\"<\/code> \/ <code>bg=\"\u2026\"<\/code> on the shortcode (or a few CSS variables, listed in the settings) recolor it.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20menus%3F\"><h3>Can I translate menus?<\/h3><\/dt>\n<dd><p>Yes. Build a menu in another language and assign it to that language's twin of a location under Appearance \u2192 Menus \u2192 Manage Locations. A language switcher can be added to any menu as well.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Your posts, pages and other content translate as usual on a WooCommerce site. Products themselves are not offered for translation: copying a product takes more than copying a post (variations, SKU, stock). That is what the separately sold Pro add-on does \u2014 translated products, variations, categories and attributes, synced price and stock, shop\/cart\/checkout\/account pages per language, cart and order language, customer emails.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20slow%20my%20site%20down%3F\"><h3>Does the plugin slow my site down?<\/h3><\/dt>\n<dd><p>No. A language is an ordinary term on each post; lists are filtered by one indexed clause, translations are read from the object cache, and the only frontend output besides the hreflang tags is the switcher's small inline CSS on pages that show a switcher.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20connect%20to%20any%20external%20service%3F\"><h3>Does the plugin connect to any external service?<\/h3><\/dt>\n<dd><p>No. The plugin makes no network requests of its own. The optional \"Install language pack\" button on the settings screen uses WordPress' own language-pack installer, which downloads from WordPress.org exactly as Settings \u2192 General does. The only outbound link is the \"Upgrade to Pro\" button, which opens our website when you click it.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Deactivating never deletes anything. Uninstalling removes language assignments, translation links and settings only if you opted in to \"Delete language data and settings when the plugin is uninstalled\". Translated posts and pages are ordinary content and are never deleted.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fix: the settings screen asks WordPress for answers in your own profile language, so the labels it loads (the site title fields, language-pack messages) match the rest of the screen when your language differs from the site's.<\/li>\n<li>Fix: requests the admin screens make to the REST API keep your profile language from the very start, so text translated early in the request (a widget's name) no longer falls back to the site language.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fix: the language dropdown in the block editor's sidebar no longer runs past the edge of its box.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Any number of languages: add, remove and order them on the settings screen.<\/li>\n<li>Any post type and taxonomy with an admin screen can be made translatable on the settings screen.<\/li>\n<li>Translations come from translate.wordpress.org; the plugin no longer bundles its own.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: a second language under a sub-directory prefix; translations as linked copies of posts, pages, categories and tags; language-scoped lists, front page and posts page mapping, one-URL-per-post redirects; per-language menu locations, language switcher (menu item, widget, shortcode, template tag), site title\/tagline per language; hreflang, canonical and per-language sitemaps; language-pack installer; opt-in clean uninstall.<\/li>\n<\/ul>","raw_excerpt":"Translate your site into any number of languages: each translation is its own post or page under its own URL, with menus, a switcher and hreflang.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/374629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=374629"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/connextsystem"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=374629"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=374629"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=374629"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=374629"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=374629"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=374629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}