fix(wrappers): eliminar wrappers vacíos y corregir exclusiones AdSense (Plan 99.15)
## Problema - Componentes deshabilitados/excluidos dejaban wrappers HTML vacíos (navbar 32px, sidebar col-lg-3 294px) - AdSense ignoraba exclusiones por URL pattern en grupo _exclusions ## Solución Plan 99.15 (Clean Architecture) ### Domain Layer - WrapperVisibilityCheckerInterface: contrato para verificar visibilidad ### Application Layer - CheckWrapperVisibilityUseCase: orquesta verificaciones de visibilidad ### Infrastructure Layer - WordPressComponentVisibilityRepository: consulta BD + PageVisibilityHelper - WrapperVisibilityService: facade estático para templates - BodyClassHooksRegistrar: agrega clases CSS failsafe al body ### Templates modificados - header.php: renderizado condicional de <nav> wrapper - page.php/single.php: lógica dinámica col-lg-9/col-lg-12 según sidebar ### CSS Failsafe - css-global-utilities.css: reglas body.roi-hide-* como respaldo ## Fix AdSense (Inc/adsense-placement.php) - Agregado PageVisibilityHelper::shouldShow() a todas las funciones: roi_render_ad_slot, roi_render_rail_ads, roi_enqueue_adsense_script, roi_inject_content_ads, roi_render_anchor_ads, roi_render_vignette_ad, roi_enqueue_anchor_vignette_scripts 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
96
Shared/Infrastructure/Wordpress/BodyClassHooksRegistrar.php
Normal file
96
Shared/Infrastructure/Wordpress/BodyClassHooksRegistrar.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ROITheme\Shared\Infrastructure\Wordpress;
|
||||
|
||||
use ROITheme\Shared\Infrastructure\Services\WrapperVisibilityService;
|
||||
|
||||
/**
|
||||
* Registra hook body_class para agregar clases CSS de componentes ocultos
|
||||
*
|
||||
* RESPONSABILIDAD:
|
||||
* - Registrar hook body_class
|
||||
* - Agregar clases CSS cuando componentes están ocultos
|
||||
*
|
||||
* FLUJO:
|
||||
* 1. body_class filter → addHiddenComponentClasses()
|
||||
* - Verifica visibilidad de componentes clave (navbar, sidebar components)
|
||||
* - Agrega clases: roi-hide-navbar, roi-hide-sidebar, etc.
|
||||
*
|
||||
* PROPÓSITO:
|
||||
* Failsafe CSS: Si los templates no pueden ocultar wrappers completamente,
|
||||
* estas clases permiten ocultarlos via CSS.
|
||||
*
|
||||
* PATRÓN:
|
||||
* - SRP: Solo registra hooks, delega lógica a WrapperVisibilityService
|
||||
*
|
||||
* @package ROITheme\Shared\Infrastructure\Wordpress
|
||||
* @see Plan 99.15 - Fix Empty Layout Wrappers
|
||||
*/
|
||||
final class BodyClassHooksRegistrar
|
||||
{
|
||||
/**
|
||||
* Componentes que afectan el layout principal
|
||||
*/
|
||||
private const LAYOUT_COMPONENTS = [
|
||||
'navbar' => 'roi-hide-navbar',
|
||||
'table-of-contents' => 'roi-hide-toc',
|
||||
'cta-box-sidebar' => 'roi-hide-cta-sidebar',
|
||||
'sidebar' => 'roi-hide-sidebar',
|
||||
];
|
||||
|
||||
/**
|
||||
* Componentes de sidebar que determinan si mostrar columna lateral
|
||||
*/
|
||||
private const SIDEBAR_COMPONENTS = [
|
||||
'table-of-contents',
|
||||
'cta-box-sidebar',
|
||||
];
|
||||
|
||||
/**
|
||||
* Registrar hooks de WordPress
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
add_filter('body_class', [$this, 'addHiddenComponentClasses']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback para body_class - agrega clases para componentes ocultos
|
||||
*
|
||||
* @param array<string> $classes Clases existentes
|
||||
* @return array<string> Clases modificadas
|
||||
*/
|
||||
public function addHiddenComponentClasses(array $classes): array
|
||||
{
|
||||
// Agregar clase por cada componente oculto
|
||||
foreach (self::LAYOUT_COMPONENTS as $componentName => $cssClass) {
|
||||
if (!WrapperVisibilityService::shouldRenderWrapper($componentName)) {
|
||||
$classes[] = $cssClass;
|
||||
}
|
||||
}
|
||||
|
||||
// Verificar si TODOS los componentes de sidebar están ocultos
|
||||
if ($this->allSidebarComponentsHidden()) {
|
||||
$classes[] = 'roi-sidebar-empty';
|
||||
}
|
||||
|
||||
return $classes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica si todos los componentes de sidebar están ocultos
|
||||
*
|
||||
* @return bool True si ningún componente de sidebar debe mostrarse
|
||||
*/
|
||||
private function allSidebarComponentsHidden(): bool
|
||||
{
|
||||
foreach (self::SIDEBAR_COMPONENTS as $componentName) {
|
||||
if (WrapperVisibilityService::shouldRenderWrapper($componentName)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user