| @@ -93,17 +93,18 @@ | ||
| 93 | 93 | // Integrations that clear OTHER plugins' caches of rendered output |
| 94 | 94 | // (Elementor's element cache + generated CSS). Registers a listener |
| 95 | 95 | // only; nothing runs until Cache::purge_render_caches() asks. |
| 96 | 96 | Render_Caches::boot(); |
| 97 | - // Server_Caches needs no boot(): Cache::dispatch_purge_event() calls it | |
| 98 | - // directly so a throwing third-party listener cannot skip it. | |
| 97 | + // Forwarding needs no boot(): Cache::dispatch_purge_event() calls | |
| 98 | + // Server_Caches::forward() directly so a throwing third-party listener | |
| 99 | + // cannot skip it. Both built-in server-cache adapters live behind it — | |
| 100 | + // LiteSpeed, and the nginx FastCGI cache reached through the host's | |
| 101 | + // Nginx Helper install (Host_Page_Caches), which is why neither is | |
| 102 | + // booted here. This boot() registers one listener only: the single | |
| 103 | + // purge that runs after an import, which the nginx adapter's import | |
| 104 | + // gate stands down in favour of. | |
| 105 | + Server_Caches::boot(); | |
| 99 | 106 | |
| 100 | - // Forward a full purge to a full-page cache owned by the WEB SERVER | |
| 101 | - // (nginx FastCGI, via the host's Nginx Helper install). Registers a | |
| 102 | - // listener on xspeed_after_purge_all only; it stands down unless | |
| 103 | - // that cache is actually configured. | |
| 104 | - Host_Page_Caches::boot(); | |
| 105 | - | |
| 106 | 107 | // Register Free modules via the same action xspeed-pro uses, so |
| 107 | 108 | // the bootstrap path is symmetric across tiers. |
| 108 | 109 | add_action( 'xspeed_register_modules', array( $this, 'register_free_modules' ) ); |
| 109 | 110 | |
| @@ -268,9 +269,9 @@ | ||
| 268 | 269 | // cache-coverage features (404 / search / feed / REST / rules / |
| 269 | 270 | // maintenance) into one sidebar sub-item (FBS-83633). |
| 270 | 271 | Module_Registry::register( new \XSpeed\Modules\CacheCoverage\CacheCoverageModule() ); |
| 271 | 272 | Module_Registry::register( new \XSpeed\Modules\Fonts\FontsModule() ); |
| 272 | - Module_Registry::register( new \XSpeed\Modules\RenderSkip\RenderSkipModule() ); | |
| 273 | + Module_Registry::register( new \XSpeed\Modules\TurboRender\TurboRenderModule() ); | |
| 273 | 274 | Module_Registry::register( new \XSpeed\Modules\ResourceHints\ResourceHintsModule() ); |
| 274 | 275 | // AI Privacy (GDPR off-switch) ships in Free even though every AI |
| 275 | 276 | // *feature* is Pro — privacy is a right, not a paid tier. FEATURES.md |
| 276 | 277 | // §AI row 6 mandates it. Without this registration the module was dead |
| @@ -307,10 +308,11 @@ | ||
| 307 | 308 | public function start_plugin_tracking(): void { |
| 308 | 309 | $this->usage_tracker = Usage_Tracker::get_instance( |
| 309 | 310 | XSPEED_FILE, |
| 310 | 311 | array( |
| 311 | - 'opt_in' => true, | |
| 312 | - 'item_id' => defined( 'XSPEED_INSIGHTS_ITEM_ID' ) ? XSPEED_INSIGHTS_ITEM_ID : false, | |
| 312 | + 'opt_in' => true, | |
| 313 | + 'email_marketing' => true, | |
| 314 | + 'item_id' => defined( 'XSPEED_INSIGHTS_ITEM_ID' ) ? XSPEED_INSIGHTS_ITEM_ID : false, | |
| 313 | 315 | ) |
| 314 | 316 | ); |
| 315 | 317 | $this->usage_tracker->init(); |
| 316 | 318 | } |