Saltar al contenido Saltar a la barra lateral

Este hilo está resuelto. Aquí tienes una descripción del problema y la solución.

Problema:
El cliente necesita que WPML resuelva y muestre la traducción correcta cuando se utiliza el slug del idioma original en el dominio del idioma secundario.
Solución:
No existe una configuración nativa en WPML para este comportamiento. Se requiere una solución personalizada que implemente una lógica de fallback para redirigir (301) cuando se accede a un slug del idioma original en el dominio del idioma secundario. Los pasos son:
1. Detectar el slug solicitado.
2. Buscar si ese slug existe en el idioma original (ES).
3. Si existe, obtener el ID de la traducción en el idioma secundario (EN) y hacer una redirección 301 al permalink canónico en EN.
Este enfoque es consistente con SEO, evita contenido duplicado y no interfiere con la resolución estándar de WordPress/WPML. Los hooks útiles incluyen

template_redirect

y varios de WPML como

wpml_object_id

,

wpml_element_trid

, y

wpml_get_element_translations

.
Aquí tienes un ejemplo de código que puedes adaptar y probar:

add_action('template_redirect', function () {<br />    if (!is_404()) return;<br />    $requested = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');<br />    if ($requested === '') return;<br />    $default_lang = 'es';<br />    $current_lang = apply_filters('wpml_current_language', null);<br />    if ($current_lang === $default_lang) return;<br />    do_action('wpml_switch_language', $default_lang);<br />    $post = get_page_by_path($requested, OBJECT, ['post', 'page']);<br />    do_action('wpml_switch_language', $current_lang);<br />    if (!$post) return;<br />    $translated_id = apply_filters('wpml_object_id', $post->ID, $post->post_type, false, $current_lang);<br />    if ($translated_id) {<br />        wp_redirect(get_permalink($translated_id), 301);<br />        exit;<br />    }<br />});

Para más detalles sobre los hooks de WPML, visita WPML Hooks Reference.
Si esta solución no resuelve tu problema o si la información parece desactualizada, te recomendamos abrir un nuevo ticket de soporte en el foro de soporte de WPML. También es aconsejable revisar los problemas conocidos y confirmar que tienes instaladas las últimas versiones de los temas y plugins.

Este es el foro de soporte técnico de WPML, el plugin multilingüe de WordPress.

Todas las personas pueden leerlo pero solo los clientes de WPML pueden ingresar comentarios. El equipo de WPML responde en los foros 6 días a la semana, 22 horas por día.

Etiquetado: 

Este tema contiene 1 respuesta, tiene 0 voces.

Última actualización por miguelG-38 hace 3 meses, 1 semana.

Asistido por: Otto.

Autor Publicaciones
enero 21, 2026 a las 17:36 #17751656

miguelG-38

Hola, equipo de soporte de WPML,

Estamos migrando un sitio web a WPML y necesitamos replicar un comportamiento específico que teníamos en nuestra solución anterior. Actualmente, tenemos configurado WPML con la opción de "Un dominio distinto por idioma" (ej. cultura10.com para español y en.cultura10.com para inglés).

Nuestro objetivo es que WPML sea capaz de resolver y mostrar la traducción correcta incluso si el usuario utiliza el slug del idioma original en el dominio del idioma secundario.

Ejemplo de comportamiento deseado:

Idioma Original (ES): enlace oculto → Muestra el artículo en español (comportamiento estándar).

Idioma Secundario (EN) con slug traducido: enlace oculto → Muestra el artículo en inglés (comportamiento estándar).

Idioma Secundario (EN) con slug original: enlace oculto → Deseamos que WPML identifique la traducción asociada a ese slug y muestre el contenido en inglés.

Nuestra pregunta es: ¿Existe alguna configuración nativa en WPML, o algún filtro/hook (como wpml_alternate_location o similares), que permita que el motor de WordPress resuelva la entrada correcta basándose en el slug original cuando el idioma ya está definido por el subdominio?

Agradecemos de antemano su orientación técnica para lograr este comportamiento durante nuestra migración.

enero 21, 2026 a las 18:09 #17751686

Otto

Hola,

No, no hay una configuración que permita tal comportamiento.

Necesitarás una solución usando código a medida.

El código tendría que:
- Implementar una lógica de fallback solo cuando la URL resulte en 404 en el dominio EN.
- Redirigir (301) cuando llegue un slug “del otro idioma” al dominio del idioma secundario (recomendado)

Entonces:
1. Detectar el slug solicitado (/slug-en-espanol/).
2. Buscar si ese slug existe en el idioma original (ES).
3. Si existe, obtener el ID de la traducción en EN y hacer 301 al permalink EN canónico (/slug-in-english/).

Ventajas: consistente con SEO, evita duplicados, no “rompe” la resolución estándar de WordPress/WPML.

Los hooks que te pueden ser útiles serían:
WP:
Hook template_redirect (o similar) y comprobar is_404().

WPML:
WPML API útil: wpml_object_id / wpml_element_trid / wpml_get_element_translations

Te muestro un ejemplo orientativo. Tendrás que adaptarlo y probarlo en un entorno de desarrollo:

add_action('template_redirect', function () {
    if (!is_404()) return;

    $requested = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
    if ($requested === '') return;

    // Idiomas: ajustad a vuestros códigos reales
    $default_lang = 'es';
    $current_lang = apply_filters('wpml_current_language', null);

    // Evitar bucles
    if ($current_lang === $default_lang) return;

    // 1) Buscar el post en ES por el slug solicitado
    do_action('wpml_switch_language', $default_lang);

    $post = get_page_by_path($requested, OBJECT, ['post', 'page']); // añadir CPTs si aplica

    // 2) Volver al idioma actual
    do_action('wpml_switch_language', $current_lang);

    if (!$post) return;

    // 3) Obtener traducción en el idioma actual (EN)
    $translated_id = apply_filters('wpml_object_id', $post->ID, $post->post_type, false, $current_lang);

    if ($translated_id) {
        wp_redirect(get_permalink($translated_id), 301);
        exit;
    }
});

Aquí tienes documentados los hooks disponibles de WPML:
https://wpml.org/documentation/support/wpml-coding-api/wpml-hooks-reference/#top

Espero que esto te oriente en la dirección correcta.

Saludos cordiales,
Otto

enero 22, 2026 a las 15:44 #17754624

miguelG-38

Gracias, tu sugerencia nos ayudó a implementar una solución, finalmente nos enganchamos a "pre_get_posts" para evitar la 301.

Muchas gracias.