Sauter la navigation
Mis à jour
juin 7, 2024

De nombreux thèmes affichent les articles, les pages et les catégories de manière spéciale, généralement sur la base d’identifiants. Par exemple, une section « Articles en vedette » sur la page d’accueil, ou des catégories mises en évidence.

Dans certains cas, ces identifiants sont codés en dur dans le PHP du thème et dans d’autres, l’utilisateur les sélectionne dans l’écran de configuration du thème.

Pour s’afficher correctement, le thème doit sélectionner les identifiants par langue. Dans WPML, les ID des articles, des pages, des catégories et des balises changent lorsque la langue change, de sorte que le thème doit utiliser les ID corrects de la langue active.

WPML propose deux options pour y parvenir.

Vous pouvez soit activer l’ajustement automatique de l’ID, soit utiliser manuellement le wpml_object_id dans votre thème.

Quelle option utiliser ?

L’ajustement automatique de l’ID ne nécessite aucune modification de votre code. Vous pouvez l’utiliser avec n’importe quel thème et tout « fonctionne ». Le revers de la médaille est une légère augmentation du temps de traitement et de l’accès à la base de données, car WPML s’accroche à de nombreuses fonctions et vérifie que le résultat est correct pour la langue active.

L’ajustement manuel de l’ID à l’aide de la fonction wpml_object_id permet d’obtenir les mêmes résultats et peut être plus efficace en termes de traitement. Cependant, elle nécessite un codage important dans le thème.

Si vous construisez un thème à partir de zéro, vous devriez envisager d’utiliser wpml_object_id pour le faire manuellement. Si vous commencez avec un thème existant, le piratage et la modification du thème peuvent ne pas être réalistes et l’ajustement automatisé de l’identifiant est probablement la meilleure solution.

En tout état de cause, l’utilisation d’une extension de mise en cache permet de réduire à néant l’impact de cette opération sur les performances. La mise en cache est toujours recommandée pour les sites de toute taille. WPML fonctionne parfaitement avec WP Super Cache et W3 Total Cache (que nous utilisons également sur différents sites).

1) Ajustement automatique des identifiants

WPML peut s’accrocher aux fonctions de l’API de WordPress, détecter le chargement d’éléments spécifiques et ajuster les identifiants afin que les résultats soient adaptés à la langue active.

Cette fonctionnalité est activée par défaut et accessible via WPMLLangues:

Ajuster les identifiants pour une fonctionnalité multilingue

Cela ajustera automatiquement tous les ID et peut être utilisé dans n’importe quel thème WordPress qui utilise l’API correctement (presque tous les thèmes que vous pouvez trouver).

2) Manuellement, en utilisant la fonction wpml_object_id

Si l’ajustement automatique de l’ID est désactivé, vous pouvez également utiliser la fonction wpml_object_id pour obtenir le même résultat manuellement.

apply_filters( ‘wpml_object_id’, int $element_id, string $element_type, bool $return_original_if_missing, mixed $ulanguage_code )

Note : Pour les versions de WPML >=3.2 veuillez utiliser le crochet de filtre wpml_object_id. Depuis WPML 3.3, la fonction icl_object_id est considérée comme obsolète et a été complètement supprimée dans la version 3.3.

Exemple d’utilisation

echo apply_filters( 'wpml_object_id', 4, 'category', TRUE  );

Renvoyez l’ID de la catégorie dans la langue actuelle pour l’ID de la catégorie 4. Si la traduction est manquante, il renvoie l’original (ici : catégorie ID 4).

Veuillez consulter notre page API pour voir d’autres exemples et obtenir des informations plus détaillées sur son utilisation.

Traduire des tableaux d’identifiants

Il arrive souvent que vous deviez convertir un tableau entier d’identifiants d’objets (le plus souvent des identifiants de catégories). Pour ce faire, vous pouvez utiliser la fonction suivante :

function lang_object_ids($object_id, $type) {
    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;
    } else {
  return apply_filters( 'wpml_object_id', $object_id, $type, true, $current_language );
 }
}

Cette fonction accepte également le type d’objet comme argument.

Par exemple, pour obtenir un tableau d’ID de catégories pour les catégories 1, 3 et 6, nous appellerons :

lang_object_ids(array(1,3,6),'category')

Affichage des éléments de la page dans différentes langues

Le paramètre facultatif ulanguage_code permet de mélanger des éléments de page dans différentes langues.

Par exemple, si vous avez une galerie d’images et que vous ne souhaitez pas dupliquer les images par langue, procédez comme suit :

  1. Obtenez l’ID de la page dans la langue dans laquelle la galerie existe.
  2. Bouclez sur les images de cette page et affichez-les.