WordPress.WP.I18n.SingleUnderscoreGetTextFunction
Single Underscore Get Text Function
A translation or text-domain pattern does not match WordPress internationalization expectations.
Why It Shows Up
Plugin Check found missing text domains, mismatched domains, missing translator comments, variable-only strings, placeholder issues, or deprecated translation loading patterns.
Why It Matters
Translation issues make the plugin harder to localize and can break strings for non-English WordPress users.
How to Fix
- Use the plugin slug as the text domain unless the plugin intentionally declares a different one.
- Keep translatable strings literal and move variables into placeholders.
- Add translator comments before strings with placeholders or ambiguous context.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Added | Updated | Top Issue |
|---|---|---|---|---|---|---|---|---|
| #1 | Leaflet Maps Marker (Google Maps, OpenStreetMap, Bing Maps) | 19 | 3,275 | 3,228 | 9k+ | Output is not escaped | ||
| #2 | Smart Forms – when you need more than just a contact form | 21 | 776 | 574 | 5k+ | Output is not escaped | ||
| #3 | WebTotem Security | 21 | 1,110 | 213 | 900 | Text Domain Mismatch | ||
| #4 | Events Maker by dFactory | 22 | 588 | 819 | 1k+ | Output is not escaped | ||
| #5 | File Manager Pro – Filester | 22 | 566 | 391 | 100k+ | Request data is not unslashed | ||
| #6 | PDF Builder for WPForms | 22 | 321 | 266 | 900 | SQL query is not prepared | ||
| #7 | Fastcache by Host.it | 23 | 1,327 | 207 | 900 | Text Domain Mismatch | ||
| #8 | Security Plugin, Firewall & Malware Scanner with Auto Removal | 23 | 1,204 | 789 | 40k+ | Output is not escaped | ||
| #9 | Church Admin | 24 | 1,556 | 4,200 | 900 | Direct Query | ||
| #10 | Dynamic Widgets | 24 | 631 | 812 | 10k+ | Non-prefixed global variable | ||
| #11 | Widget Detector for Elementor | 24 | 1,057 | 1,567 | 1k+ | Non-prefixed global variable | ||
| #12 | WPSpeed – WordPress Speed, Cache & Performance Optimization (Core Web Vitals, PageSpeed 100) | 24 | 482 | 189 | 2k+ | Output is not escaped | ||
| #13 | AIO Forms – Craft Complex Forms Easily | 25 | 189 | 419 | 700 | Mixed line endings | ||
| #14 | PDF Importer for WPForms | 25 | 332 | 329 | 400 | Non-prefixed global variable | ||
| #15 | Codeless Page Builder | 31 | 415 | 258 | 900 | Text Domain Mismatch | ||
| #16 | Download Plugin | 31 | 78 | 102 | 60k+ | Output is not escaped | ||
| #17 | WP Visitor Statistics (Real Time Traffic) | 31 | 353 | 691 | 20k+ | Nonce verification recommended | ||
| #18 | Inactive User Deleter | 33 | 453 | 170 | 800 | Output is not escaped | ||
| #19 | Offen | 33 | 313 | 115 | 500 | Output is not escaped | ||
| #20 | Textmetrics | 33 | 324 | 163 | 400 | Output is not escaped | ||
| #21 | Video Gallery – YouTube Playlist, Channel Gallery by YotuWP | 33 | 278 | 101 | 20k+ | Missing Arg Domain | ||
| #22 | Cornerstone | 34 | 161 | 174 | 30k+ | Nonce verification recommended | ||
| #23 | Swiftype Site Search Plugin for WordPress | 34 | 250 | 50 | 400 | Output is not escaped | ||
| #24 | Woopra Analytics Plugin | 34 | 114 | 53 | 900 | Output is not escaped | ||
| #25 | Embed Plus for YouTube Gallery, Livestream and Lazy Loading with Facades | 34 | 571 | 195 | 100k+ | Output is not escaped | ||
| #26 | NextGEN Custom Fields | 36 | 215 | 131 | 1k+ | SQL query is not prepared | ||
| #27 | Open Graphite | 38 | 380 | 204 | 3k+ | Unsafe printing function | ||
| #28 | Logo Slider , Logo Carousel , Logo showcase , Client Logo | 38 | 72 | 22 | 1k+ | Output is not escaped | ||
| #29 | WP Mobile Redirect | 40 | 44 | 20 | 400 | Text Domain Mismatch | ||
| #30 | Owl Carousel WP | 40 | 62 | 19 | 1k+ | Output is not escaped | ||
| #31 | Custom Dashboard Help Widget | 44 | 73 | 12 | 800 | Output is not escaped | ||
| #32 | Analytics Head | 54 | 34 | 7 | 600 | Output is not escaped | ||
| #33 | Media File Sizes | 72 | 14 | 5 | 1k+ | Output is not escaped |