| 开发者 | taicv |
|---|---|
| 更新时间 | 2026年6月24日 02:19 |
| 捐献地址: | 去捐款 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
EARLYBIRDPRO for 20% off.
👉 Get Pro Now
/wp-content/plugins/grabwp-tenancy directoryNo, this plugin provides multi-tenancy functionality without requiring WordPress multisite. It creates tenant isolation through domain-based or path-based routing and database prefixes.
No! With our new path-based routing feature, you can completely bypass complex domain and DNS configurations. You can host tenants dynamically on subdirectories underneath your main site (e.g., yoursite.com/site/client-a).
Yes, you can configure custom domains for each tenant through the admin interface or by editing the tenant mapping file.
The plugin is designed to be compatible with most WordPress plugins. However, plugins that directly access database tables may need to be configured to work with tenant prefixes.
WordPress Multisite shares one database, one set of plugins, and one set of themes across all sites. GrabWP Tenancy gives each tenant true isolation — separate table prefixes, separate upload directories, and with Pro, completely dedicated databases and per-tenant plugins/themes. No network admin complexity, no shared-database risks.
Yes. GrabWP Tenancy is built for WordPress freelancers and agencies managing multiple client sites from a single installation. The admin interface handles tenant CRUD, and Pro adds backup/restore per tenant for easy management at scale.
tokens.php and consumed via rename) with stateless HMAC-SHA256 tokens bound to the tenant ID, signed with AUTH_KEY/AUTH_SALT and given a short TTL (default 30 minutes, configurable via GRABWP_TENANCY_TOKEN_TTL). No token secret is persisted to disk anymore.admin/css/grabwp-admin-shared.css) with utility classes; section show/hide now toggles a hidden class.tokens.php / .consumed artifacts on activation; removed the now-unused get_tokens_file_path() helper.hash_equals().tenant_domain in the query string; hash validation uses internal routing context instead.GrabWP_Tenancy_Path_Manager::atomic_put_php_file() for atomic writes of settings, tenant mappings, and admin token files (tmp + rename, ABSPATH guard, OpCache invalidation).DOING_CRON).load-helper.php into focused modules (security, server detection, tenant detection, boot constants, cache) — same boot behavior, easier maintenance and extension.GrabWP_Tenancy_Admin_Form_Handler, GrabWP_Tenancy_Tenant_Crud, GrabWP_Tenancy_Domain_Validator); public handle_create_tenant(), handle_update_tenant(), and handle_delete_tenant() methods remain for backward compatibility.GrabWP_Tenancy_Status_Checker (General, Base Plugin, Pro Plugin tabs unchanged).grabwp_tenancy_before_create_tenant, grabwp_tenancy_after_create_tenant, etc.) preserved; no migration required.WP_CACHE) and prefixes object-cache keys with the tenant ID (WP_CACHE_KEY_SALT) to prevent cross-tenant cache collisions on shared Redis/Memcached backends.grabwp_tenancy_get_tenant_url() helper to resolve a tenant front-end URL by ID without loading a full tenant object.get_site_url(), get_admin_access_url(), and static helpers (resolve_site_url(), resolve_admin_url(), build_site_url()) now handle domain-based and path-based routing in one place; tenant list and clone flows use these shared methods.[tenant_id] or [Mainsite] for easier multi-tenant debugging.wp-content/uploads/grabwp-tenancy to wp-content/grabwp-tenancy (outside uploads) to prevent direct web access to tenant data. Existing installs that already use the uploads path are preserved automatically — no migration needed.WP_CONTENT_DIR directly instead of wp_upload_dir(), matching the new default path.plugins, themes) are now removed on tenant sites when the corresponding Hide Plugin Management / Hide Theme Management settings are enabled, closing a gap where the toolbar still exposed those links.tenant-{6digits}.{hostname}); a new Clear button lets users wipe the field quickly; the domain input grows up to 500 px wide; and the domain section is visually indented under its radio button.true to false for fresh installs, giving new tenants full access by default until explicitly restricted.GRABWP_MAINSITE_ID constant (__mainsite__) to allow the main site to be used as a clone source.mysite.local, bare localhost).content_url() to avoid incorrect absolute paths.example.com/site/abcdef) without requiring separate domains. This completely eliminates the need for complex domain mappings and serves as a true, lightweight replacement for WordPress Multisite..htaccess diagnostic admin notices specifically tailored for path-based routing support.GrabWP_Tenancy_Installer class.wp_is_writable().Class Not Found) relating to the class autoloader sequence during the initial activation process.load.php require line before the stop-editing marker, or shows copy-to-clipboard fallback when wp-config.php is not writablewp-config.php loader, shown only on plugin pages, with writability-aware UI (auto-install vs. manual copy)grabwp_tenancy_validate_tenant_id() in Path Manager so validation works even when load-helper.php is not loadedmuPluginNonce, loaderNonce) into localized admin script databindCopyButton() helper, added initMuPluginInstall() and initLoaderInstall() handlers in grabwp-admin.jsload-helper.php base-dir resolution logic and added GRABWP_TENANCY_DIRS_FROM_PLUGIN constantgrabwp_tenancy_ prefix to avoid potential conflicts