Inserción automática
El banner se coloca antes del H2 más cercano al punto medio del artículo; se saltan los posts cortos y el primer y último tramo.
El formulario de newsletter quedaba enterrado al fondo en móvil y los CTAs se colocaban a mano. Construí un sistema de captación configurable sin código y resolví un conflicto del CRM que duplicaba formularios.
En móvil la barra lateral se apila al final: el formulario de newsletter quedaba detrás de relacionados, banners, buscador y categorías. Casi nadie llegaba a verlo, y el móvil es una parte grande del tráfico del blog.
Los CTAs a la prueba gratuita se insertaban a mano, sin reglas por categoría ni forma de cambiarlos en bloque.
Lo que parecía obvio y no era. Descartar bien ahorra días de trabajo en la dirección equivocada.
El script del CRM consolida instancias con el mismo ID: una se vacía.
El page builder renderiza el contenido fuera del loop principal.
No resolvía la inserción por estructura del artículo ni la prioridad por categoría.
El banner se coloca antes del H2 más cercano al punto medio del artículo; se saltan los posts cortos y el primer y último tramo.
5 presets desde el admin con prioridad shortcode → post → categoría → defecto, y panel de diagnóstico para administradores.
Sustituí in_the_loop() por comparar el post renderizado con el objeto consultado.
Markup propio que envía al mismo formulario por la API del CRM, con la cookie de seguimiento para no perder la atribución.
En móvil se oculta el formulario lateral y el nuevo aparece tras el artículo, con el mismo estilo que el botón principal.
Bajo cada caso de cliente, tres casos aleatorios para que la visita no termine ahí.
Fragmentos simplificados y sin datos del cliente, para que se vea el enfoque técnico real.
function cta_should_render(): bool {
if ( ! is_singular( 'post' ) ) {
return false;
}
// in_the_loop() falla con page builders: comparamos con la consulta principal
return get_the_ID() === get_queried_object_id();
}fetch(`https://api.crm.example/submissions/${portalId}/${formId}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
fields: [{ name: 'email', value: email }],
context: { hutk: getCookie('tracking_uid'), pageUri: location.href, pageName: document.title }
})
});Evita la consolidación de instancias y deja control total del diseño y la accesibilidad.
Los textos e imágenes se editan desde el admin; el código decide dónde y cuándo aparecen.
| Indicador | Antes | Después | Contexto |
|---|---|---|---|
| Newsletter en móvil | Tras 4 bloques | Al final del artículo | sin duplicar |
| CTAs | Manuales | 5 presets + reglas | 4 niveles de prioridad |
| Casos de cliente con salida | 0 | Todos | 3 relacionados |
| Atribución del CRM | — | Conservada | cookie de seguimiento |
Con page builders, las funciones «de manual» a menudo no se comportan como dice la documentación. Pruebo cada condición en el contexto real de renderizado.
Con el embed estándar no es fiable. La alternativa robusta es enviar a la API desde un markup propio.
Por eso van con reglas: nunca en posts cortos, nunca al principio y siempre en un corte natural.
Sí: textos, enlaces e imágenes desde el admin.
Si ya tienes un WordPress en producción, reviso el contexto y te digo con honestidad si lo que necesitas es desarrollo, SEO técnico, rendimiento o automatización.
Empezar un proyecto