Originalsprachen-Beitrags-ID für WPML-übersetzte Beiträge ermitteln
Problem:
Du hast einen Beitrag, der mit WPML in mehrere Sprachen übersetzt wurde. Du möchtest die ID des Originalbeitrags herausfinden, d.h. des äquivalenten Beitrags in der Quellsprache.
Lösung
Soweit ich weiß, gibt es dafür keine WPML-API. Du kannst jedoch $wpdb verwenden, um die Datenbank direkt abzufragen.
Hier ist die SQL-Anweisung:
SELECT trans2.element_id
FROM wp_icl_translations AS trans1
INNER JOIN wp_icl_translations AS trans2
ON trans2.trid = trans1.trid
WHERE trans1.element_id = #myid#
AND trans2.source_language_code IS NULLswobei #myid# die ID deines aktuellen (möglicherweise übersetzten) Beitrags ist.
Der Algorithmus funktioniert so:
- Finde die Übersetzungs-ID (Spalte
trid) für den aktuellen Beitrag, indem du die Zeile für die gegebene Beitrags-ID (Spalteelement_id) auswählst - Finde alle Zeilen mit derselben Übersetzungs-ID
- Wähle nur die Zeile, in der die Quellsprache
NULList — dies ist der Originalbeitrag.
Du kannst es so verwenden:
global $wpdb;
$orig_lang_id = $wpdb->get_var("SELECT trans2.element_id FROM wp_icl_translations AS trans1 INNER JOIN wp_icl_translations AS trans2 ON trans2.trid = trans1.trid WHERE trans1.element_id = ".get_the_ID()." AND trans2.source_language_code IS NULL");und dann $orig_lang_id verwenden, wo erforderlich. Beachte, dass $orig_lang_id NULL ist, wenn die Abfrage fehlschlägt. Der Hauptgrund für das Fehlschlagen der Abfrage ist, dass es keinen Eintrag für die gegebene Beitrags-ID in der Tabelle wp_icl_translations gibt.
Wenn der aktuelle Beitrag der Originalbeitrag ist, ist $orig_lang_id gleich get_the_ID(), d.h. die aktuelle ID des Beitrags.
In meinem Test funktioniert der Code weiterhin (d.h. liefert die richtige Beitrags-ID) auch beim Erstellen eines brandneuen Eintrags ohne vorhandene Übersetzungen.