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>
This commit is contained in:
@@ -3,27 +3,32 @@ declare(strict_types=1);
|
||||
|
||||
namespace ROITheme\Shared\Infrastructure\Wordpress;
|
||||
|
||||
use ROITheme\Shared\Domain\Contracts\CriticalCSSCollectorInterface;
|
||||
use ROITheme\Shared\Infrastructure\Services\CriticalCSSService;
|
||||
|
||||
/**
|
||||
* Registra hook wp_head para inyectar CSS crítico
|
||||
*
|
||||
* RESPONSABILIDAD:
|
||||
* - Registrar hook wp_head
|
||||
* - Delegar renderizado a CriticalCSSCollector
|
||||
* - 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:
|
||||
* - DIP: Recibe interface, no clase concreta
|
||||
* - SRP: Solo registra hook, no contiene lógica de CSS
|
||||
* - SRP: Solo registra hook, delega lógica a CriticalCSSService
|
||||
*
|
||||
* UBICACIÓN: Infrastructure/Wordpress (según 00.02 líneas 307-311)
|
||||
* UBICACIÓN: Infrastructure/Wordpress
|
||||
*
|
||||
* @package ROITheme\Shared\Infrastructure\Wordpress
|
||||
*/
|
||||
final class CriticalCSSHooksRegistrar
|
||||
{
|
||||
public function __construct(
|
||||
private readonly CriticalCSSCollectorInterface $collector
|
||||
private readonly CriticalCSSService $criticalCSSService
|
||||
) {}
|
||||
|
||||
/**
|
||||
@@ -37,10 +42,14 @@ final class CriticalCSSHooksRegistrar
|
||||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||
echo $this->collector->render();
|
||||
$this->criticalCSSService->render();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user