You can get other languages for a current post using several of WPML’s hooks. These hooks can help you get all other languages, a specific language, and current language of a post.
Getting other languages of a current post is a common way to build useful features for your site. For instance, you can build a custom language switcher with links to all the translations of the current post.
How can I get all other languages for a post?
You can get other languages of a post using three main hooks:
- wpml_element_type, which allows you to get the element type for a post type or taxonomy as saved in the database
- wpml_element_trid, which allows you to get the translation group ID (trid) of a translated element
- wpml_get_element_translations, which allows you to get the translations of an element using the trid and the element type
In this example, we will get the other languages of a product, however this method works for any post type.
$post_id = 47;
 
$type = apply_filters( 'wpml_element_type', get_post_type( $post_id ) );
$trid = apply_filters( 'wpml_element_trid', false, $post_id, $type );
 
$translations = apply_filters( 'wpml_get_element_translations', array(), $trid, $type );
foreach ( $translations as $lang => $translation ) {
	var_dump( $translation );
}
This will output something like:
class stdClass#4886 (8) {
  public $translation_id => string(2) "60"
  public $language_code => string(2) "en"
  public $element_id => string(2) "47"
  public $source_language_code => NULL
  public $element_type => string(12) "post_product"
  public $original => string(1) "1"
  public $post_title => string(13) "Example  Product"
  public $post_status => string(7) "publish"
}
 
class stdClass#4877 (8) {
  public $translation_id => string(2) "61"
  public $language_code => string(2) "fr"
  public $element_id => string(2) "48"
  public $source_language_code => string(2) "en"
  public $element_type => string(12) "post_product"
  public $original => string(1) "0"
  public $post_title => string(15) "Exemple de produit"
  public $post_status => string(7) "publish"
}
You can see more information about the meaning of each field in our documentation about WPML’s tables.
How can I get a specific language for a post?
If you know the target language you want to get information for, you can convert the ID using the wpml_object_id hook. For example:
// will return the post ID in the current language for post ID 1 echo apply_filters( 'wpml_object_id', 1, 'post' ); // will return the category ID in the current language for category ID 4. If the translation is missing it will return the original (here: category ID 4) echo apply_filters( 'wpml_object_id', 4, 'category', TRUE ); // will return the German attachment ID for attachment ID 25. If the translation is missing it will return NULL echo apply_filters( 'wpml_object_id', 25, 'attachment', FALSE, 'de' );
Once you have the post ID for the specific target language, you can use it to get any information about that post.
How can I get the current language of a post?
Read more about how to get the current language with WPML.