WPML

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.

Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.

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

Francisco Javier Carazo Gil

Entradas recientes

¿Por qué falla Bizum en WooCommerce? 9 causas

Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…

hace % días

Plugin gratuito Redsys WordPress: qué revisar

Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…

hace % días

Qué necesito para activar CECA Online en mi web

¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…

hace % días

Cómo elegir una pasarela para suscripciones

Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…

hace % días

Plugin Bizum WordPress para cobrar con control

Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…

hace % días

Cómo aceptar CECA en reservas de WordPress

Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…

hace % días