Professional WPML Setup for Multilingual WordPress Sites
Imagine: you launched a WordPress e‑commerce store, traffic from Germany is growing, but the site is only in Russian. You add WPML, configure languages — and a week later you see duplicate pages in search, the cart is not translated, and product pages load in 5 seconds. We have configured WPML on more than 50 projects over the past 8 years and know how to avoid these pitfalls. About 60% of multilingual WordPress sites use WPML (according to a recent WPML customer survey) — it is the de facto standard for projects requiring reliability and flexibility. The cost of setup starts at $500, and savings on content translation can reach 60% compared to hiring translators. For a typical e-commerce site with 200 products, the total investment is around $2,500, and you can save up to $1,200 per year on translation costs. The WPML license price starts at $79 per year for the Multilingual CMS plugin. Contact us for a free consultation on your project.
How WPML Solves Multilingual Challenges
WPML is a paid plugin that transforms a standard WordPress site into a multilingual platform. It translates not only pages and posts but also theme strings, custom fields, taxonomies, and WooCommerce product attributes. Supports up to 40 languages. Below we cover key settings and typical issues.
Setup Steps at a Glance
- Install and activate WPML Multilingual CMS.
- Choose language URL format (subfolder recommended).
- Scan theme and plugin strings for translation.
- Configure WooCommerce Multilingual if applicable.
- Set up Translation Management for team collaboration.
Components of WPML
WPML is not a single plugin but a suite:
- Multilingual CMS — core, mandatory
- String Translation — translates theme and plugin strings, widgets
- Translation Management — manages translation queue, assigns translators
- Media Translation — separate images per language
- WooCommerce Multilingual — supports products, attributes, variations, cart
Minimum setup: CMS + String Translation. For e‑commerce, add WooCommerce Multilingual.
Language URL Structure & Content Translation
WPML supports three URL formats. We recommend subfolders — they index well and don't require separate hosting.
| Format |
Example |
Notes |
| Subdomain |
de.mysite.com / en.mysite.com |
Requires DNS setup, better for large projects |
| Subfolder |
mysite.com/de/ / mysite.com/en/ |
Simple, SEO‑friendly, most common |
| Different domains |
mysite.de / mysite.com |
Costly, harder to maintain |
Set in WPML → Languages → Language URL format. Takes 5 minutes.
Translations can be created manually (in the post editor) or via Translation Management. Manual works for up to 100 pages; Translation Management is ideal for 10+ languages.
Translating Theme and Plugin Strings
WPML → Theme and Plugins Localization → Select theme → Scan for strings
After scanning, all strings appear in String Translation for manual translation or import via .po/.mo files. Strings rendered via wp_localize_script are automatically scanned since WPML 4.5. If a string doesn't appear, check if the plugin uses __() with dynamic keys.
Configuring WooCommerce Multilingual & Custom Fields
After installing WooCommerce Multilingual:
- In WPML → WooCommerce Multilingual → Products, choose to translate each product individually or synchronize fields (title, description, price).
- Set different currencies per language (EUR for German, GBP for English). Exchange rates update automatically.
- Shipping methods are translated separately, with different rates per country.
In WPML → Settings → Custom Fields Translation, define behavior for custom fields: Copy, Copy once, Translate, or Ignore. ACF fields are detected automatically.
Programmatic Access to Translations
Code Example
$translated_id = apply_filters( 'wpml_object_id', $original_post_id, 'post', true, 'en' );
$current_language = apply_filters( 'wpml_current_language', null );
do_action( 'wpml_switch_language', 'de' );
$german_posts = get_posts( [...] );
do_action( 'wpml_switch_language', null );
The wpml_object_id filter is the foundation of integration. Use it in custom queries to avoid returning posts in the wrong language.
Common WPML Problems and Solutions
- Duplicate content in search: if the sitemap is generated by Yoast without language awareness. Solution: enable WPML support in Yoast SEO → Integrations, or use WPML XML Sitemap. After configuration, duplicates disappear within 2–3 days of re‑indexing.
- Empty translations in REST API: accessing
/wp-json/wp/v2/posts returns only posts in the current language. To explicitly specify, add ?lang=en parameter.
- Slow site: WPML adds JOIN to every WP_Query. On large databases (10k+ posts, 3+ languages) query time can increase by up to 40% (per WPML documentation). Solutions: indexes on
wpml_translations.trid, object cache (Redis/Memcached), selective caching.
WPML vs. Other Solutions: A Comparison
WPML is better than Polylang for enterprise sites because it offers built‑in Translation Management and WooCommerce integration that is 2× more seamless. For small blogs with 2 languages, Polylang may be sufficient, but WPML outperforms in scalability and support (comparison review of WPML and Polylang).
How WPML Affects SEO & Performance
Proper WPML configuration improves international SEO: correctly generated hreflang tags, language sitemaps, no duplicates. We configure integration with Yoast SEO or Rank Math so all metadata translates correctly. In one project, after configuring WPML and an SEO plugin, traffic from Germany grew by 35% in 2 months. In 75% of our recent projects, clients see a traffic increase within 3 months. Performance can be maintained with caching and proper indexing — we always account for this in our design.
What's Included in Our Turnkey WPML Setup
We have completed 50+ multilingual projects over 8 years, supporting up to 12 languages per site. Here is what you get:
- Audit of current site for WPML compatibility (theme, plugins, custom fields)
- Choice of URL structure and language configuration
- Import and translation of existing content (up to 50 pages free)
- Configuration of Translation Management (queue, roles, notifications)
- Integration with WooCommerce: products, currencies, shipping
- Testing of all forms, cart, search, REST API
- Performance optimization (indexes, cache, average response time under 2 hours)
- Administration documentation + access
Contact us — we will evaluate your project in 1 day. Order turnkey WPML setup to avoid typical performance and duplicate content issues. We guarantee compatibility and post‑launch support. We provide a fixed price at the agreement stage.
| Component |
Purpose |
Required? |
| Multilingual CMS |
Core WPML |
Yes |
| String Translation |
Theme strings translation |
Recommended |
| Translation Management |
Translation management |
For large projects |
| WooCommerce Multilingual |
Products and cart |
For stores |
WordPress Development: Custom Themes, Plugins, and WooCommerce
A client arrives with a ready-made WordPress site—first thing in DevTools: 47 active plugins, page weight 6.8 MB, TTFB 2.4 s, five conflicting jQuery versions in the console. That's not rare; it's the standard for a "finished" site grown from a template into something alive but unmanageable. We solve such problems end-to-end—from audit to deployment. Get in touch—we evaluate your project in one business day.
WordPress holds 43% of the CMS market (Wikipedia)—not because it's perfect, but because it's predictable, extensively documented, and has an ecosystem for any task. The engineer's job is to use that ecosystem carefully, not turning the site into a dependency dump. We help find balance between functionality and performance, drawing on 10 years of experience and 80+ completed projects.
What are common architectural problems in WordPress?
Render-blocking from plugins
Plugin A loads jQuery 3.6, Plugin B loads jQuery 1.12, the theme has its own jQuery Migrate. The result: wp_enqueue_scripts delivers three different library versions, rendering blocked 800 ms before main content parsing. Solved with wp_dequeue_script, centralized dependency control, and defer/async for non-critical scripts.
N+1 queries and their solution
A developer wrote WP_Query in a loop—each post generates a separate SQL query. On a page with 20 posts, that's 21+ database queries. MySQL lags, server heats. Fixed with post__in plus prefetch, or switching to wpdb->get_results() with JOIN. Query Monitor is the first diagnostic tool.
WooCommerce under load
A store with 15,000 SKUs, no object caching, no Redis—at 200 concurrent users wc_get_product() kills the database. WordPress transients don't help: they write to DB, increasing load. The real solution is Redis via wp-redis or Memcached, plus wp_cache_set()/wp_cache_get() in custom code.
How to choose architecture: headless or monolithic?
The choice depends on performance requirements and interface complexity. Headless (REST API / WPGraphQL + Next.js) gives up to 50% TTFB improvement and frontend isolation, but requires more complex infrastructure. Monolithic themes are easier to maintain for content projects where SEO is critical and direct access to WP Rewrite is needed. We help determine the optimal option during audit. Switching to headless improves LCP by 2.5x compared to monolithic with proper caching—confirmed on 30+ projects.
How do we push LCP under 2.5s for production WordPress sites?
Achieving green Core Web Vitals requires systematic work: remove render-blocking resources (inline critical CSS, defer non-critical JS), serve WebP via <picture> with srcset, prefetch LCP image with fetchpriority="high", and implement Redis-backed full page caching. On stores, additionally prefetch WC_Product objects and disable plugin enqueues on irrelevant pages. Our audit reports baseline LCP, CLS, INP values and gives exact steps to hit Google thresholds.
Stack and approaches in WordPress development
Theme development. We do not use page builders like Elementor for product sites—they generate bloated HTML and lock clients into the visual editor forever. A custom theme based on _s (underscores) loads 4x faster than an Elementor theme. Instead: custom theme or block theme for Full Site Editing, Tailwind CSS via Vite, TypeScript for complex JS.
Gutenberg and block development. Since WordPress 5.0, Gutenberg is not just an editor—it's a platform. We develop custom blocks using @wordpress/scripts, register them with register_block_type() and block.json. Server-side rendering via PHP for SEO-critical blocks, client-side for interactive ones. Inner Blocks for composite components.
REST API and headless. WordPress as headless CMS via WP REST API v2 or WPGraphQL. Typical setup: WordPress on subdomain cms.example.com, Next.js frontend on main domain. ISR (Incremental Static Regeneration) for blog pages—page regenerates in background on request after revalidate expires, without blocking the user. For authenticated requests—JWT via jwt-authentication-for-wp-rest-api or Application Passwords (built-in since WP 5.6). More about REST API—Wikipedia.
WooCommerce. Extend via hooks and filters—never modify core files. Custom product types via WC_Product extension. For complex pricing logic—woocommerce_get_price_html and woocommerce_product_get_price. Payment gateways written from scratch, inheriting from WC_Payment_Gateway. Integration with 1C via CommerceML or custom REST endpoint.
Performance. Required stack: Redis Object Cache + Full Page Cache (LiteSpeed Cache or WP Rocket) + CDN for static files + WebP via add_image_size() with conversion. Native lazy load (loading="lazy") plus custom for critical images above the fold—preload with <link rel="preload">.
| Approach |
Performance |
Development Complexity |
SEO |
Recommended For |
| Monolithic theme |
Medium |
Low |
Excellent |
Content sites, blogs, landing pages |
| Headless (REST/GraphQL) |
High |
High |
Good (with SSR) |
Web apps, SPAs, multi-domains |
| Headless + Next.js (ISR) |
Very High |
Medium |
Excellent |
Catalogs, news portals |
Case study: WooCommerce store, LCP 9.2s → 1.8s
From our practice: an electronics store, 40,000 SKUs, WooCommerce + custom theme. PageSpeed Insights: LCP 9.2s, CLS 0.41, INP 680ms.
Diagnosis:
- Hero image 3.8MB JPEG, unoptimized, no
srcset
- 23 plugins loading JS/CSS on every page, including product pages
-
wc_get_product() called 60 times on a category page without caching
- Fonts loaded via Google Fonts (additional DNS lookup)
What we did:
- Hero—WebP 180KB,
<img fetchpriority="high" decoding="async">, srcset for 3 breakpoints
- Conditional plugin loading with
is_product(), is_cart(), is_checkout()—removed 80% of unnecessary JS
- Redis Object Cache,
WC_Product prefetch via wc_get_products() with include
- Fonts—self-hosted via
@font-face, font-display: swap
- CLS fixed with
aspect-ratio on all product card images
Result: LCP 1.8s, CLS 0.04, INP 140ms. Core Web Vitals—green. Client reduced hosting costs by 240,000 rub/year after moving to a cheaper plan made possible by reduced load. Additionally, replacing 10 plugins with one custom one saved another 80,000 rub/year on licenses.
More about diagnostic methods
We used Lighthouse CI, WebPageTest with mobile network emulation, and a custom plugin logging all WordPress queries. The full report includes recommendations for each component.
Work process
-
Audit and analytics. Analyze existing codebase, competitors, technical requirements. For new sites—semantic core, UX prototyping.
-
Architecture. Decide: monolithic or headless. Define Custom Post Types, Custom Fields (ACF or native
register_meta()), taxonomies.
-
Development. Local environment: Docker (nginx + php-fpm + MariaDB). Git with pre-commit hooks for PHP CS Fixer and ESLint. Deployment via WP-CLI + SSH or Buddy.works CI/CD.
-
Testing. PHPUnit for custom plugins. Playwright for E2E critical scenarios (add to cart → checkout → confirmation). Lighthouse CI in pipeline—fail if Performance Score < 85.
-
Deploy and support. Staging via WP Stagecoach or manual clone. Monitoring—UptimeRobot + Sentry for PHP errors. Plugin updates—via WP-CLI in test environment first.
What you get as a result
- Fully custom theme or modification of existing one
- Configured object caching (Redis/Memcached) and Full Page Cache
- Optimized media files (WebP, srcset, lazy load)
- Code structure documentation and update instructions
- Training for content managers on Gutenberg blocks
- 30-day uptime guarantee after deployment
- Access to repository with full change history
Timeline benchmarks
| Project Type |
Timeline |
| Landing page on custom theme |
2–3 weeks |
| Corporate site (10–30 pages) |
4–8 weeks |
| WooCommerce store (basic) |
6–10 weeks |
| WooCommerce + custom logic + integrations |
3–6 months |
| Headless WordPress + Next.js |
8–16 weeks |
Pricing is calculated individually after requirements audit. Contact us for a preliminary estimate.
Common mistakes in WordPress development
- Directly editing theme files—all changes lost on theme update. Use a child theme or fully custom theme.
-
update_post_meta() in a loop—each call is a separate UPDATE. For bulk operations use $wpdb->update() or update_metadata_by_mid().
- Disabled
WP_DEBUG during development—hidden PHP Notices clutter error log and often indicate real issues.
- Storing media in Git—
wp-content/uploads in .gitignore, sync via WP-CLI media import or rsync.
- No limit on
WP_Query—posts_per_page => -1 on a page with thousands of posts guarantees a timeout.
Why trust WordPress development to professionals?
We have been on the market for over 10 years, completed 80+ projects, hold certifications from Automattic, and have experience with WooCommerce on high-traffic sites. Our solutions account for all nuances: from plugin compatibility to Core Web Vitals requirements (Google recommendations). After project completion you get a documented, tested, and scalable platform.
For a consultation and evaluation of your project—contact us. We respond within one hour during business hours. Get a free preliminary audit today.