- availability:
-
WPML Version: 3.2
- description:
-
Returns an element’s ID in the current language or in another specified language.
By default, WPML automatically adjusts IDs to display all theme elements in the current language. This setting is turned “on” by default under the WPML → Languages page. But, if you’re building your own theme from scratch, use the wpml_object_id function to manually adjust IDs. This approach is more efficient in terms of processing.
- type:
- filter
- category:
- Retrieving Localized Content
- parameters:
-
apply_filters( 'wpml_object_id', int $element_id, string $element_type, bool $return_original_if_missing, mixed $ulanguage_code )
- $element_id
- (int) (Required) The ID of the post type (post, page, attachment, custom post) or taxonomy term (tag, category, custom taxonomy) to filter
- $element_type
- (string) (Required) The type of element the ID belongs to. Can be post, page, {custom post type key}, nav_menu, nav_menu_item, category, post_tag, {custom taxonomy key}
- $return_original_if_missing
- (bool) (Optional) If set to true it will always return a value (the original value, if translation is missing) Default is FALSE
- $ulanguage_code
- (mixed) (Optional) If missing or NULL, it will use the current language. If set to a language code, it will return a translation for that language code or the original if the translation is missing and $return_original_if_missing is set to TRUE. Default is NULL
- hook example usage:
-
Some basic examples
// 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 categoy 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' );
A more advanced example
/** * Returns the translated object ID(post_type or term) or original if missing * * @param $object_id integer|string|array The ID/s of the objects to check and return * @param $type the object type: post, page, {custom post type name}, nav_menu, nav_menu_item, category, tag etc. * @return string or array of object ids */ function my_translate_object_id( $object_id, $type ) { $current_language= apply_filters( 'wpml_current_language', NULL ); // if array if( is_array( $object_id ) ){ $translated_object_ids = array(); foreach ( $object_id as $id ) { $translated_object_ids[] = apply_filters( 'wpml_object_id', $id, $type, true, $current_language ); } return $translated_object_ids; } // if string elseif( is_string( $object_id ) ) { // check if we have a comma separated ID string $is_comma_separated = strpos( $object_id,"," ); if( $is_comma_separated !== FALSE ) { // explode the comma to create an array of IDs $object_id = explode( ',', $object_id ); $translated_object_ids = array(); foreach ( $object_id as $id ) { $translated_object_ids[] = apply_filters ( 'wpml_object_id', $id, $type, true, $current_language ); } // make sure the output is a comma separated string (the same way it came in!) return implode ( ',', $translated_object_ids ); } // if we don't find a comma in the string then this is a single ID else { return apply_filters( 'wpml_object_id', intval( $object_id ), $type, true, $current_language ); } } // if int else { return apply_filters( 'wpml_object_id', $object_id, $type, true, $current_language ); } }