WordPress.WP.I18n.MissingSingularPlaceholder
Missing Singular Placeholder
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 |
|---|---|---|---|---|---|---|---|---|
| #51 | Sliced Invoices – WordPress Invoice Plugin | 26 | 684 | 455 | 5k+ | Output is not escaped | ||
| #52 | Subscriber by BestWebSoft | 26 | 550 | 376 | 900 | Text Domain Mismatch | ||
| #53 | BackUpWordPress | 27 | 245 | 271 | 90k+ | Non-prefixed global variable | ||
| #54 | Events Calendar for GeoDirectory | 27 | 1,262 | 462 | 2k+ | Text Domain Mismatch | ||
| #55 | ImageRecycle pdf & image compression | 27 | 329 | 204 | 1k+ | Text Domain Mismatch | ||
| #56 | Memberful – Membership Plugin | 27 | 351 | 336 | 1k+ | Text Domain Mismatch | ||
| #57 | WPComplete | 29 | 383 | 333 | 1k+ | Output is not escaped | ||
| #58 | Novelist | 30 | 475 | 158 | 1k+ | Output is not escaped | ||
| #59 | User Avatar – Reloaded | 30 | 352 | 171 | 900 | Text Domain Mismatch | ||
| #60 | UX Flat | 30 | 539 | 203 | 1k+ | Missing Arg Domain | ||
| #61 | Compliance by Hu-manity.co | 31 | 153 | 335 | 900k+ | Missing nonce verification | ||
| #62 | Blacklist Manager – WooCommerce Anti-Fraud, Blacklist & Checkout Verification | 31 | 284 | 830 | 2k+ | Missing nonce verification | ||
| #63 | ACME Divi Modules | 32 | 573 | 35 | 400 | Text Domain Mismatch | ||
| #64 | BP Classic | 32 | 664 | 216 | 6k+ | Unsafe printing function | ||
| #65 | DHL eCommerce (Benelux) for WooCommerce | 32 | 222 | 330 | 2k+ | Nonce verification recommended | ||
| #66 | TS Poll – Survey, Versus Poll, Image Poll, Video Poll | 32 | 570 | 171 | 4k+ | Text Domain Mismatch | ||
| #67 | Volunteer Sign Up Sheets | 32 | 967 | 401 | 1k+ | Output is not escaped | ||
| #68 | Unbounce Landing Pages | 32 | 169 | 86 | 10k+ | Output is not escaped | ||
| #69 | MAS Companies For WP Job Manager | 33 | 62 | 308 | 1k+ | Non-prefixed hook name | ||
| #70 | CartBounty – Save and recover abandoned carts for WooCommerce | 33 | 370 | 399 | 10k+ | Output is not escaped | ||
| #71 | WOW Slider | 33 | 176 | 101 | 3k+ | Output is not escaped | ||
| #72 | Media Vault | 34 | 115 | 150 | 800 | Output is not escaped | ||
| #73 | One User Avatar | User Profile Picture | 34 | 68 | 190 | 100k+ | Non-prefixed global variable | ||
| #74 | Donation Platform for WooCommerce: Fundraising & Donation Management | 34 | 331 | 448 | 7k+ | Non-prefixed global variable | ||
| #75 | WP-Cron Status Checker | 34 | 277 | 111 | 5k+ | Text Domain Mismatch | ||
| #76 | WP Mail Logging | 34 | 76 | 258 | 300k+ | Nonce verification recommended | ||
| #77 | Theme Blvd Layout Builder | 35 | 207 | 169 | 2k+ | Output is not escaped | ||
| #78 | Wired Impact Volunteer Management | 35 | 253 | 175 | 1k+ | Output is not escaped | ||
| #79 | Subresource Integrity (SRI) Manager | 35 | 26 | 94 | 900 | Request data is not unslashed | ||
| #80 | Image Watermark | 36 | 76 | 179 | 40k+ | Missing nonce verification | ||
| #81 | Video Thumbnails Reloaded | 36 | 343 | 58 | 2k+ | Text Domain Mismatch | ||
| #82 | Easy Photo Album | 37 | 360 | 43 | 1k+ | Text Domain Mismatch | ||
| #83 | Tracking Script Manager | 37 | 82 | 57 | 2k+ | Non Singular String Literal Domain | ||
| #84 | WP Discord Post Plus – Supports Unlimited Channels | 38 | 116 | 34 | 700 | Text Domain Mismatch | ||
| #85 | WP Media Categories | 38 | 40 | 103 | 800 | Nonce verification recommended | ||
| #86 | Image Watermark WP | 39 | 88 | 82 | 600 | Output is not escaped | ||
| #87 | Tabify Edit Screen | 39 | 83 | 27 | 500 | Output is not escaped | ||
| #88 | turboSMTP | 40 | 114 | 112 | 400 | Unsafe printing function | ||
| #89 | Mobile Contact Bar | 41 | 94 | 36 | 10k+ | Unsafe printing function | ||
| #90 | SEO Backlink Monitor | 42 | 86 | 105 | 700 | Output is not escaped | ||
| #91 | Simple Revisions Delete | 43 | 16 | 26 | 10k+ | Output is not escaped | ||
| #92 | WP Revisions Manager | 45 | 47 | 19 | 700 | Non Singular String Literal Domain | ||
| #93 | Taxonomy Switcher | 47 | 23 | 36 | 2k+ | Nonce verification recommended | ||
| #94 | Simple User Listing | 50 | 27 | 56 | 900 | Non-prefixed global variable | ||
| #95 | Quick Bulk Post & Page Creator | 55 | 43 | 1 | 2k+ | Text Domain Mismatch | ||
| #96 | Quick Bulk Term Taxonomy Creator | 55 | 37 | 2 | 400 | Text Domain Mismatch | ||
| #97 | Webhook for Discord | 71 | 119 | 20 | 400 | Text Domain Mismatch | ||
| #98 | Panda Video | 80 | 29 | 17 | 3k+ | Non-prefixed global variable | ||
| #99 | Easy Booking – WooCommerce Booking & Reservation Plugin | 82 | 59 | 66 | 4k+ | Non-prefixed global variable | ||
| #100 | Expire Passwords | 92 | 7 | 2 | 500 | Missing Translators Comment |