Navigation überspringen

Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.

Problem:
Der Kunde versucht, einen Fehler zu beheben, bei dem Bewertungen manchmal in der falschen Sprache auf einer Produktseite angezeigt werden. Der Fehler tritt auf, wenn der Filter

apply_filters( 'wpml_translate_single_string', 'xyz',  'wcml-reviews',  'product-1370-review-29096', 'fr' );

verwendet wird, um Review-Texte beim Seitenaufruf zu rendern. Die Texte werden nicht immer in die aktuelle Frontend-Sprache übersetzt, obwohl sie über die REST-API korrekt zurückgegeben werden.

Solution:
Wir haben festgestellt, dass der Hook wie erwartet funktioniert und das Problem wahrscheinlich mit dem benutzerdefinierten Code des Kunden zusammenhängt. Wir empfehlen, sich ein ähnliches Problem anzusehen, das in einem anderen Ticket behandelt wurde: https://wpml.org/forums/topic/retrieving-product-reviews-in-all-languages-via-get_comments-no-longer-works/#post-12973947. Da das Problem über den Supportbereich für WPML und direkt verbundene Plugins hinausgeht, können wir keine weitere Hilfe anbieten. Für weiterführende Dienste empfehlen wir, einen unserer Vertragspartner zu kontaktieren: https://wpml.org/contractors/.

Sollte diese Lösung nicht relevant erscheinen, bitten wir darum, ein neues Support-Ticket zu eröffnen: WPML-Supportforum.

0% of people find this useful.

Dies ist das technische Support-Forum für WPML – das mehrsprachige WordPress-Plugin.

Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.

Schlagwörter: 

Dieses Thema enthält 14 Antworten, hat 2 Stimmen.

Zuletzt aktualisiert von Lucas Vidal de Andrade Vor 11 Monaten, 1 Woche.

Assistiert von: Lucas Vidal de Andrade.

Verfasser Beiträge
Dezember 22, 2023 unter 6:53 pm #15121595

cons-2

Ich versuche: einen Fehler zu fixen.
Reviews werden unter Umständen in der falschen Sprache auf einer Produktseite angezeigt.

Wenn ich folgenden Code nutze, spuckt er manchmal unterschiedliche Werte aus.
Es scheint einen Fehler mit dem Filter zu geben.

apply_filters( 'wpml_translate_single_string', 'xyz',  'wcml-reviews',  'product-1370-review-29096', 'fr' );

Statt "xyz" nutze ich natürlich den original-string, der zu dem Review gehört.
Habe den hier entfernt, damit keine Rückschlüsse auf den Kunden/unseren Shop möglich sind.

Anwendungsbereich

Wir haben in der Review-Sektion von WooCommerce angepinnte Reviews.

Angepinnte Reviews werden direkt gerendert, wenn die Seite aufgerufen wird - so, wie es bei WooCommerce üblich ist.
Zudem haben wir Reviews, die anschließend über einen Button via REST-API (custom endpoint) nachgeladen werden können.

Nachladen via Button, damit bei einem normalen Seitenaufruf nicht Hunderte Reviews geladen werden, die eh niemand alle liest.

In beiden Fällen werden die Kommentare/Reviews ganz normal über get_comments() aufgerufen und das HTML über die normalen Funktionen von WooCommerce zusammengestellt.
Das funktioniert problemlos.

Wir hatten dazu früher schon einmal ein Ticket im Forum, mit dem wir die get_comments()-Abrufe gemeinsam erstellt und alle Probleme gelöst haben:
https://wpml.org/de/forums/topic/retrieving-product-reviews-in-all-languages-via-get_comments-no-longer-works/

Gerendert wird in beiden Fällen - Seitenaufruf direkt + REST-API - über klassische WooCommerce-Vorgehensweise.

apply_filters( 'woocommerce_product_review_list_args', array( 'callback' => 'woocommerce_comments' ) );

Wann tritt der Fehler auf

- Wenn das WooCommerce-Review-HTML beim Seitenaufruf zusammengestellt wird, dann kommt immer der Originalwert zurück. Der Review-Text wird niemals in die Sprache, die gerade im Frontend angezeigt wird, übersetzt.
- Wenn das WooCommerce-Review-HTML beim REST-API-Aufruf zusammengestellt wird, dann kommt immer der korrekte, übersetzte Review-Text zurück.

Wichtig: Wir sprechen über die Nutzung des oben gezeigten Filters.
Wenn ich eine stock-WooCommerce-Installation nutze, dann klappt die Review-Anzeige.
Okay.
Aber wenn ich individuell ein Review-Text manuell mit dem Filter übersetzen will, dann geht es nicht immer zuverlässig.
Darum geht mir hier.

Beispiel:

Die Originalsprache von dem Review ist DE.

Wenn ich auf der FR-Version der Produktseite in den Reviews bin, wird mir der deutsche Review-Text ausgegeben, obwohl ich den ganz oben gezeigten Filter im php-Template korrekt nutze.
Es scheint so, also würde die Übersetzung nicht abgerufen werden können.

Wenn ich auf der EN-Sprache der Produktseite in den Reviews bin und den gleichen Code (auch mit Sprachcode 'fr') nutze, wird mir der französische Text ausgegeben.

Es scheint derzeit nicht möglich zu sein, beim Seitenaufruf zu rendernde Review-Texte korrekt übersetzt mit dem Filter abzufragen.

Wenn wir den ganz oben gezeigten Code über die REST-API aus dem Frontend aufrufen - egal welche Sprache wir Frontend anzeigen - kommt immer der korrekte Text auf französisch zurück.

Es scheint so, als würde der Filter unter bestimmten Umständen andere Werte zurückgeben.
Das dürfte eigentlich nicht passieren.

Das betrifft übrigens auch individuelle Texte, z.B. Review-Title haben wir als post meta gespeichert und als eigens package in wpml string translation gespeichert. Dort das gleiche Problem mit dem Filter. Immer, wenn der Review-Text nicht übersetzt angezeigt wird, steht auch er Review-Title falsch da.

Wir haben das Phänomen mit zahlreichen Reviews getestet.
Immer das gleiche Muster.

Wenn wir ein Review direkt übersetzt anzeigen wollen im Frontend, dann klappt der Filter nicht.
Wenn wir ein Review über die REST-API (custom endpoint) aus dem Frontend abrufen, dann klappt der Filter.

Unterschiedliches Ergebnis - obwohl es exakt er gleiche PHP-Code ist.
Es ist sehr kurios.

Wie wurde getestet?
Ich habe den Fehler isoliert in woocommerce/single-product/review-meta.php mit hart kodierten Werten (string-value + package-name) getestet.

In dem php-Template habe ich data-Attribute zu bestehendem Kommentar-HTML hinzugefügt.

Dadurch war es mir möglich, das Ergebnis des hart kodierten Filters beim Seitenaufruf und beim REST-Request zu testen ohne die tatsächliche Ausgabe der Reviews zu beeinflussen.
Beide Situationen nutzen das gleiche WooCommerce-Template und damit auch den gleichen apply_filters-Code.

Zudem habe ich das verhalten mit mehreren Reviews ausprobiert.
Immer wieder das gleiche Muster.

Interessant ist auch: Wenn ich in Sprache EN Frontend bin und über den Filter (nur zum testen) die FR-Sprache abrufen will, dann kommt FR zurück.
Wenn ich auf der FR-Seite bin und FR abrufen will, dann kommt nicht FR zurück.

Umgedreht das gleiche Problem.

Es scheint so, als könnte der Filter die aktuell angesehene Frontend-Sprache nicht zurückgeben, sofern es sich um ein übersetztes Review handelt.
(Außer es wird über die REST-API gerendert. Da klappt es immer.)

Das Review existiert, die Übersetzungen existieren.
Übersetzungen können auch in anderen Kontexten korrekt mit dem Filter abgerufen werden.
Jedoch nicht, wenn das Review-Template bei einem normalen Seitenaufruf gerendert wird.
Das ist komisch.

URL der/meiner Website, auf der das Problem auftritt
versteckter Link

Keine Ahnung, ob wir den Fehler nachstellen können bei einer Testumgebung bei euch.
Es wäre vermutlich zu aufwändig.

Bei Bedarf können wir euch nach den Weihnachtsferien Zugang zu einer Staging-Umgebung geben.
Dann könnt ihr selber sehen, was ich meine.

Grüße

Dezember 25, 2023 unter 1:29 pm #15126617

Lucas Vidal de Andrade
Supporter

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Portugiesisch, Brasilien (Português )

Zeitzone: America/Sao_Paulo (GMT-03:00)

Hallo,

danke, dass Sie alle Details geteilt haben. Ich habe die Bewertungen einiger Produkte auf Ihrer Website analysiert und konnte das Problem reproduzieren. Tatsächlich muss ich Ihre Templates und Ihren Code genauer untersuchen. Bitte senden Sie mir die Zugangsdaten zur Staging-Version und bestätigen Sie, ob ich eine Kopie zur lokalen Analyse erstellen darf.

Sie finden die erforderlichen Felder dafür unter dem Kommentarbereich, wenn Sie sich einloggen, um Ihre nächste Antwort zu hinterlassen. Die von Ihnen eingegebenen Informationen sind privat, was bedeutet, dass nur Sie und ich darauf Zugriff haben.

Möglicherweise muss ich Ihre Website lokal replizieren. Dafür muss ich vorübergehend ein Plugin namens "Duplicator" oder "All in One WP Migration" auf Ihrer Website installieren. Dies ermöglicht es mir, eine Kopie Ihrer Website und Ihrer Inhalte zu erstellen. Sobald das Problem gelöst ist, werde ich die lokale Website löschen. Lassen Sie mich bitte wissen, ob das für Sie in Ordnung ist.

WICHTIG

Bitte erstellen Sie ein Backup der Website-Dateien und der Datenbank, bevor Sie uns Zugang gewähren.
Wenn Sie die wp-admin/FTP-Felder nicht sehen, bedeutet dies, dass Ihre Post- & Website-Anmeldedaten ÖFFENTLICH gemacht werden. Posten Sie Ihre Website-Daten nicht, es sei denn, Sie sehen die erforderlichen wp-admin/FTP-Felder. Wenn Sie diese nicht sehen, bitten Sie mich, das private Feld zu aktivieren. Das private Feld sieht so aus:
versteckter Link

Januar 8, 2024 unter 6:45 pm #15162387

Lucas Vidal de Andrade
Supporter

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Portugiesisch, Brasilien (Português )

Zeitzone: America/Sao_Paulo (GMT-03:00)

Hallo,

danke, dass Sie die Informationen geteilt haben. Ich habe alle Details an unser Entwicklerteam weitergeleitet, das nach einer dauerhaften Lösung für Ihr Problem suchen wird, was normalerweise einige Tage dauert. Sobald ich ein Update von ihnen habe, informiere ich Sie. In der Zwischenzeit wünsche ich Ihnen einen großartigen Tag.

Januar 9, 2024 unter 12:33 pm #15164367

Lucas Vidal de Andrade
Supporter

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Portugiesisch, Brasilien (Português )

Zeitzone: America/Sao_Paulo (GMT-03:00)

Hallo,

danke, dass Sie gewartet haben. Es scheint, dass es eine fehlerhafte Einstellung in WCML gab. Ich habe getestet, das Feld "By default, show reviews in all languages" in WooCommerce > WooCommerce Multilingual & Multicurrency > Einstellungen > Produktbewertungen zu deaktivieren (siehe Bild), und es hat funktioniert. Bitte deaktivieren Sie diese Einstellung auf Ihrer Website und teilen Sie mir die Ergebnisse mit. Diese Lösung sollte funktionieren.

Ich freue mich auf Ihr Feedback.

WooCommerce Multilingual _ Multicurrency _ MYCOVER_ Online Shop _ WordPress.jpeg
Januar 9, 2024 unter 12:44 pm #15164471

cons-2

Hallo Lucas,

danke für den Input.

Die Checkbox haben wir bewusst aktiviert, damit die Reviews in allen Sprachen angezeigt werden.
Wenn wir die Checkbox ausschalten, habe ich FR auf der Produktseite nur 19 Reviews statt über 275.

Schau gerne auf der Staging vorbei.
FR hat ohne die Checkbox viel weniger Reviews als DE.
Mit Checkbox an haben alle Sprachen gleich viele Reviews.
Das möchten wir so beibehalten.

Haben die Entwickler eine andere Idee?
(Wenn wir später auf der Live-Seite bei uns Code einfügen müssen, um die Lösung nachzubauen - kein Problem. Kriegen wir hin.)

Grüße

Januar 9, 2024 unter 12:47 pm #15164475

cons-2

Edit: Ich vermute mittlerweile, dass der Filter einen Bug hat.
In meinem Beispiel in dem HTML-Attributen im child-Theme von gestern habe ich dir drei mal den Filter aufgerufen. EN, FR, DE.
Hart kodierte Parameter.
Trotzdem z.T. falsche Ergebnisse.
Da haut scheinbar etwas grundsätzlich nicht in?!

Januar 9, 2024 unter 1:05 pm #15164553

Lucas Vidal de Andrade
Supporter

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Portugiesisch, Brasilien (Português )

Zeitzone: America/Sao_Paulo (GMT-03:00)

Hallo,

Verstanden. Nur um sicherzustellen: Sie haben die Bewertungen übersetzt und möchten, dass nur die Übersetzungen für die entsprechende Sprache angezeigt werden, richtig?

Wie haben Sie diese Bewertungen übersetzt? Bitte teilen Sie mir den Schritt-für-Schritt-Prozess mit, den Sie für die Übersetzung der Bewertungen befolgt haben.

Unsere Entwickler analysieren das Problem noch, ich werde sie mit Ihrer Antwort auf dem Laufenden halten.

Januar 9, 2024 unter 2:40 pm #15165276

cons-2

Nur um sicherzustellen: Sie haben die Bewertungen übersetzt und möchten, dass nur die Übersetzungen für die entsprechende Sprache angezeigt werden, richtig?

Die angezeigten Reviews werden teilweise in der falschen Sprache ausgespielt.
Das ist das Problem.

Wenn ich auf einer Produktseite DE bin, dann sollten alle Reviews in deutsch angezeigt werden.
Sollte für ein Review keine Übersetzung vorhanden sein, dann in der Originalsprache ausgeben.
Das ist eigentlich auch Standardverhalten beim WPML und okay.

Bei uns sind jedoch teilweise original-Reviews zu sehen, obwohl wir Übersetzungen dafür angelegt haben.
Die Übersetzungen können scheinbar nicht immer korrekt abgerufen werden.

Das Problem tauchte mal nach irgendeinem WPML-Update auf.
Davor ging es lange Zeit ohne Probleme.

Beispiel:
Gehe zu versteckter Link.
Dort siehst du auf einer FR-Seite Reviews, die auf deutsch angezeigt werden.

Sie sind korrekt mit string translation übersetzt.
Eigentlich müssten die Übersetzungen in der Sprache FR da stehen. Mit dem Zusatz "(translated)"
Das klappt jedoch nicht.

Wenn ich auf der gleichen Produktseite zum letzten Review scrolle und den Button "view more Reviews" klicke, dann werden weitere Reviews via REST-API geladen.

Diese werden korrekt übersetzt angezeigt.

Das Problem, das wir beheben möchten, ist, dass die Reviews, die beim Seitenaufruf angezeigt werden, nicht korrekt übersetzt sind.

Egal, welche Sprache wir im Frontend ansehen.
z.B. auch EN: versteckter Link

Wir nutzen die gleichen php-Funktionen, um das Template und die REST-API mit Reviews zu befüllen.
Darum sind wir sehr verwundert, warum es in einem Szenario klappt, und in dem anderen nicht.
(Wie gesagt: Die korrekte Funktionsweise ist irgendwann bei einem WPML-Update verloren gegangen.)

Die Tests, die ich dir oben beschrieben habe, zeigen, dass der Filter "wpml_translate_single_string" teilweise unterschiedliche Ergebnisse ausspuckt, wenn ich ihn auf anderen Seite teste.

Wenn ich ihn auf einer FR-Seite einsetze und FR abrufen will, kommt ein anderes Ergebnis, als wenn ich ihn auf EN einsetze und FR abrufen will.
Selbst, wenn ich fixe Parameter einsetze und eigentlich immer das gleiche Ergebnis rauskommen müsste.

Schaue dazu gerne noch einmal die html-Attribute, die ich dir zum debuggen erstellt habe, an.

Darum glaube ich, dass der Filter "wpml_translate_single_string" ein Lösungsansatz sein könnte.
Ich weiß es jedoch nicht.

Wie haben Sie diese Bewertungen übersetzt?
WPML string translation mit deepL-Anbindung.

Januar 10, 2024 unter 2:03 pm #15169273

Lucas Vidal de Andrade
Supporter

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Portugiesisch, Brasilien (Português )

Zeitzone: America/Sao_Paulo (GMT-03:00)

Hallo,

danke, dass Sie all diese Details geteilt haben. Ich habe festgestellt, dass die Bewertungen wie erwartet funktionierten, nachdem ich alle Plugins deaktiviert habe (mit Ausnahme von WooCommerce und den WPML-bezogenen Plugins). Das deutet darauf hin, dass das Problem durch ein Drittanbieter-Plugin verursacht wird.

Leider trat ein kritischer Fehler in der Staging-Version auf, die Sie mir gesendet haben, als ich versuchte, die Plugins nacheinander wieder zu aktivieren, sodass ich nicht feststellen konnte, welches Plugin den Konflikt verursachte. Ich bitte Sie, die Plugins einzeln zu deaktivieren und die Funktionalität jedes Mal zu testen, um zu sehen, welches Plugin diesen Fehler verursacht.

Ich hoffe, das hilft Ihnen weiter.

Januar 11, 2024 unter 12:36 pm #15174464

cons-2

Hallo Lucas,

ich habe die Plugins nun nacheinander wieder aktiviert.

Und du hast recht.
Es klappt ohne extra-Plugins.
Wenn unser individuelles Plugin aktiviert wird, dann kommt es zu einem Fehler.
(Wir haben den Plugin-Namen im Backend mit "(@WPML-Support)" markiert. Das ist das Plugin mit unseren Anpassungen. versteckter Link)

Ich kann dir jedoch nicht sagen, warum es überhaupt einen Einfluss auf den WPML-Filter haben sollte.

Wir haben zwei php-files, die Reviews modifizieren.
Es wird über action-hooks ein review-Title hinzugefügt.
Also nichts, das einen Einfluss auf WPML haben sollte.

Selbst, wenn ich die zwei files aus dem Plugin entferne, tritt der Fehler weiterhin auf.
Ich habe jetzt also erstmal alles so gelassen, wie es auf der Live-Seite ist.

Der Fehler ist noch da.

Was mich interessieren würde:
- Gehe zu den Reviews versteckter Link
- Schaue dir das Debug-Objekt an, dass ich dir im Frontend printe.

Du solltest sehen, dass die Eigenschaft [fr][out] falsch ist.
Hier steht der DE-Text. Eigentlich müsste dort die Übersetzung auf französisch stehen.
Scrolle nun zum letzten Review.
Drücke "view more reviews".

Bei den neu geladenen Reviews ist [fr][out] auf einmal korrekt.
Das Ergebnis vom Filter variiert z.T. je nach Frontend-Sprache.
Dabei müsste immer stabil das gleiche Ergebnis rauskommen.

Ich habe keine Idee, warum der Filter spinnt.
Da wir den zum Anzeigen der Reviews nutzen, sehe ich hier eine möglichen Lösungsansatz.

Fotos anbei.

Bitte lass eure Entwickler drüberschauen.
Wir brauchen eine Lösung.
Warum funktioniert der WPML-Filter nicht zuverlässig?
Was kann einen Einfluss auf das Ergebnis vom Filter haben?

Grüße

incorrect_fr_Screenshot_20240111_132007.png
incorrect_en_Screenshot_20240111_131926.png
Januar 11, 2024 unter 12:41 pm #15174498

cons-2

Edit: Siehe child-Theme /woocommerce/single-product/review-meta.php.
Dort printen wir das debug-objekt.
Nur zur Info, falls ihr damit rumspielen wollt.

Januar 19, 2024 unter 12:43 pm #15204929

Lucas Vidal de Andrade
Supporter

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Portugiesisch, Brasilien (Português )

Zeitzone: America/Sao_Paulo (GMT-03:00)

Hallo,

wir konnten noch keine Lösung für Ihr Problem finden. In einem ähnlichen Fall hat ein Kunde die Funktion "wpml_translate_single_string" verwendet, um die übersetzten Kommentare aufzurufen. Könnten Sie versuchen, diese Funktion beim initialen Aufruf der Kommentare zu verwenden, um zu sehen, ob es als Workaround funktioniert?

Ich warte auf Ihre Rückmeldung.

Januar 20, 2024 unter 11:47 am #15207090

cons-2

Hallo Lucas,

bin mir nicht sicher, ob du unser Problem verstanden hast oder Stufe 2 sich die Seite überhaupt mal unter den von mir beschriebenen Aspekten angesehen hat.

Wir nutzen bereits wpml_translate_single_string.
wpml_translate_single_string gibt falsche Ergebnisse zurück.

Das ist unser Problem.

Falsche Review-Sprache kann negativen Einfluss auf die Conversion-Rate haben und damit sinnlos unser Ads-Budget verbrennen.

Bitte schaut euch das endlich an und fixt das.

Grüße

Januar 20, 2024 unter 12:05 pm #15207098

cons-2

Kurze Info: Ich habe die Staging-Umgebung noch einmal verlängert bekommen.
Sie hat jetzt noch eine Laufzeit von 6 Tagen.
Dann wird sie automatisch gelöscht.

Januar 23, 2024 unter 6:52 pm #15218578

Lucas Vidal de Andrade
Supporter

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch ) Portugiesisch, Brasilien (Português )

Zeitzone: America/Sao_Paulo (GMT-03:00)

Hallo,

nachdem ich mit meinen Kollegen gesprochen und Ihren Antrag analysiert habe, sind wir zu dem Schluss gekommen, dass der Hook wie erwartet funktioniert. Wenn Ihr Plugin deaktiviert wird, funktioniert WPML normal.

Dennoch empfehle ich Ihnen, sich dieses andere Ticket eines Kunden anzusehen, der ein ähnliches Problem hatte:
https://wpml.org/forums/topic/retrieving-product-reviews-in-all-languages-via-get_comments-no-longer-works/#post-12973947

Leider können wir Ihnen, da Ihr Problem mit benutzerdefiniertem Code zusammenhängt, keinen weiteren Support anbieten, da unser Forum Problemen mit WPML und anderen direkt damit verbundenen Plugins gewidmet ist. Es tut mir leid, dass wir keine gemeinsame Lösung finden konnten. Wir bieten einen spezialisierten Service für Nutzer an, die Dienste benötigen, die über unseren Support hinausgehen:
https://wpml.org/contractors/

Wie gesagt, obwohl wir Ihre Anfrage verstanden haben, liegt die Analyse und Korrektur Ihres Codes außerhalb des Umfangs unserer Arbeit. Sollten Sie Probleme mit WPML oder einem anderen Plugin aus unserem Ökosystem haben, können Sie ein neues Ticket eröffnen.

Ich wünsche Ihnen viel Glück und einen ausgezeichneten Tag.