Salta la navigazione

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.