- 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
12345678// 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
1234567891011121314151617181920212223242526272829303132333435363738394041424344/**
* 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
);
}
}