Il s'agit du forum d'assistance technique de WPML, le plug-in multilingue pour WordPress.

Il est accessible à tous, toutefois seuls les clients de WPML peuvent y publier leurs messages. L'équipe de WPML répond aux messages du forum 6 jours sur 7, 22 heures sur 24.

This thread is resolved. Here is a description of the problem and solution.

Problem:
L'utilisateur voudrait un moyen programmatique pour récupérer l'id d'une traduction de catégorie

Solution:
Utiliser le filtre WPML "wpml_object_id", par exemple:

// Retournera l'ID de catégorie dans la langue actuelle pour l'ID de catégorie 4. Si la traduction est manquante, l'original sera renvoyé (ici: ID de catégorie 4)
echo apply_filters( 'wpml_object_id', 4, 'category', TRUE  );

Relevant Documentation:
https://wpml.org/documentation/support/wpml-coding-api/wpml-hooks-reference/

This topic contains 2 réponses, has 2 participants.

Last updated by marionL-6 il y a 1 mois et 2 semaines.

Assigned support staff: Jamal.

Auteur Messages
août 27, 2019 à 9:05 #4464075

marionL-6

Bonjour,

Merci pour cette précision. Depuis j'ai pu avancer pour la mise à jour du contenu traduit. J'ai suivi les exemples trouvés sur votre support et j'arrive à quelques chose qui fonctionne : Les contenu du custom post type (property) est bien traduit en anglais et italien. Cependant, lorsque j'édite un des custom post type via le backoffice, j'ai un comportement étrange. alors que j'en avais deux ils se dédoubles. Alors que j'en ai deux dans la liste, j'en ai 4.. et j'ai pleins d'erreurs lorsque je tente d'en supprimer oui d'en modifier un. Je suis obligé d'aller dans la base pour supprimer tous les custom post field property et ainsi je n'ai plus d'erreurs :

DELETE FROM NWM5ODposts WHERE post_type='property';
DELETE FROM NWM5ODpostmeta WHERE post_id NOT IN (SELECT id FROM NWM5ODposts);
DELETE FROM NWM5ODterm_relationships WHERE object_id NOT IN (SELECT id FROM NWM5ODposts)

Ci dessous le code que j'ai adapté et que j'utilise :

//TRADUCTION LANGUE
$langs = array(array('en','libelle_langue1','descriptif_langue1',1),array('it','libelle_langue2','descriptif_langue2',3));
// get the language info of the original post
// https://wpml.org/wpml-hook/wpml_element_language_details/
$get_language_args = array('element_id' => $post_id, 'element_type' => 'property' );
$original_post_language_info = apply_filters( 'wpml_element_language_details', null, $get_language_args );
// https://wpml.org/wpml-hook/wpml_element_type/
$wpml_element_type = apply_filters( 'wpml_element_type', 'property' );

foreach($langs as $lang){
$translation = array(
'post_title' => get_post_meta($post_id, $lang[1], true),
'post_content' => get_post_meta($post_id, $lang[2], true),
'post_status' => 'publish',
'post_type' => 'property',
'post_author' => 1,
'post_category' => array($lang[3]) // NOTE: this is the translated category id!
);
$propertyId = apply_filters( 'wpml_object_id', $post_id , 'property', FALSE,$lang[0]);
if($propertyId == 0){
$lang_post_id = wp_insert_post( $translation );
if( $lang_post_id ){
$set_language_args = array(
'element_id' => $lang_post_id,
'element_type' => $wpml_element_type,
'trid' => $original_post_language_info->trid,
'language_code' => $lang[0],
'source_language_code' => $original_post_language_info->language_code
);
do_action( 'wpml_set_element_language_details', $set_language_args );
}
}else{
$translation['ID'] = $lang_post_id;
wp_update_post( $translation );
}
}

Je pense qu'il y a peut être un lien avec cette ligne où j'ignore quoi mettre exactement :
'post_category' => array($lang[3]) // NOTE: this is the translated category id!

Qu'est ce que : translated category id ? Existe-t-il une méthode pour récupérer les id des différentes langues ?

Sinon avez vous eu déjà des comportements similaires a ce que je décris ?

D'avance merci,

Cordialement

août 27, 2019 à 9:12 #4464107

Jamal
Supporter

Languages: Anglais (English ) Français (Français )

Timezone: Africa/Casablanca (GMT+01:00)

Bonjour,

Je ne suis pas très comfortable avec le code, mais je soupçonne que la condition if($propertyId == 0){ est responsable pour la duplication des posts. Je ne suis pas sur, vous aurez besoin d'investiguer les cas.
En tout cas "wpml_object_id" retourne "NULL" si aucune traduction n'existe pour l'id spécifié, j'imagine que vous devez gérer ce cas.

Pour vos autres questions:
Qu'est ce que : translated category id ? Existe-t-il une méthode pour récupérer les id des différentes langues ?
Vous pouvez utiliser le même filtre "wpml_object_id", par exemple:

// Retournera l'ID de catégorie dans la langue actuelle pour l'ID de catégorie 4. Si la traduction est manquante, l'original sera renvoyé (ici: ID de catégorie 4)
echo apply_filters( 'wpml_object_id', 4, 'category', TRUE  );

Sinon avez vous eu déjà des comportements similaires a ce que je décris ?
Non, j'en ai pas rencontré de cas similaires.

Je reste à votre disposition.

Cordialement,
Jamal
Assistance WPML

août 30, 2019 à 7:59 #4485193

marionL-6

My issue is resolved now. Thank you!