feat(visibility): sistema de visibilidad por tipo de página

- Añadir PageVisibility use case y repositorio
- Implementar PageTypeDetector para detectar home/single/page/archive
- Actualizar FieldMappers con soporte show_on_[page_type]
- Extender FormBuilders con UI de visibilidad por página
- Refactorizar Renderers para evaluar visibilidad dinámica
- Limpiar schemas removiendo campos de visibilidad legacy
- Añadir MigrationCommand para migrar configuraciones existentes
- Implementar adsense-loader.js para carga lazy de ads
- Actualizar front-page.php con nueva estructura
- Extender DIContainer con nuevos servicios

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
FrankZamora
2025-12-03 09:16:34 -06:00
parent 7fb5eda108
commit 8735962f52
66 changed files with 2614 additions and 573 deletions

View File

@@ -437,6 +437,72 @@
}
}
},
"search_results": {
"label": "Resultados de Busqueda (ROI APU Search)",
"priority": 73,
"fields": {
"search_ads_enabled": {
"type": "boolean",
"label": "Activar ads en busqueda",
"default": false,
"editable": true,
"description": "Insertar anuncios en resultados del buscador APU"
},
"search_top_ad_enabled": {
"type": "boolean",
"label": "Anuncio fijo arriba",
"default": true,
"editable": true,
"description": "Mostrar anuncio debajo del campo de busqueda"
},
"search_top_ad_format": {
"type": "select",
"label": "Formato anuncio superior",
"default": "auto",
"editable": true,
"options": ["auto", "display", "in-article"]
},
"search_between_enabled": {
"type": "boolean",
"label": "Anuncios entre resultados",
"default": true,
"editable": true
},
"search_between_max": {
"type": "select",
"label": "Maximo anuncios entre resultados",
"default": "1",
"editable": true,
"options": ["1", "2", "3"],
"description": "Maximo 3 por politicas AdSense"
},
"search_between_format": {
"type": "select",
"label": "Formato entre resultados",
"default": "in-article",
"editable": true,
"options": ["auto", "in-article", "autorelaxed"]
},
"search_between_position": {
"type": "select",
"label": "Posicion de anuncios",
"default": "random",
"editable": true,
"options": {
"random": "Aleatorio",
"fixed": "Fijo (cada N resultados)",
"first_half": "Primera mitad"
}
},
"search_between_every": {
"type": "select",
"label": "Cada N resultados (si es fijo)",
"default": "5",
"editable": true,
"options": ["3", "4", "5", "6", "7", "8", "10"]
}
}
},
"layout": {
"label": "Ubicaciones Archivos/Globales",
"priority": 80,