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:
@@ -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'],
|
||||||
|
|||||||
@@ -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>';
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user