Hace unas semanas me llegó una consulta de un cliente que llevaba tiempo gestionando su portfolio en WordPress. Tenía una sección personalizada de Portfolio con decenas de entradas, y al final de cada una de ellas añadía manualmente el shortcode de un formulario de contacto con Contact Form 7.
El problema, como suele pasar con los procesos manuales repetitivos, es que los errores se acumulan sin que uno se dé cuenta.
El cliente gestionaba su web en dos idiomas: catalán y castellano. Tenía dos formularios de contacto distintos, uno para cada idioma, y los añadía a mano dentro del contenido de cada entrada del portfolio.
El resultado, con el tiempo, fue el siguiente:
• En algunas entradas en castellano aparecía el formulario en catalán, y viceversa.
• Varios formularios habían sido eliminados en algún momento, pero sus shortcodes seguían presentes en el contenido. WordPress, en ese caso, muestra un mensaje de error: «Este formulario no existe» o «Formulario no encontrado».
• El cliente tenía que recordar, entrada por entrada, cuál de los dos shortcodes debía pegar, lo cual era una fuente constante de confusión.
Todo esto no es culpa del cliente. Es el resultado natural de delegar en procesos manuales algo que debería estar automatizado.
En lugar de depender de que el cliente introduzca el shortcode correcto cada vez, la solución es incluir la lógica directamente en el template de PHP de la entrada de portfolio. Así, el formulario aparece siempre de forma automática, sin que el cliente tenga que hacer nada.
El código detecta el idioma activo de la página y muestra el formulario correspondiente.
Es compatible con los plugins de traducción más habituales: WPML, Polylang y el sistema de idiomas nativo de WordPress.
<?php
// Detectar idioma actual (compatible con WPML, Polylang y WordPress nativo)
function get_cf7_shortcode_by_lang() {
$lang = '';
// WPML
if ( defined('ICL_LANGUAGE_CODE') ) {
$lang = ICL_LANGUAGE_CODE;
}
// Polylang
elseif ( function_exists('pll_current_language') ) {
$lang = pll_current_language();
}
// WordPress nativo (locale: ca, ca_ES, es_ES, es, etc.)
else {
$locale = get_locale();
$lang = substr($locale, 0, 2);
}
if ( $lang === 'ca' ) {
return '[contact-form-7 id="dcd83fa" title="contacte"]';
} elseif ( $lang === 'es' ) {
return '[contact-form-7 id="d9829b1" title="contacto"]';
}
// Fallback: castellano por defecto
return '[contact-form-7 id="d9829b1" title="contacto"]';
}
?>
El siguiente código se añade directamente en el archivo template de PHP de la entrada de portfolio. Su función es detectar automáticamente el idioma en el que el visitante está viendo la página y mostrar el formulario de contacto correcto en cada caso, sin que el cliente tenga que hacer nada manualmente.
Primero se declara una variable $lang vacía que almacenará el código de idioma detectado.
A continuación se comprueban tres opciones en orden de prioridad para detectar el idioma activo:
ICL_LANGUAGE_CODE que este plugin define automáticamente.pll_current_language() que devuelve el idioma actual.get_locale(), que devuelve valores como ca_ES o es_ES. Con substr(..., 0, 2) se extraen solo los dos primeros caracteres (ca o es), que es lo que nos interesa.Finalmente, una vez conocido el idioma, se evalúa:
ca (catalán), se renderiza el formulario de contacto en catalán mediante do_shortcode().De esta forma, aunque el cliente añada nuevas entradas al portfolio en el futuro, el formulario correcto aparecerá siempre de forma automática, sin riesgo de confusiones ni de shortcodes rotos.
Este tipo de automatizaciones pequeñas son las que marcan la diferencia en el mantenimiento diario de una web. Delegar en el cliente la responsabilidad de insertar el shortcode correcto en cada entrada es una fuente garantizada de errores. Mover esa lógica al template, donde pertenece, hace que la web funcione bien siempre, independientemente de lo que haga o deje de hacer el cliente en el editor.
Si gestionas portfolios o cualquier tipo de custom post type con formularios de contacto en webs multilingües, te recomiendo revisar si hay shortcodes insertados manualmente que puedan automatizarse de esta forma. El tiempo de implementación es mínimo y el ahorro en correcciones futuras, considerable.
¿Tienes este problema en tu web o uno parecido? Ofrezco consultoría WordPress. Contáctame y lo vemos juntos.
