Fix CTA: Reemplazar sistema dual HTML/JS con sistema PHP robusto - Issue #126
PROBLEMA RAÍZ:
Había DOS sistemas de A/B testing en conflicto:
1. Sistema PHP completo en cta-ab-testing.php (NO usado)
2. Sistema HTML/JS en single.php + main.js (ambas variantes hardcodeadas con display:none)
El JavaScript no ejecutaba de forma confiable, causando que el CTA:
- A veces no apareciera (ambas variantes quedaban ocultas)
- A veces aparecieran ambas variantes simultáneamente
SOLUCIÓN:
Activar el sistema PHP que ya existía. Más robusto porque:
- Renderiza solo UNA variante server-side (sin timing issues)
- Usa cookies para persistencia de 30 días por usuario
- Elimina race conditions de JavaScript
CAMBIOS:
1. cta-ab-testing.php:
- Actualizar URLs de '#' a home_url('/catalogo') y home_url('/planes')
- Cambiar apus_render_cta() para usar .cta-section (no .apus-cta-wrapper)
- Eliminar atributo data-cta-action (innecesario)
2. single.php:
- ELIMINAR 29 líneas de HTML duplicado (variantes A y B hardcodeadas)
- REEMPLAZAR con: <?php apus_display_cta(); ?>
3. main.js:
- ELIMINAR 26 líneas de lógica A/B en JavaScript
- AGREGAR comentario: CTA manejado por PHP + cta-tracking.js
4. cta-tracking.js:
- Actualizar selectores: .apus-cta-wrapper → .cta-section (2 ocurrencias)
ARQUITECTURA FINAL:
- PHP: Selección de variante + renderizado server-side
- cta-tracking.js: Solo tracking de Analytics (clicks/impresiones)
- Cookies: Persistencia de variante asignada
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -101,7 +101,7 @@
|
|||||||
* Solo registra cuando el CTA es visible al menos el 50%
|
* Solo registra cuando el CTA es visible al menos el 50%
|
||||||
*/
|
*/
|
||||||
function setupImpressionTracking() {
|
function setupImpressionTracking() {
|
||||||
const ctaElement = document.querySelector('.apus-cta-wrapper');
|
const ctaElement = document.querySelector('.cta-section');
|
||||||
|
|
||||||
if (!ctaElement) {
|
if (!ctaElement) {
|
||||||
debugLog('CTA no encontrado en el DOM');
|
debugLog('CTA no encontrado en el DOM');
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
* Agregar clase de animación al CTA (opcional)
|
* Agregar clase de animación al CTA (opcional)
|
||||||
*/
|
*/
|
||||||
function animateCTA() {
|
function animateCTA() {
|
||||||
const ctaElement = document.querySelector('.apus-cta-wrapper');
|
const ctaElement = document.querySelector('.cta-section');
|
||||||
if (ctaElement) {
|
if (ctaElement) {
|
||||||
ctaElement.classList.add('fade-in-up');
|
ctaElement.classList.add('fade-in-up');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,33 +23,12 @@ window.addEventListener('scroll', function() {
|
|||||||
* - localStorage state
|
* - localStorage state
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// A/B Testing for CTA sections
|
/**
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
* CTA A/B Testing
|
||||||
const ctaVariant = Math.random() < 0.5 ? 'A' : 'B';
|
* Handled by cta-ab-testing.php (PHP) and cta-tracking.js
|
||||||
|
* - PHP renders only ONE variant based on cookie
|
||||||
if (ctaVariant === 'A') {
|
* - cta-tracking.js handles Analytics tracking
|
||||||
const variantA = document.querySelector('.cta-variant-a');
|
*/
|
||||||
if (variantA) variantA.style.display = 'block';
|
|
||||||
} else {
|
|
||||||
const variantB = document.querySelector('.cta-variant-b');
|
|
||||||
if (variantB) variantB.style.display = 'block';
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelectorAll('.cta-button').forEach(button => {
|
|
||||||
button.addEventListener('click', function() {
|
|
||||||
const variant = this.getAttribute('data-cta-variant');
|
|
||||||
console.log('CTA clicked - Variant: ' + variant);
|
|
||||||
|
|
||||||
if (typeof gtag !== 'undefined') {
|
|
||||||
gtag('event', 'cta_click', {
|
|
||||||
'event_category': 'CTA',
|
|
||||||
'event_label': 'Variant_' + variant,
|
|
||||||
'value': variant
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Contact Modal - Dynamic Loading
|
// Contact Modal - Dynamic Loading
|
||||||
function loadContactModal() {
|
function loadContactModal() {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ function apus_get_cta_config($variant) {
|
|||||||
'title' => get_theme_mod('apus_cta_a_title', __('Accede a 200,000+ Análisis de Precios Unitarios', 'apus-theme')),
|
'title' => get_theme_mod('apus_cta_a_title', __('Accede a 200,000+ Análisis de Precios Unitarios', 'apus-theme')),
|
||||||
'text' => get_theme_mod('apus_cta_a_text', __('Consulta estructuras completas, insumos y dosificaciones de los APUs más utilizados en construcción en México.', 'apus-theme')),
|
'text' => get_theme_mod('apus_cta_a_text', __('Consulta estructuras completas, insumos y dosificaciones de los APUs más utilizados en construcción en México.', 'apus-theme')),
|
||||||
'button_text' => get_theme_mod('apus_cta_a_button', __('Ver Catálogo Completo', 'apus-theme')),
|
'button_text' => get_theme_mod('apus_cta_a_button', __('Ver Catálogo Completo', 'apus-theme')),
|
||||||
'button_url' => get_theme_mod('apus_cta_a_url', '#'),
|
'button_url' => get_theme_mod('apus_cta_a_url', home_url('/catalogo')),
|
||||||
'variant' => 'A',
|
'variant' => 'A',
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -97,7 +97,7 @@ function apus_get_cta_config($variant) {
|
|||||||
'title' => get_theme_mod('apus_cta_b_title', __('¿Necesitas Consultar Más APUs?', 'apus-theme')),
|
'title' => get_theme_mod('apus_cta_b_title', __('¿Necesitas Consultar Más APUs?', 'apus-theme')),
|
||||||
'text' => get_theme_mod('apus_cta_b_text', __('Accede a nuestra biblioteca de 200,000 análisis de precios unitarios con estructuras detalladas y listados de insumos.', 'apus-theme')),
|
'text' => get_theme_mod('apus_cta_b_text', __('Accede a nuestra biblioteca de 200,000 análisis de precios unitarios con estructuras detalladas y listados de insumos.', 'apus-theme')),
|
||||||
'button_text' => get_theme_mod('apus_cta_b_button', __('Conocer Planes de Membresía', 'apus-theme')),
|
'button_text' => get_theme_mod('apus_cta_b_button', __('Conocer Planes de Membresía', 'apus-theme')),
|
||||||
'button_url' => get_theme_mod('apus_cta_b_url', '#'),
|
'button_url' => get_theme_mod('apus_cta_b_url', home_url('/planes')),
|
||||||
'variant' => 'B',
|
'variant' => 'B',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -112,9 +112,9 @@ function apus_get_cta_config($variant) {
|
|||||||
*/
|
*/
|
||||||
function apus_render_cta($variant, $config) {
|
function apus_render_cta($variant, $config) {
|
||||||
?>
|
?>
|
||||||
<!-- CTA Section - Variante <?php echo esc_attr($variant); ?> -->
|
<!-- CTA A/B Testing - Variante <?php echo esc_attr($variant); ?> -->
|
||||||
<div class="apus-cta-wrapper my-5 p-4 rounded cta-section cta-variant-<?php echo esc_attr(strtolower($variant)); ?>"
|
<div class="my-5 p-4 rounded cta-section cta-variant-<?php echo esc_attr(strtolower($variant)); ?>"
|
||||||
data-cta-variant="<?php echo esc_attr($variant); ?>">
|
data-variant="<?php echo esc_attr($variant); ?>">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<h3 class="h4 fw-bold text-white mb-2">
|
<h3 class="h4 fw-bold text-white mb-2">
|
||||||
@@ -127,8 +127,7 @@ function apus_render_cta($variant, $config) {
|
|||||||
<div class="col-md-4 text-md-end mt-3 mt-md-0">
|
<div class="col-md-4 text-md-end mt-3 mt-md-0">
|
||||||
<a href="<?php echo esc_url($config['button_url']); ?>"
|
<a href="<?php echo esc_url($config['button_url']); ?>"
|
||||||
class="btn btn-light btn-lg cta-button"
|
class="btn btn-light btn-lg cta-button"
|
||||||
data-cta-variant="<?php echo esc_attr($variant); ?>"
|
data-cta-variant="<?php echo esc_attr($variant); ?>">
|
||||||
data-cta-action="click">
|
|
||||||
<?php echo esc_html($config['button_text']); ?>
|
<?php echo esc_html($config['button_text']); ?>
|
||||||
<i class="bi bi-arrow-right ms-2"></i>
|
<i class="bi bi-arrow-right ms-2"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -115,36 +115,8 @@ get_header();
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- CTA A/B Testing (Template líneas 812-841) -->
|
<!-- CTA A/B Testing -->
|
||||||
<!-- Variante A: Enfoque en Catálogo -->
|
<?php apus_display_cta(); ?>
|
||||||
<div class="my-5 p-4 rounded cta-section cta-variant-a" data-variant="A" style="display: none;">
|
|
||||||
<div class="row align-items-center">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3 class="h4 fw-bold text-white mb-2">Accede a 200,000+ Análisis de Precios Unitarios</h3>
|
|
||||||
<p class="text-white mb-md-0">Consulta estructuras completas, insumos y dosificaciones de los APUs más utilizados en construcción en México.</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4 text-md-end mt-3 mt-md-0">
|
|
||||||
<a href="<?php echo home_url('/catalogo'); ?>" class="btn btn-light btn-lg cta-button" data-cta-variant="A">
|
|
||||||
Ver Catálogo Completo <i class="bi bi-arrow-right ms-2"></i>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Variante B: Enfoque en Membresía -->
|
|
||||||
<div class="my-5 p-4 rounded cta-section cta-variant-b" data-variant="B" style="display: none;">
|
|
||||||
<div class="row align-items-center">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3 class="h4 fw-bold text-white mb-2">¿Necesitas Consultar Más APUs?</h3>
|
|
||||||
<p class="text-white mb-md-0">Accede a nuestra biblioteca de 200,000 análisis de precios unitarios con estructuras detalladas y listados de insumos.</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4 text-md-end mt-3 mt-md-0">
|
|
||||||
<a href="<?php echo home_url('/planes'); ?>" class="btn btn-light btn-lg cta-button" data-cta-variant="B">
|
|
||||||
Conocer Planes de Membresía <i class="bi bi-arrow-right ms-2"></i>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Related Posts (Template líneas 843-981) -->
|
<!-- Related Posts (Template líneas 843-981) -->
|
||||||
<div class="my-5 related-posts">
|
<div class="my-5 related-posts">
|
||||||
|
|||||||
Reference in New Issue
Block a user