Add stunning image hover effects to WordPress. 500+ CSS3 animations, 10 effect modules. Native Elementor widget, Gutenberg block & WPBakery widget.
Category Scores
Top Issues by Category
maintainability808
security33
performance2
Issues Details
845 issues found in latest scan
Namespaces declared by a theme/plugin should start with the theme/plugin prefix. Found: "OXI_IMAGE_HOVER_PLUGINS\Classes".
Direct database call without caching detected. Consider using wp_cache_get() / wp_cache_set() or wp_cache_delete().
In footer ($in_footer) is not set explicitly wp_enqueue_script; It is recommended to load scripts in the footer. Please set this value to `true` to load it in the footer, or explicitly `false` if it should be loaded in the header.
Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "image-hover-effects-ultimate/before_init".
All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '$button_css'.
Global constants defined by a theme/plugin should start with the theme/plugin prefix. Found: "OXI_IMAGE_HOVER_BASENAME".
Processing form data without nonce verification.
Unescaped parameter $table used in $wpdb->get_results()\n$table assigned unsafely at line 170.
Use placeholders and $wpdb->prepare(); found interpolated variable $table_import at "INSERT INTO $table_import (name, type) VALUES\n
Detected usage of tax_query, possible slow query.
Detected usage of a non-sanitized input variable: $_GET['page']
$_GET['page'] not unslashed before sanitization. Use wp_unslash() or similar
Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://wpvip.com/documentation/performance-improvements-by-removing-usage-of-post__not_in/ for more information.
Scripts must be registered/enqueued via wp_enqueue_script()
Stylesheets must be registered/enqueued via wp_enqueue_style()
The $text parameter must be a single text string literal. Found: $this->oxi_style_name_format($this->dbdata['style_name'])
Plugin name "Image Hover Effects Ultimate ( Image Gallery, Effects, Lightbox, Comparison & Magnifier )" is different from the name declared in plugin header "Image Hover Effects Ultimate".
The "/vendor" directory using composer exists, but "composer.json" file is missing.
PHP file should prevent direct access. Add a check like: if ( ! defined( 'ABSPATH' ) ) exit;
| Code | Type | Message | Count |
|---|---|---|---|
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedNamespaceFound | WARNING | Namespaces declared by a theme/plugin should start with the theme/plugin prefix. Found: "OXI_IMAGE_HOVER_PLUGINS\Classes". | 337 |
| WordPress.DB.DirectDatabaseQuery.DirectQuery | WARNING | Use of a direct database call is discouraged. | 197 |
| WordPress.DB.DirectDatabaseQuery.NoCaching | WARNING | Direct database call without caching detected. Consider using wp_cache_get() / wp_cache_set() or wp_cache_delete(). | 197 |
| WordPress.WP.EnqueuedResourceParameters.NotInFooter | WARNING | In footer ($in_footer) is not set explicitly wp_enqueue_script; It is recommended to load scripts in the footer. Please set this value to `true` to load it in the footer, or explicitly `false` if it should be loaded in the header. | 41 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound | WARNING | Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "image-hover-effects-ultimate/before_init". | 23 |
| WordPress.Security.EscapeOutput.OutputNotEscaped | ERROR | All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '$button_css'. | 15 |
| WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound | WARNING | Global constants defined by a theme/plugin should start with the theme/plugin prefix. Found: "OXI_IMAGE_HOVER_BASENAME". | 6 |
| WordPress.Security.NonceVerification.Recommended | WARNING | Processing form data without nonce verification. | 6 |
| PluginCheck.Security.DirectDB.UnescapedDBParameter | WARNING | Unescaped parameter $table used in $wpdb->get_results()\n$table assigned unsafely at line 170. | 4 |
| WordPress.DB.PreparedSQL.InterpolatedNotPrepared | WARNING | Use placeholders and $wpdb->prepare(); found interpolated variable $table_import at "INSERT INTO $table_import (name, type) VALUES\n | 4 |
| WordPress.DB.SlowDBQuery.slow_db_query_tax_query | WARNING | Detected usage of tax_query, possible slow query. | 2 |
| WordPress.Security.ValidatedSanitizedInput.InputNotSanitized | WARNING | Detected usage of a non-sanitized input variable: $_GET['page'] | 2 |
| WordPress.Security.ValidatedSanitizedInput.MissingUnslash | WARNING | $_GET['page'] not unslashed before sanitization. Use wp_unslash() or similar | 2 |
| WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in | WARNING | Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://wpvip.com/documentation/performance-improvements-by-removing-usage-of-post__not_in/ for more information. | 2 |
| WordPress.WP.EnqueuedResources.NonEnqueuedScript | ERROR | Scripts must be registered/enqueued via wp_enqueue_script() | 1 |
| WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet | ERROR | Stylesheets must be registered/enqueued via wp_enqueue_style() | 1 |
| WordPress.WP.I18n.MissingArgDomain | ERROR | Missing $domain parameter in function call to esc_html_e(). | 1 |
| WordPress.WP.I18n.NonSingularStringLiteralText | ERROR | The $text parameter must be a single text string literal. Found: $this->oxi_style_name_format($this->dbdata['style_name']) | 1 |
| mismatched_plugin_name | WARNING | Plugin name "Image Hover Effects Ultimate ( Image Gallery, Effects, Lightbox, Comparison & Magnifier )" is different from the name declared in plugin header "Image Hover Effects Ultimate". | 1 |
| missing_composer_json_file | WARNING | The "/vendor" directory using composer exists, but "composer.json" file is missing. | 1 |
| missing_direct_file_access_protection | ERROR | PHP file should prevent direct access. Add a check like: if ( ! defined( 'ABSPATH' ) ) exit; | 1 |
Latest Snapshot
Findings
845
Errors
20
Warnings
825
Score History
First score snapshot
First scan completed Jun 20, 2026
v9.11.6 · Plugin Check 2.0.0 · Model 2026.06-mvp-static-v2
Jun 20, 2026
v9.11.6
29
Latest
- Findings
- 845
- Errors
- 20
- Warnings
- 825
- Plugin Check
- 2.0.0
- Model
- 2026.06-mvp-static-v2
| Scan | Score | Findings | Errors | Warnings | Plugin | Plugin Check | Model |
|---|---|---|---|---|---|---|---|
| Jun 20, 2026Latest | 29 | 845 | 20 | 825 | v9.11.6 | 2.0.0 | 2026.06-mvp-static-v2 |