Cómo obtener las traducciones de una entrada en WPML

De todos los sistemas que existen para poder ofrecer contenido multiidioma en WordPress, WPML es una solución más completa y sencilla, especialmente en proyectos de tamaño pequeño o mediano. Su integración con prácticamente cualquier tema o plugin popular lo convierte en una herramienta extremadamente versátil, que no requiere conocimientos técnicos avanzados para empezar a funcionar. Permite traducir entradas, páginas, menús, taxonomías, custom post types que hayas creado o cadenas de texto del tema o plugins, todo desde una interfaz intuitiva dentro del propio panel de WordPress.

Además, WPML ofrece un excelente equilibrio entre funcionalidades y facilidad de uso. A diferencia de otras opciones más complejas o enfocadas a proyectos empresariales, WPML (que por cierto viene de WordPress MultiLingual) no abruma al usuario con configuraciones innecesarias, pero sigue permitiendo una traducción profesional, ya sea manual o mediante servicios automáticos o de traductores externos. Su instalación es sencilla y directa y no depende de servicios externos o de arquitecturas algo más complejas como pueda ser una red WordPress.

Por eso mismo es una solución muy popular y me encuentro con bastantes proyectos que lo usan, así que eso unido a su potente API en PHP (que por cierto tiene algunas rarezas en comparación con las API de otros plugins similares), trabajo mucho con sus funciones y aquí os traigo un pequeño código que he estado usando muy a menudo últimamente.

Obtener el ID de las traducciones de un contenido en WordPress

Imaginemos que tenemos un contenido en WordPress, de cualquier tipo, y tenemos su ID y su post_type, y queremos saber las traducciones de ese contenido para hacer cualquier operación sobre ellas: mostrar accesos directos a las mismas, actualizar algún dato en todos a la vez o la operación que necesitéis.

Pues os dejo el código y ahora os lo explico:

$element_type = apply_filters( 'wpml_element_type', 'post_' . get_post_type($post_id) );

$trid = apply_filters( 'wpml_element_trid', null, $post_id, $element_type );

$translations = wpml_get_element_translations( $trid );

foreach ( $translations as $lang_code => $translation ) {
    echo 'Idioma: ' . $lang_code . ' → Post ID: ' . $translation->element_id . '<br>';
}
  • Se supone que tenemos ya el post_id
  • Obtenemos primero el tipo de elemento, que no es el post_type directamente sino una combinación que usa WPML para poder distinguir entre datos de tipo post, taxonomías o cualquier otro tipo
  • Con ese tipo de elemento, podemos pedir el trid del post, si os fijáis en vez de llamar a una función con parámetros se llama a un hook wpml_element_trid, le pasamos un nulo como primer elemento, el que devolvería, el post_id y el tipo de elemento
  • Con este trid, ya obtenemos las traducciones y las recorremos

Y os preguntaréis qué es el trid (que viene de translation identifier). El trid identifica que varios posts (o páginas, o términos…) son traducciones entre sí. Todos los idiomas que son versiones del mismo contenido comparten el mismo trid.

Si queréis verlo gráficamente, sería algo así:

IdiomaPost IDTítulotrid
es101«Nosotros»50
en205«About Us»50
fr309«À propos de nous»50

Esta información realmente se guarda en la base de datos en la tabla wp_icl_translations (o con el prefijo cambiado si está cambiado en vuestra instalación) que tiene esta forma:

IDelement_typeelement_idtridlanguage_codesource_language_code
1post_post10150esNULL
2post_post20550enes
3post_post30950fres

Así a través de esta tabla se relaciona esta información y WPML sabe qué datos mostrar al usuario cuando está visitando la web.

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

0

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito