it-swarm.com.de

IDs abrufen, die einem benutzerdefinierten Beitragstyp zugeordnet sind, wenn sie mit WPML übersetzt werden?

Ich habe einen benutzerdefinierten Beitragstyp (Raumtyp) erstellt. Jetzt haben diese Zimmertypen die Post-ID 272 (Einzelzimmer auf Schwedisch) und 350 (Doppelzimmer auf Schwedisch) Ich habe es übersetzbar gemacht (mit WPML) und in Englisch erstellt. Wenn ich neue Zimmertypen mit verschiedenen Sprachen (Englisch) erstelle, erhalten sie andere IDs: wie 405 (Einzelzimmer) und 470 (Doppelzimmer)

Ich möchte einige Dinge in db überprüfen und einen Vergleich mit der Zimmertyp-ID durchführen, zum Beispiel Einzelzimmer.

Etwas in der Art:

//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
}

Wie kann ich die IDs mit Zimmertyp benutzerdefinierten Typ unabhängig von der Sprache abrufen?

UPDATE: Wenn jemand auf ein ähnliches Problem stößt/Problem:

Ich habe apply_filters ('wpml_object_id', $ form_data ['roomtype_id'], 'bookitall_roomtypes', false, 'sv') verwendet. um die id des zimmertyps auf schwedisch zum abrufen und speichern zu bekommen :-) auf diese weise musste ich gar nicht zwischen verschiedenen sprachen vergleichen.

Ich hätte Taxonomie verwenden können, aber tatsächlich wurde das im Admin verwirrend. Es wäre, als hätte man einen Zimmertyp und dann eine Zimmertypkategorie, in der die Zimmertypkategorie angibt, welcher Zimmertyp es ist. In vielen Fällen wäre das großartig, aber nicht in diesem Fall. WPML zeigte die Übersetzung der Taxonomie nicht überall an, wo ich es erwartet hatte (Vielleicht lag es an meiner Codierung, ich habe nicht tiefer gegraben). Aber danke für die Hilfe !!!

Vielen Dank für Ihre Hilfe und Alternativen geben !!!

ANMERKUNG: Ich gebe keine vollständige Antwort auf Ihre Frage, sondern versuche, einige Ausschnitte zu geben, die in WPML-basierten Projekten hilfreich sein können.

Ich habe diese Funktion benutzt:

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());
}

Dies ermöglicht beispielsweise die Suche nach custom_meta-Werten des ursprünglichen Posts anstelle der Übersetzungen.

Beispiel in einer Schleife:

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

Ein weiterer nützlicher Punkt ist das Aktualisieren einiger benutzerdefinierter Metas (die als sprachunabhängig angesehen werden müssen) in allen Übersetzungen, wenn ein Beitrag in einer Sprache aktualisiert wird:

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);

Hoffe, es kann helfen

3
Andrea Somovigo