Files
roi-theme/Shared/Infrastructure/Wordpress/CriticalCSSHooksRegistrar.php
FrankZamora 4f25297f14 feat(pagespeed): implementar campo is_critical para CSS crítico dinámico (Phase 4.2)
Implementación completa del sistema de Critical CSS dinámico según plan 13.01:

Domain Layer:
- Crear CriticalCSSCollectorInterface para DIP compliance

Infrastructure Layer:
- Implementar CriticalCSSCollector (singleton via DIContainer)
- Crear CriticalCSSHooksRegistrar para inyección en wp_head
- Actualizar DIContainer con getCriticalCSSCollector()

Schemas:
- Agregar campo is_critical a navbar, top-notification-bar, hero
- Sincronizar con BD (18+39+31 campos)

Renderers (navbar, top-notification-bar, hero):
- Inyectar CriticalCSSCollectorInterface via constructor
- Lógica condicional: si is_critical=true → CSS a <head>

Admin (FormBuilders + FieldMappers):
- Toggle "CSS Crítico" en sección visibility
- Mapeo AJAX para persistencia

Beneficios:
- LCP optimizado: CSS crítico inline en <head>
- Above-the-fold rendering sin FOUC
- Componentes configurables desde admin panel

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 09:29:45 -06:00

47 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace ROITheme\Shared\Infrastructure\Wordpress;
use ROITheme\Shared\Domain\Contracts\CriticalCSSCollectorInterface;
/**
* Registra hook wp_head para inyectar CSS crítico
*
* RESPONSABILIDAD:
* - Registrar hook wp_head
* - Delegar renderizado a CriticalCSSCollector
*
* PATRÓN:
* - DIP: Recibe interface, no clase concreta
* - SRP: Solo registra hook, no contiene lógica de CSS
*
* UBICACIÓN: Infrastructure/Wordpress (según 00.02 líneas 307-311)
*
* @package ROITheme\Shared\Infrastructure\Wordpress
*/
final class CriticalCSSHooksRegistrar
{
public function __construct(
private readonly CriticalCSSCollectorInterface $collector
) {}
/**
* 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
*/
public function renderCriticalCSS(): void
{
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $this->collector->render();
}
}