WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound
Dynamic hook name
The plugin invokes a hook name built from a variable or expression that Plugin Check cannot verify as plugin-prefixed.
Why It Shows Up
Plugin Check found a dynamic hook name such as a variable, array value, or concatenated expression. Static analysis cannot prove the final hook name starts with the plugin's namespace.
Why It Matters
Dynamic hook names can be valid, but unclear naming makes collisions and unexpected integrations harder to reason about across WordPress, themes, and other plugins.
How to Fix
- Prefer a literal hook name with the plugin prefix when the hook is part of the plugin's public API.
- If the hook must be dynamic, keep a fixed plugin-prefixed base before the variable portion.
- Document public dynamic hooks so integrators know the expected final hook names.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Added | Updated | Top Issue |
|---|---|---|---|---|---|---|---|---|
| #1151 | Hostinger Reach – AI-Powered Email Marketing for WordPress | 40 | 9 | 46 | 1m+ | Direct Query | ||
| #1152 | JSM Show Order Metadata for WooCommerce HPOS | 40 | 17 | 64 | 700 | Nonce verification recommended | ||
| #1153 | JSM Show Post Metadata | 40 | 15 | 66 | 10k+ | Nonce verification recommended | ||
| #1154 | JSM Show Term Metadata | 40 | 14 | 64 | 900 | Nonce verification recommended | ||
| #1155 | JSM Show User Metadata | 40 | 14 | 64 | 3k+ | Nonce verification recommended | ||
| #1156 | Give – Paystack Gateway | 40 | 96 | 10 | 1k+ | Text Domain Mismatch | ||
| #1157 | Requirements Checklist | 40 | 200 | 22 | 900 | Output is not escaped | ||
| #1158 | Responsive Plus – Elementor Templates & Starter Sites | 40 | 46 | 305 | 10k+ | Non-prefixed global variable | ||
| #1159 | LazyLoad Plugin – Lazy Load Images, Videos, and Iframes | 40 | 31 | 17 | 100k+ | Output is not escaped | ||
| #1160 | ST Demo Importer | 40 | 27 | 75 | 700 | Missing nonce verification | ||
| #1161 | Timed Content | 40 | 76 | 63 | 5k+ | Unsafe printing function | ||
| #1162 | Widget Builder | 40 | 40 | 52 | 500 | Non-prefixed global variable | ||
| #1163 | NP Quote Request for WooCommerce | 40 | 91 | 145 | 9k+ | Non-prefixed global variable | ||
| #1164 | AffiliateWP – Affiliate Product Rates | 41 | 84 | 24 | 2k+ | Output is not escaped | ||
| #1165 | Schema – All In One Schema Rich Snippets | 41 | 598 | 180 | 30k+ | Text Domain Mismatch | ||
| #1166 | BuddyPress Xprofile Custom Field Types | 41 | 39 | 189 | 4k+ | Missing nonce verification | ||
| #1167 | BuddyPress Edit Activity | 41 | 28 | 26 | 800 | Output is not escaped | ||
| #1168 | Social Sharing Plugin – Kiwi | 41 | 23 | 80 | 4k+ | Non-prefixed global variable | ||
| #1169 | Ally – Web Accessibility & Usability | 41 | 47 | 35 | 500k+ | Output is not escaped | ||
| #1170 | Simple Revision Control | 41 | 34 | 43 | 1k+ | Dynamic hook name | ||
| #1171 | Admin Options Pages | 42 | 3 | 284 | 500 | Nonce verification recommended | ||
| #1172 | Post Grid Master — Post Grids & AJAX Filters | 42 | 44 | 115 | 1k+ | Non-prefixed global variable | ||
| #1173 | Cronjob Scheduler | 42 | 20 | 36 | 1k+ | Input is not sanitized | ||
| #1174 | Custom Admin Page by BestWebSoft – Configurable WordPress Dashboard Pages Plugin | 42 | 472 | 181 | 400 | Text Domain Mismatch | ||
| #1175 | Custom Login | 42 | 36 | 116 | 10k+ | Non-prefixed global variable | ||
| #1176 | LH Page Links To | 42 | 25 | 38 | 500 | Output is not escaped | ||
| #1177 | Product Price History for WooCommerce | 42 | 101 | 800 | Nonce verification recommended | |||
| #1178 | Vast Demo Import | 42 | 180 | 113 | 600 | Text Domain Mismatch | ||
| #1179 | Dynamic Remarketing for Google Ads and WooCommerce | 42 | 32 | 15 | 2k+ | Output is not escaped | ||
| #1180 | WP Before After Image Slider – Interactive Image and Video Comparison Plugin for WordPress | 42 | 112 | 17 | 1k+ | Text Domain Mismatch | ||
| #1181 | Eventin – Event Calendar, Event Registration, Tickets & Booking (AI Powered) | 42 | 2,583 | 1,823 | 10k+ | Text Domain Mismatch | ||
| #1182 | WP Widget Clipboard – Duplicate widgets intuitively | 42 | 51 | 19 | 800 | Output is not escaped | ||
| #1183 | AMP | 43 | 63 | 362 | 400k+ | Non-prefixed hook name | ||
| #1184 | Checkout Upsell Funnel for WooCommerce | 44 | 6 | 244 | 600 | Non-prefixed global variable | ||
| #1185 | Simple Image Widget | 44 | 26 | 19 | 10k+ | Unsafe printing function | ||
| #1186 | Contact Details | 45 | 43 | 29 | 1k+ | Non Singular String Literal Text | ||
| #1187 | Jetpack Search | 45 | 925 | 426 | 5k+ | Text Domain Mismatch | ||
| #1188 | Passwords Evolved | 45 | 26 | 17 | 1k+ | Output is not escaped | ||
| #1189 | WP OpenAPI | 45 | 26 | 22 | 400 | Output is not escaped | ||
| #1190 | Easy Subscribe | 46 | 132 | 700 | Direct Query | |||
| #1191 | Podcast Player – Your Podcasting Companion | 46 | 14 | 133 | 10k+ | Non-prefixed global variable | ||
| #1192 | Simple Sitemap – Create a Responsive HTML Sitemap | 46 | 33 | 48 | 60k+ | Non-prefixed hook name | ||
| #1193 | Updater by BestWebSoft | 46 | 494 | 219 | 2k+ | Text Domain Mismatch | ||
| #1194 | AffiliateWP Checkout Referrals | 47 | 48 | 26 | 600 | Output is not escaped | ||
| #1195 | Real Media Library: Media Library Folder & File Manager | 47 | 1 | 365 | 100k+ | Direct Query | ||
| #1196 | Better Usability for WooCommerce | 47 | 27 | 87 | 800 | Non-prefixed hook name | ||
| #1197 | iControlWP | 47 | 45 | 59 | 1k+ | Missing direct file access protection | ||
| #1198 | AffiliateWP – Store Credit | 48 | 47 | 21 | 400 | Output is not escaped | ||
| #1199 | Jetpack Social | 48 | 829 | 254 | 30k+ | Text Domain Mismatch | ||
| #1200 | Schedule Post Changes With PublishPress Future: Unpublish, Delete, Change Status, Trash, Change Categories | 48 | 63 | 273 | 100k+ | Non-prefixed global variable |