Files
roi-theme/Shared/Infrastructure/Wordpress/CriticalCSSHooksRegistrar.php
FrankZamora ce0179a134 feat: implement is_critical CSS injection via CriticalCSSService
- 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>
2025-11-29 10:06:38 -06:00

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();
}
}