- Created CriticalCSSService (singleton) that queries BD directly in wp_head - Service generates CSS BEFORE components render (priority 1) - Renderers check is_critical flag and skip inline CSS if true - Made generateCSS() public in Renderers for CriticalCSSService to use - Removed CriticalCSSCollector pattern (timing issue with WordPress) Flow: 1. wp_head (priority 1) → CriticalCSSService::render() 2. Service queries BD for components with visibility.is_critical=true 3. Generates CSS using Renderer->generateCSS() methods 4. Outputs: <style id="roi-critical-css">...</style> 5. When Renderers execute, they detect is_critical and omit CSS inline 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
56 lines
1.5 KiB
PHP
56 lines
1.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace ROITheme\Shared\Infrastructure\Wordpress;
|
|
|
|
use ROITheme\Shared\Infrastructure\Services\CriticalCSSService;
|
|
|
|
/**
|
|
* Registra hook wp_head para inyectar CSS crítico
|
|
*
|
|
* RESPONSABILIDAD:
|
|
* - Registrar hook wp_head (priority 1)
|
|
* - Delegar renderizado a CriticalCSSService
|
|
*
|
|
* FLUJO:
|
|
* 1. wp_head (priority 1) → renderCriticalCSS()
|
|
* 2. CriticalCSSService consulta BD por componentes is_critical=true
|
|
* 3. Genera CSS usando Renderers y lo inyecta en <head>
|
|
* 4. Los Renderers detectan is_critical y omiten CSS inline
|
|
*
|
|
* PATRÓN:
|
|
* - SRP: Solo registra hook, delega lógica a CriticalCSSService
|
|
*
|
|
* UBICACIÓN: Infrastructure/Wordpress
|
|
*
|
|
* @package ROITheme\Shared\Infrastructure\Wordpress
|
|
*/
|
|
final class CriticalCSSHooksRegistrar
|
|
{
|
|
public function __construct(
|
|
private readonly CriticalCSSService $criticalCSSService
|
|
) {}
|
|
|
|
/**
|
|
* Registrar hooks de WordPress
|
|
*/
|
|
public function register(): void
|
|
{
|
|
// Priority 1 = muy temprano en <head>, antes de otros estilos
|
|
add_action('wp_head', [$this, 'renderCriticalCSS'], 1);
|
|
}
|
|
|
|
/**
|
|
* Callback para wp_head
|
|
*
|
|
* Ejecuta CriticalCSSService que:
|
|
* - Consulta BD por componentes con is_critical=true
|
|
* - Genera CSS usando los Renderers
|
|
* - Output: <style id="roi-critical-css">...</style>
|
|
*/
|
|
public function renderCriticalCSS(): void
|
|
{
|
|
$this->criticalCSSService->render();
|
|
}
|
|
}
|