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 |
|---|---|---|---|---|---|---|---|---|
| #951 | Before After Image Comparison Slider for WPBakery Page Builder | 35 | 58 | 59 | 1k+ | Output is not escaped | ||
| #952 | Lord of the Files: Enhanced Upload Security | 35 | 62 | 42 | 1k+ | Non-prefixed global variable | ||
| #953 | Business Hours Indicator | 35 | 139 | 106 | 8k+ | Alternative PHP tag found | ||
| #954 | Central Connect | 35 | 5 | 21 | 400 | Nonce verification recommended | ||
| #955 | CF7 Submissions – Securely Store Contact Form 7 Data and Attachments, Reply to the Sender and more | 35 | 16 | 119 | 2k+ | Non-prefixed global variable | ||
| #956 | Payment Gateway Based Fees and Discounts for WooCommerce | 35 | 259 | 111 | 30k+ | Text Domain Mismatch | ||
| #957 | CiviCRM Admin Utilities | 35 | 19 | 87 | 1k+ | Non-prefixed hook name | ||
| #958 | CiviCRM Profile Sync | 35 | 31 | 140 | 500 | Non-prefixed global variable | ||
| #959 | CM E-Mail Blacklist – Simple email filtering for safer registration | 35 | 269 | 205 | 800 | Output is not escaped | ||
| #960 | Cookie Information – Cookie Banner with Consent Mode v2 | 35 | 185 | 28 | 2k+ | Output is not escaped | ||
| #961 | Currency per Product for WooCommerce | 35 | 46 | 24 | 2k+ | Text Domain Mismatch | ||
| #962 | Currency Switcher for WooCommerce | 35 | 166 | 61 | 800 | Text Domain Mismatch | ||
| #963 | Custom Order Numbers for WooCommerce | 35 | 6 | 32 | 20k+ | Non-prefixed hook name | ||
| #964 | Custom Order Status for WooCommerce | 35 | 41 | 55 | 10k+ | Non-prefixed hook name | ||
| #965 | Customize My Account Page | 35 | 4 | 10 | 1k+ | Dynamic hook name | ||
| #966 | DarkLooks – Dark Mode Switcher For WordPress | 35 | 195 | 21 | 900 | Text Domain Mismatch | ||
| #967 | Deposits & Partial Payments for WooCommerce | 35 | 172 | 144 | 5k+ | Text Domain Mismatch | ||
| #968 | Nexi Checkout | 35 | 45 | 308 | 3k+ | Dynamic hook name | ||
| #969 | Dintero Checkout for WooCommerce Payment Methods | 35 | 58 | 48 | 600 | Text Domain Mismatch | ||
| #970 | PiWeb Disable payment method / Partial payment for WooCommerce | 35 | 55 | 221 | 4k+ | Non-prefixed class | ||
| #971 | Duplica – Duplicate Posts, Pages, Custom Posts or Users | 35 | 14 | 31 | 2k+ | Non-prefixed global variable | ||
| #972 | Easy Panorama | 35 | 120 | 10 | 500 | Non Singular String Literal Domain | ||
| #973 | Easy Post Types and Fields | 35 | 138 | 135 | 1k+ | Text Domain Mismatch | ||
| #974 | Easy SwipeBox | 35 | 157 | 10 | 2k+ | Non Singular String Literal Domain | ||
| #975 | Elementor Website Builder – more than just a page builder | 35 | 46 | 428 | 10m+ | Non-prefixed global variable | ||
| #976 | Elements Hive for Breakdance | 35 | 76 | 25 | 1k+ | Output is not escaped | ||
| #977 | EWWW Image Optimizer | 35 | 225 | 729 | 1m+ | Direct Query | ||
| #978 | Export Featured Images | 35 | 176 | 67 | 1k+ | Output is not escaped | ||
| #979 | Extendify | 35 | 117 | 168 | 500k+ | Non-prefixed global variable | ||
| #980 | Reviews Widgets for Google, TripAdvisor, Yelp & Recommendations | 35 | 255 | 225 | 10k+ | Output is not escaped | ||
| #981 | Force Reinstall | 35 | 118 | 34 | 2k+ | Output is not escaped | ||
| #982 | Frontend Reset Password | 35 | 83 | 128 | 10k+ | Text Domain Mismatch | ||
| #983 | GDPR Compliance & Cookie Consent | 35 | 251 | 61 | 4k+ | Output is not escaped | ||
| #984 | Give – Divi Donation Modules | 35 | 286 | 12 | 600 | Text Domain Mismatch | ||
| #985 | Glossary | 35 | 169 | 93 | 2k+ | Non Singular String Literal Domain | ||
| #986 | HookMeUp for WooCommerce | 35 | 59 | 29 | 10k+ | Output is not escaped | ||
| #987 | Inspiro Starter Sites – 20+ Free Demo Templates for Gutenberg & Elementor | 35 | 6 | 200 | 10k+ | Non-prefixed global variable | ||
| #988 | Kustom Checkout for WooCommerce | 35 | 101 | 505 | 10k+ | Dynamic hook name | ||
| #989 | Lead Call Buttons | 35 | 113 | 81 | 6k+ | Output is not escaped | ||
| #990 | Topic Progression Using Storyline/Captivate for LearnDash | 35 | 382 | 25 | 400 | Text Domain Mismatch | ||
| #991 | Less PHP Compiler | 35 | 163 | 47 | 3k+ | Exception output is not escaped | ||
| #992 | More Widgets | 35 | 55 | 15 | 1k+ | Output is not escaped | ||
| #993 | mosparo Integration | 35 | 114 | 301 | 900 | Missing nonce verification | ||
| #994 | Image Refresh | 35 | 4 | 6 | 1k+ | Dynamic hook name | ||
| #995 | One Page Express Companion | 35 | 132 | 65 | 10k+ | Output is not escaped | ||
| #996 | Order Delivery Date for WooCommerce | 35 | 2,060 | 73 | 10k+ | wp function not compatible with requires wp | ||
| #997 | Paybox WooCommerce Payment Gateway | 35 | 165 | 88 | 500 | Non Singular String Literal Domain | ||
| #998 | Posts Table with Search & Sort | 35 | 143 | 33 | 3k+ | Text Domain Mismatch | ||
| #999 | PowerPack Addons for Elementor (Free Widgets, Extensions and Templates) | 35 | 6 | 56 | 80k+ | Post Not In exclude | ||
| #1000 | Presto Player | 35 | 37 | 77 | 100k+ | Missing Arg Domain |