web-dev-qa-db-fra.com

Récupérer les ID associés à un type de publication personnalisé lors de la traduction avec WPML?

J'ai créé un type de message personnalisé (type de salle). Maintenant, ces types de chambre ont un identifiant post 272 (chambre simple en suédois) et 350 (chambre double en suédois) je l’ai rendue traduisible (avec WPML) et créée en anglais. Lorsque je crée de nouveaux types de chambre avec différentes langues (anglais), ils obtiennent d'autres identifiants: 405 (chambre simple) et 470 (chambre double).

Je veux vérifier certaines choses dans la base de données et je fais la comparaison avec le roomtype-id, par exemple single room.

Quelque chose comme ceci:

//Check single room (both languages)
if ( $roomtype_id == 272 || $roomtype == 405 ) {
    //do action
}

//Check double room (both languages)
if ( $roomtype-id = 350 || $roomtype_id == 470 ) {
    //do action
}

Comment puis-je récupérer l'ID associé au type personnalisé roomtype indépendamment du langage?

UPDATE: Si quelqu'un rencontre un problème similaire/problème:

J'ai utilisé apply_filters ('wpml_object_id', $ form_data ['roomtype_id'], 'bookitall_roomtypes', false, 'sv'); obtenir l'identifiant du type de chambre en suédois pour le récupérer et le sauvegarder :-) De cette façon, je n'ai pas eu à faire la comparaison entre les différentes langues.

J'aurais pu utiliser la taxonomie mais, en réalité, cela a semé la confusion dans l'administration, ce serait comme avoir un type de chambre puis une catégorie de type de chambre où la catégorie de type de chambre indiquait quel type de chambre il s'agissait. Dans de nombreux cas, ce serait formidable, mais pas dans ce cas. WPML n'a pas montré la traduction de la taxonomie partout où je m'attendais (peut-être que c'était à propos de mon codage, je n'ai pas creusé plus profond). Mais merci pour l'aide!!!

Merci pour votre aide et donner des alternatives !!!

REMARQUE: je ne donne pas une réponse complète à votre question, mais j'essaie de vous donner des extraits qui pourraient aider dans un projet basé sur WPML.

J'ai utilisé cette fonction:

function get_the_translated_ID($id){
   if (!class_exists('sitepress')
    return $id;

  global $sitepress;
  $type=get_post_type($id);
  return icl_object_id( $id, $type, false, $sitepress->get_default_language());
}

Cela permet, par exemple, de rechercher les valeurs custom_meta de la publication d'origine au lieu des traductions.

Exemple en boucle:

$color = get_post_meta( get_the_translated_ID(get_the_ID() ), 'room_color',true);

Un autre moyen utile est de mettre à jour des méta personnalisés (ceux qui doivent être considérés comme indépendants de la langue) dans toutes les traductions lors de la mise à jour d'un article dans une langue:

function bulk_CF_update($post_id){
  if (!class_exists('sitepress')
    return;

  $thisPost=get_post($post_id);
  $allmeta=get_post_meta($post_id); // grab all custom meta fields of the post
  $toUnset = array("CF_1","CF_2","CF_3"); // exclude the CF you want to keep 'per-language'
  foreach($toUnset as $unset)
    unset($allmeta[$unset]);

  if($thisPost->post_type=="roomtype"){ // do it only for one or more specific cpt
    $trid = $sitepress->get_element_trid($thisPost->ID,'post_roomtype'); //note the prefix 'post_' has to be added to your cpt slug
    $translations = $sitepress->get_element_translations($trid);
    foreach($translations as $translation){
      foreach($allmeta as $meta=>$val){
        if(count($val)==1) //we're only managing single values
        update_post_meta($translation->element_id, $meta, $val[0]);
      }
    }
  }
}
add_action( 'save_post', 'bulk_CF_update',10,1);

J'espère que ça peut aider

3
Andrea Somovigo