feat(adsense): agregar opcion para ocultar anuncios a usuarios logueados

- Nuevo campo hide_for_logged_in en schema visibility group
- Switch en panel de administracion con icono bi-person-lock
- Mapeo en FieldMapper para persistencia
- Validacion en roi_render_ad_slot, roi_render_rail_ads,
  roi_enqueue_adsense_script y roi_inject_content_ads
- No carga script ni muestra ads si usuario tiene sesion activa

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
FrankZamora
2025-11-28 10:31:49 -06:00
parent e3d17db5ea
commit 4d5cc1a58c
4 changed files with 50 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ final class AdsensePlacementFieldMapper implements FieldMapperInterface
'adsense-placementEnabled' => ['group' => 'visibility', 'attribute' => 'is_enabled'], 'adsense-placementEnabled' => ['group' => 'visibility', 'attribute' => 'is_enabled'],
'adsense-placementShowOnMobile' => ['group' => 'visibility', 'attribute' => 'show_on_mobile'], 'adsense-placementShowOnMobile' => ['group' => 'visibility', 'attribute' => 'show_on_mobile'],
'adsense-placementShowOnDesktop' => ['group' => 'visibility', 'attribute' => 'show_on_desktop'], 'adsense-placementShowOnDesktop' => ['group' => 'visibility', 'attribute' => 'show_on_desktop'],
'adsense-placementHideForLoggedIn' => ['group' => 'visibility', 'attribute' => 'hide_for_logged_in'],
// ANALYTICS (Google Analytics) // ANALYTICS (Google Analytics)
'adsense-placementAnalyticsEnabled' => ['group' => 'analytics', 'attribute' => 'analytics_enabled'], 'adsense-placementAnalyticsEnabled' => ['group' => 'analytics', 'attribute' => 'analytics_enabled'],

View File

@@ -86,6 +86,13 @@ final class AdsensePlacementFormBuilder
$html .= ' </div>'; $html .= ' </div>';
$html .= '</div>'; $html .= '</div>';
// Opcion para ocultar anuncios a usuarios logueados
$html .= '<div class="mt-3 p-2 rounded" style="background: #fff3cd;">';
$hideForLoggedIn = $this->renderer->getFieldValue($cid, 'visibility', 'hide_for_logged_in', false);
$html .= $this->buildSwitch($cid . 'HideForLoggedIn', 'Ocultar para usuarios logueados', $hideForLoggedIn, 'bi-person-lock');
$html .= '<small class="text-muted d-block" style="margin-top: -8px; margin-left: 40px;">No mostrar anuncios a usuarios con sesion iniciada en WordPress</small>';
$html .= '</div>';
$html .= ' </div>'; $html .= ' </div>';
$html .= '</div>'; $html .= '</div>';

View File

@@ -37,6 +37,11 @@ function roi_render_ad_slot(string $location): string
return ''; return '';
} }
// Verificar si ocultar para usuarios logueados
if (roi_should_hide_for_logged_in($settings)) {
return '';
}
// Verificar exclusiones // Verificar exclusiones
if (roi_is_ad_excluded($settings)) { if (roi_is_ad_excluded($settings)) {
return ''; return '';
@@ -55,6 +60,21 @@ function roi_render_ad_slot(string $location): string
} }
} }
/**
* Verifica si se deben ocultar anuncios para usuarios logueados
*/
function roi_should_hide_for_logged_in(array $settings): bool
{
// Si la opcion esta activada Y el usuario esta logueado, ocultar ads
$hideForLoggedIn = $settings['visibility']['hide_for_logged_in'] ?? false;
if ($hideForLoggedIn && is_user_logged_in()) {
return true;
}
return false;
}
/** /**
* Verifica si el contenido actual esta excluido * Verifica si el contenido actual esta excluido
*/ */
@@ -108,6 +128,11 @@ function roi_render_rail_ads(): string
return ''; return '';
} }
// Verificar si ocultar para usuarios logueados
if (roi_should_hide_for_logged_in($settings)) {
return '';
}
// Verificar exclusiones // Verificar exclusiones
if (roi_is_ad_excluded($settings)) { if (roi_is_ad_excluded($settings)) {
return ''; return '';
@@ -153,6 +178,11 @@ function roi_enqueue_adsense_script(): void
return; return;
} }
// Verificar si ocultar para usuarios logueados
if (roi_should_hide_for_logged_in($settings)) {
return;
}
$publisherId = $settings['content']['publisher_id'] ?? ''; $publisherId = $settings['content']['publisher_id'] ?? '';
if (empty($publisherId)) { if (empty($publisherId)) {
return; return;
@@ -201,6 +231,11 @@ function roi_inject_content_ads(string $content): string
return $content; return $content;
} }
// Verificar si ocultar para usuarios logueados
if (roi_should_hide_for_logged_in($settings)) {
return $content;
}
// Verificar exclusiones // Verificar exclusiones
if (roi_is_ad_excluded($settings)) { if (roi_is_ad_excluded($settings)) {
return $content; return $content;

View File

@@ -28,6 +28,13 @@
"default": true, "default": true,
"editable": true, "editable": true,
"description": "Muestra anuncios en pantallas moviles (<992px)" "description": "Muestra anuncios en pantallas moviles (<992px)"
},
"hide_for_logged_in": {
"type": "boolean",
"label": "Ocultar para usuarios logueados",
"default": false,
"editable": true,
"description": "No mostrar anuncios a usuarios con sesion iniciada en WordPress"
} }
} }
}, },