-
Notifications
You must be signed in to change notification settings - Fork 0
FAQ
ShadowORM is a WordPress plugin that accelerates meta queries by storing post metadata in optimized "shadow tables" instead of the traditional wp_postmeta table.
Based on benchmarks:
- Single meta read: 4x faster (2ms → 0.5ms)
- Product listings: 4x faster (200ms → 50ms)
- Category page TTFB: 2.5x faster (400ms → 150ms)
Yes. ShadowORM:
- Keeps original data in
wp_postmetaduring sync - Falls back to
wp_postmetaif plugin is deactivated - Uses prepared statements for all queries
- Never deletes data without explicit rollback command
No. ShadowORM intercepts standard WordPress functions:
-
get_post_meta()- works transparently -
update_post_meta()- syncs automatically -
WP_Querywithmeta_query- transformed automatically
| MySQL Version | Support Level |
|---|---|
| MySQL 8.0+ | Full (native JSON) |
| MySQL 5.7 | Full (lookup tables) |
| MariaDB 10.2+ | Full (lookup tables) |
| MySQL 5.6 and below | Not supported |
WordPress 6.0 and higher.
Yes! ShadowORM works with:
- Simple and Variable products
- Product attributes
- WooCommerce meta fields (_price, _sku, etc.)
Note: Product Variations support requires the Pro version.
Yes for basic field types:
- Text, Number, URL, Email
- Select, Radio, Checkbox
- True/False, Date, Time
ACF Repeater and Flexible Content require the Pro version.
Tested with:
- Elementor
- Divi (with limitations)
- Beaver Builder
Elementor's _elementor_data is stored in the shadow table.
WordPress uses the EAV (Entity-Attribute-Value) pattern in wp_postmeta:
- Every meta key/value pair is a separate row
- Many JOINs required for complex queries
- Table grows massive with many posts
ShadowORM stores all metadata for a post in a single JSON column:
- One row per post (not per meta key)
- One query fetches all metadata
- JSON indexing for fast searches
Performance gains are most visible with:
- Many meta keys per post (5+)
- Complex meta queries
- Large catalogs (1000+ products)
- Category/archive pages
Writes have minimal overhead:
- Sync happens after
save_post - Async-safe (doesn't block the response)
- Typically adds <5ms per save
- MySQL version is checked
-
db.phpdrop-in is installed - MU-plugin loader is created
- Admin panel is registered
No data is migrated automatically.
-
db.phpdrop-in is removed - MU-plugin loader is removed
- Shadow tables are preserved
- WordPress falls back to
wp_postmeta
Yes, if your host provides:
- PHP 8.1+
- MySQL 5.7+ or MariaDB 10.2+
- Composer access (or pre-install dependencies)
Yes. ShadowORM's RuntimeCache is separate from WordPress object cache (Redis, Memcached). They work together without conflict.
Yes, but it's not recommended:
// Works but not recommended
global $wpdb;
$wpdb->get_results("SELECT * FROM {$wpdb->prefix}app_shadow_product");
// Recommended approach
$repository = new ShadowRepository($driver, $schema, $wpdb->prefix);
$entity = $repository->find($post_id);Depends on your data:
- 1,000 posts: ~10 seconds
- 10,000 posts: ~2 minutes
- 100,000 posts: ~20 minutes
Yes, but consider:
- Running during low-traffic periods
- Using smaller batch sizes
- Monitoring server resources
- Data in
wp_postmetais unchanged - Partially migrated data can be rolled back
- Re-run migration to continue
Not in the Free version. All meta is included except:
_edit_lock_edit_last
- MySQL 8.0 and Legacy driver support
- WP-CLI commands
- Admin panel
- Runtime caching
- Post, Page, Product support
- WooCommerce Variations
- ACF Repeater/Flexible Content
- WPML/Polylang support
- Advanced dashboard
- Visual index builder
- Priority support
Visit gotowebplugins.com/shadow-orm-pro
- Documentation: This wiki
- Issues: GitHub Issues
- Email: kontakt@gotoweb.pl
- Pro Support: Priority response for Pro customers
Open a GitHub issue with:
- WordPress version
- PHP version
- MySQL version
- Error message/logs
- Steps to reproduce
Yes! See Contributing for guidelines.
High-performance ORM layer for WordPress/WooCommerce
- Home - Overview and features
- Installation - Setup instructions
- Getting Started - Quick start guide
- Configuration - Settings reference
- WP-CLI Commands - Command reference
- Architecture - Technical design
- How It Works - Internal workings
- API Reference - Developer API
- Troubleshooting - Problem solving
- FAQ - Common questions
Links