WordPress.DB.DirectDatabaseQuery.NoCaching
No Caching
The plugin runs a direct database query instead of using a higher-level WordPress API or cache-aware pattern.
Why It Shows Up
Plugin Check found `$wpdb` access that queries the database directly, changes schema, or bypasses normal caching expectations.
Why It Matters
Direct queries can be correct, but they are easier to make unsafe, slower at scale, and harder for WordPress to cache or filter.
How to Fix
- Use WordPress APIs such as post, term, metadata, option, or user functions when they fit the task.
- If direct SQL is necessary, prepare dynamic values and add a clear caching strategy for repeated reads.
- Keep schema changes in activation or upgrade routines and make them idempotent.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Added | Updated | Top Issue |
|---|---|---|---|---|---|---|---|---|
| #3101 | Reusable Gutenberg Blocks Widget | 68 | 24 | 9 | 500 | Output is not escaped | ||
| #3102 | Russian Post and EMS for WooCommerce | 68 | 16 | 47 | 1k+ | Non-prefixed global variable | ||
| #3103 | Shiptastic Integration for DHL | 68 | 54 | 36 | 10k+ | Missing Translators Comment | ||
| #3104 | Thank You Page for WooCommerce | 68 | 6 | 27 | 10k+ | Non-prefixed global variable | ||
| #3105 | WiserReview Product Reviews for WooCommerce | 68 | 21 | 110 | 900 | Non-prefixed global variable | ||
| #3106 | Ever Accounting – Accounting & Invoicing Solution for Small Businesses | 68 | 69 | 661 | 1k+ | Non-prefixed hook name | ||
| #3107 | WP Sanitize Accented Uploads | 68 | 15 | 16 | 800 | Quoted Simple Placeholder | ||
| #3108 | AdOpt | Easy Multi-Regulations Cookie Banner. | 69 | 22 | 27 | 7k+ | Missing direct file access protection | ||
| #3109 | Auto Update Post Date | 69 | 11 | 23 | 1k+ | Input is not validated | ||
| #3110 | Bulk menu creator | 69 | 27 | 4 | 1k+ | Text Domain Mismatch | ||
| #3111 | Burst Statistics – Simple WordPress Analytics (Google Analytics Alternative) | 69 | 33 | 379 | 200k+ | Direct Query | ||
| #3112 | CDN Enabler | 69 | 14 | 7 | 10k+ | Output is not escaped | ||
| #3113 | Contact Form 7 | 69 | 56 | 39 | 10m+ | Missing direct file access protection | ||
| #3114 | CryptX | 69 | 11 | 30 | 10k+ | Missing nonce verification | ||
| #3115 | DOKU Payment | 69 | 53 | 46 | 400 | wp function not compatible with requires wp | ||
| #3116 | GZSEO | 69 | 3 | 66 | 400 | Direct Query | ||
| #3117 | PDF.js Viewer | 69 | 14 | 38 | 20k+ | Non-prefixed global variable | ||
| #3118 | Scroll Down Arrow | 69 | 30 | 30 | 800 | Missing Arg Domain | ||
| #3119 | Search by SKU for Woocommerce | 69 | 13 | 10 | 10k+ | Direct Query | ||
| #3120 | Easy Username Updater | 69 | 19 | 28 | 10k+ | Missing Arg Domain | ||
| #3121 | Export WordPress Menus | 69 | 94 | 22 | 1k+ | wp function not compatible with requires wp | ||
| #3122 | AppScenic – Smart AI Dropshipping | 70 | 16 | 41 | 3k+ | Dynamic hook name | ||
| #3123 | FAZ Cookie Manager | 70 | 315 | 600 | Non-prefixed hook name | |||
| #3124 | Portfolio Post Type | 70 | 7 | 11 | 50k+ | Nonce verification recommended | ||
| #3125 | Search and Replace | 70 | 7 | 9 | 10k+ | Input is not sanitized | ||
| #3126 | Simple Login Captcha | 70 | 20 | 19 | 10k+ | date date | ||
| #3127 | Smart WYSIWYG Blocks Of Content | 70 | 36 | 4 | 1k+ | Output is not escaped | ||
| #3128 | Spocket ‑ US & EU Dropshipping | 70 | 15 | 31 | 1k+ | Direct Query | ||
| #3129 | Export Users With Meta | 70 | 13 | 13 | 2k+ | Direct Query | ||
| #3130 | Download Manager Addons for Elementor | 70 | 272 | 13 | 6k+ | Non Singular String Literal Domain | ||
| #3131 | BuddyPress Default Data | 71 | 8 | 21 | 400 | Interpolated SQL is not prepared | ||
| #3132 | GPX Viewer | 71 | 10 | 26 | 900 | Missing Version | ||
| #3133 | Multiple Roles | 71 | 7 | 20 | 5k+ | Non-prefixed global variable | ||
| #3134 | Nginx Helper | 71 | 47 | 60 | 200k+ | Non-prefixed global variable | ||
| #3135 | Privyr CRM – Instant Lead Alerts for Contact Forms | 71 | 2 | 25 | 4k+ | Non-prefixed function | ||
| #3136 | SmartSMTP | 71 | 8 | 42 | 2k+ | Nonce verification recommended | ||
| #3137 | WooCommerce Shipping | 71 | 48 | 70k+ | Direct Query | |||
| #3138 | Bulk Term Editor | 72 | 19 | 9 | 400 | Output is not escaped | ||
| #3139 | Disable Title | 72 | 20 | 15 | 2k+ | Text Domain Mismatch | ||
| #3140 | Discontinued Product Stock Status for WooCommerce | 72 | 1 | 51 | 500 | Missing nonce verification | ||
| #3141 | EU Order Withdrawal Button for WooCommerce | 72 | 52 | 406 | 3k+ | Non-prefixed hook name | ||
| #3142 | Media Library Organizer – Folders, File Manager & Media Categories | 72 | 20 | 130 | 20k+ | Non-prefixed global variable | ||
| #3143 | Responsive Blocks – Page Builder for Blocks & Patterns | 72 | 47 | 43 | 3k+ | badly named files | ||
| #3144 | Shipping Rate By Cities | 72 | 4 | 21 | 700 | Direct Query | ||
| #3145 | Templ Optimizer | 72 | 6 | 63 | 1k+ | Direct Query | ||
| #3146 | Starter Templates & Sites Pack by ThemeGrill | 72 | 28 | 51 | 70k+ | Non-prefixed hook name | ||
| #3147 | TinyPNG – JPEG, PNG & WebP image compression | 72 | 40 | 73 | 100k+ | Non-prefixed global variable | ||
| #3148 | Ultimate Member Custom Tab Builder Lite | 72 | 12 | 15 | 500 | Output is not escaped | ||
| #3149 | Place Order Without Payment for WooCommerce | 72 | 244 | 62 | 3k+ | Text Domain Mismatch | ||
| #3150 | Direct Checkout for WooCommerce | 72 | 77 | 35 | 80k+ | Text Domain Mismatch |