...
*
* 2. wp_head (priority 1) → CriticalCSSService::render()
* - Consulta BD por componentes is_critical=true
* - Genera CSS usando Renderers
* - Output:
*
* 3. Bootstrap completo se carga diferido (media="print" + onload)
* - No bloquea renderizado inicial
*
* PATRÓN:
* - SRP: Solo registra hooks, delega lógica a servicios
*
* UBICACIÓN: Infrastructure/Wordpress
*
* @package ROITheme\Shared\Infrastructure\Wordpress
*/
final class CriticalCSSHooksRegistrar
{
public function __construct(
private readonly CriticalCSSService $criticalCSSService,
private readonly CriticalBootstrapService $criticalBootstrapService
) {}
/**
* Registrar hooks de WordPress
*/
public function register(): void
{
// Priority 0 = Critical Bootstrap (primero, antes de componentes)
add_action('wp_head', [$this, 'renderCriticalBootstrap'], 0);
// Priority 1 = Critical Component CSS (después de Bootstrap)
add_action('wp_head', [$this, 'renderCriticalCSS'], 1);
}
/**
* Callback para wp_head - Critical Bootstrap
*
* Inyecta subset de Bootstrap (~8KB) inline:
* - Container, flexbox, navbar, dropdown
* - Output:
*/
public function renderCriticalBootstrap(): void
{
$this->criticalBootstrapService->render();
}
/**
* Callback para wp_head - Critical Component CSS
*
* Ejecuta CriticalCSSService que:
* - Consulta BD por componentes con is_critical=true
* - Genera CSS usando los Renderers
* - Output:
*/
public function renderCriticalCSS(): void
{
$this->criticalCSSService->render();
}
}