Zum Inhalt springen Zur Seitenleiste springen

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.

Sun Mon Tue Wed Thu Fri Sat
- - 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00 9:00 – 18:00
- - - - - - -

Supporter-Zeitzone: America/Lima (GMT-05:00)

Schlagwörter: ,

Dieses Thema enthält 31, hat 0 Stimmen.

Zuletzt aktualisiert von Andreas W. Vor 2 Wochen, 6 Tagen.

Assistiert von: Andreas W..

Autor Beiträge
März 3, 2026 um 11:02 #17867865

Robert Rosanke

Hallo,

wir haben eine Email in WooCommerce, bei der wir im Feld "additional_content" einen Platzhalter-Link hinterlegen.
Die Email leitet Menschen bei fehlgeschlagenen Zahlungen auf die Zahlungsseite von WooCommerce weiter, damit diese die Zahlungsmethode ändern und es erneut probieren können.

In den Email-Einstellungen von WooCommerce haben wir z.B. folgendes hinterlegt:
<pre>

Zur Zahlungsseite:
<a href="{pay_order_url}">{pay_order_url}</a>

<strong>Solltest du mit der gleichen Zahlungsmethode wiederholt Probleme haben, dann probiere einfach eine andere aus.</strong>

</pre>

Der gesamte Email-Inhalt wird automatisch von WPML mit auto translate übersetzt. Das klappt auch.
Das Feld additional_content ist der WPML Engine also definitiv bekannt.

- In der Sprache DE (Originalsprache) wird der Link korrekt in der Email ausgegeben und ist klickbar.
- Bei allen Übersetzungen funktioniert das a tag nicht. Das href-Attribut beinhaltet leider nicht den finalen wert des Platzhalters.
User können dadurch nicht auf den eigentlich vorhanden Link in der Email-Klicken.

Erwartetes Verhalten: Wenn im Originalinhalt einer WooCommerce-Email in den Einstellungen ein Platzhalter als Link a href hinterlegt wird dann sollte dieser auch in den Übersetzungen ersetzt und korrekt ausgegeben werden.

Anbei ein paar Fotos. Es ist zu sehen, dass der Inhalt korrekt im Übersetzungsdashboard ankommt.
In der Email-Source habe ich nachgesehen. dort steht als href-Attribut der Platzhalter. Er wird bei Übersetzungen also nicht korrekt gegen den Wert ausgetauscht.
In der Originalsprache klappt es. Nur die Übersetzungen sind betroffen.
<pre>

<a href=3D"x-<em><u>versteckter Link</u></em>".......

</pre>

Der Fehler betrift nur das a href Attribut, wenn es einen Platzhalter beinhaltet. Innerhalb des a tags wird der Platzhalter korrekt ausgetauscht. Der Platzhalter ist also auch korrekt registirert, nur als Attributwert klappt es nicht bei Übersetzungen von WPML.

März 4, 2026 um 4:11 #17870500

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Hallo,

Woher stammt der Platzhalter "pay_order_url"?

Wie wurde dieser in die Website integriert? Handelt es sich um Custom Code oder ein Zusatzplugin?

Ist die verlinkte Seite übersetzt?

Mit freundlichen Grüßen
Andreas

März 4, 2026 um 5:53 #17870533

Robert Rosanke

Hallo Andreas,

hier Feedback.


Woher stammt der Platzhalter "pay_order_url"?

Wie wurde dieser in die Website integriert? Handelt es sich um Custom Code oder ein Zusatzplugin?

Custom Code. Machen wir an vielen Stellen. Klappt Problemlos.

Das Beispiel zeigt:
- direkt im Linktext selbst wird der Platzhalter korrekt ausgetauscht.
- im a href tag wird der Platzhalter bei Übersetzungen nicht ausgetauscht.

Hier gibt es also ein inkonsistentes Verhalten in WPML zwischen a href Attribut und normalem Text in HTML Elementen.
Wir wünschen uns eine Harmonisierung.

Ist die verlinkte Seite übersetzt?
Ja und nein.
Die Zahlungsseite in WooCommerce ist in der Basis übersetzt, ja.
Aber der genaue Link beinhaltet einen dynamischen part (order id + oder key).
Daher hat natürlich nicht jeder Zahlungsseiten-Link einen Eintrag in der Datenbank.

Ich möchte nochmal bekräftigen: Das erwartete Verhalten ist, dass WPML den Platzhalter gegen den Wert, den wir bereitstellen, austauscht.
So, wie es auch an anderen Stellen korrekt funktioniert.
WPML soll nicht unseren Wert modifizieren. Das Verhalten in einen href-Attribut soll nicht (wie derzeit) von einem Platzhalter im Fließtext abweichen.
Gleiches Verhalten an allen stellen. Dafür nutzt man ja Platzhalter.

März 4, 2026 um 6:27 #17870545

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Wie genau sieht dieser Custom Code aus?

März 4, 2026 um 9:49 #17871274

Robert Rosanke

Wir definieren im Konstruktur einer eigenen WC_Email-Klasse alle Platzhalter, die wir unterstützen möchten und stellen die finalen Werte dann in der trigger()-Funktion bereit.
WooCommerce ersetzt dann automatisch.

Konstruktur:

 $this->placeholders   = array(
                // ....
                '{order_id}'   => '',
                '{pay_order_url}' => '',
                '{thank_you_page_url}' => '',
               // ....
            );

innerhalb der trigger()-Funktion:

// replace variables
// ....
$this->placeholders['{order_id}'] = $this->object->get_id();
$this->placeholders['{pay_order_url}'] = $checkout_payment_url;
$this->placeholders['{thank_you_page_url}'] = $checkout_order_received_url;
// ....

Hier findest du die WC_Email-Klasse: versteckter Link

Hier findest du eine offizielle Email von WooCommerce, die exakt zeigt, wie wir die Platzhalter auch implementiert haben:
versteckter Link

STRG+F nach "$this->placeholders".
Wir sind standardkonform unterwegs.

März 4, 2026 um 18:55 #17872825

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ich benötige den kompletten Code. Wie exakt lautet die Klasse, die hier angewendet wird?

Gibt es eventuell eine Staging Site, auf der ich mir das einmal anschauen kann?

Ich möchte einen temporären Zugriff (wp-admin und FTP) auf die Website anfordern, um das Problem genauer zu untersuchen.

Die dafür erforderlichen Felder findest du unterhalb des Kommentarbereichs, wenn Du dich anmeldest, um die nächste Antwort zu hinterlassen. Die Informationen, die du angibst, sind privat, was bedeutet, dass nur du und ich sie sehen und darauf zugreifen können.

WICHTIG
Lege bitte unbedingt eine Sicherungskopie der Website und der Datenbank an, bevor Du uns den Zugriff gewährst.
Wenn Du die Felder "wp-admin / FTP" nicht sehen kannst, werden Ihre Anmeldedaten für Post und Website als "PUBLIC" (Öffentlich) festgelegt. Veröffentliche die Daten NICHT, es sei denn, Du siehst die erforderlichen wp-admin / FTP-Felder.

Ich muss hier eventuell ein Plugin namens "All In One WP Migration" installieren, um eine Kopie der Website anzulegen, auf welcher ich das Problem genauer untersuchen kann.

Ich wäre allerdings auch sehr dankbar, wenn du zu diesem Zweck selbst eine Staging Site von deinem Server aus bereitstellen könntest.

Bei Fragen zum Erstellen einer solchen Staging Site kannst Du deinen Hosting-Anbieter konsultieren. Achte bitte darauf, dass WPML auf diesem Staging ebenso unter https://wpml.org/de/account/websites/ registriert sein muss.

Solltest Du dazu nicht in der Lage sein, eine solche Kopie der Website zum Testen bereitzustellen, dann lass es mich bitte auf diesem Ticket wissen.

Das private Antwortformular sieht folgendermaßen aus:
versteckter Link

Klicke beim nächsten Antworten auf "I still need assistance".

Video:
versteckter Link

Beachte bitte, dass wir verpflichtet sind, diese Informationen auf jedem Ticket individuell anzufordern. Wir dürfen nicht auf Zugangsinformationen zugreifen, die nicht speziell auf diesem Ticket im privaten Antwortformular übermittelt wurden.

März 5, 2026 um 13:24 #17875040

Robert Rosanke

Hallo Andreas,

hier eine minimale Anleitung, die den Fehler bei uns reproduziert, die du so gerne auf einer WPML Testseite ausprobieren kannst.

1. WooComerce-Email-Klasse erweitern
Um den Aufwand gering zu halten, erweitern wir einfach eine Standard-Email von WooCommerce mit zwei Zeilen, statt extra eine eigene Klasse zu erstellen.
Das Verhalten ist in beiden Fällen fehlerhaft, wir nehmen hier zur Reproduktion einfach nur den kürzesten Weg.

Hier der fertige Code der Klasse WC_Email_Customer_Processing_Order.
Wir haben hier nur zwei Zeilen hinzugefügt für den Platzhalter "wpml_test_url":

Du findest die Klasse unter woocommerce/includes/emails/class-wc-email-customer-processing-order.php und kannst einfach das komplette file in WooCommerce 10.5.3 austauschen.

<?php
/**
 * Class WC_Email_Customer_Processing_Order file.
 *
 * @package WooCommerce\Emails
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

if ( ! class_exists( 'WC_Email_Customer_Processing_Order', false ) ) :

	/**
	 * Customer Processing Order Email.
	 *
	 * An email sent to the customer when a new order is paid for.
	 *
	 * @class       WC_Email_Customer_Processing_Order
	 * @version     3.5.0
	 * @package     WooCommerce\Classes\Emails
	 * @extends     WC_Email
	 */
	class WC_Email_Customer_Processing_Order extends WC_Email {

		/**
		 * Constructor.
		 */
		public function __construct() {
			$this->id             = 'customer_processing_order';
			$this->customer_email = true;

			$this->title          = __( 'Processing order', 'woocommerce' );
			$this->email_group    = 'order-updates';
			$this->template_html  = 'emails/customer-processing-order.php';
			$this->template_plain = 'emails/plain/customer-processing-order.php';
			$this->placeholders   = array(
				'{order_date}'   => '',
				'{order_number}' => '',
				'{wpml_test_url}' => '',
			);

			// Triggers for this email.
			add_action( 'woocommerce_order_status_cancelled_to_processing_notification', array( $this, 'trigger' ), 10, 2 );
			add_action( 'woocommerce_order_status_failed_to_processing_notification', array( $this, 'trigger' ), 10, 2 );
			add_action( 'woocommerce_order_status_on-hold_to_processing_notification', array( $this, 'trigger' ), 10, 2 );
			add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $this, 'trigger' ), 10, 2 );

			// Call parent constructor.
			parent::__construct();

			// Must be after parent's constructor which sets `email_improvements_enabled` property.
			$this->description = $this->email_improvements_enabled
				? __( 'Send an email to customers notifying them that their order is being processed', 'woocommerce' )
				: __( 'This is an order notification sent to customers containing order details after payment.', 'woocommerce' );

			if ( $this->block_email_editor_enabled ) {
				$this->title       = __( 'Order confirmation', 'woocommerce' );
				$this->description = __( 'Notifies customers when their order has been received and is being processed.', 'woocommerce' );
			}
		}

		/**
		 * Get email subject.
		 *
		 * @since  3.1.0
		 * @return string
		 */
		public function get_default_subject() {
			return __( 'Your {site_title} order has been received!', 'woocommerce' );
		}

		/**
		 * Get email heading.
		 *
		 * @since  3.1.0
		 * @return string
		 */
		public function get_default_heading() {
			return __( 'Thank you for your order', 'woocommerce' );
		}

		/**
		 * Trigger the sending of this email.
		 *
		 * @param int            $order_id The order ID.
		 * @param WC_Order|false $order Order object.
		 */
		public function trigger( $order_id, $order = false ) {
			$this->setup_locale();

			if ( $order_id && ! is_a( $order, 'WC_Order' ) ) {
				$order = wc_get_order( $order_id );
			}

			if ( is_a( $order, 'WC_Order' ) ) {
				$this->object                         = $order;
				$this->recipient                      = $this->object->get_billing_email();
				$this->placeholders['{order_date}']   = wc_format_datetime( $this->object->get_date_created() );
				$this->placeholders['{order_number}'] = $this->object->get_order_number();
				$this->placeholders['{wpml_test_url}'] = 'https://wpml.org/de/forums/topic/uebersetzung-von-woocommerce-email-fehlerhaft-platzhalter-in-a-href-attribut-wird-nicht-ausgetuscht/';
			}

			if ( $this->is_enabled() && $this->get_recipient() ) {
				$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
			}

			$this->restore_locale();
		}

		/**
		 * Get content html.
		 *
		 * @return string
		 */
		public function get_content_html() {
			return wc_get_template_html(
				$this->template_html,
				array(
					'order'              => $this->object,
					'email_heading'      => $this->get_heading(),
					'additional_content' => $this->get_additional_content(),
					'sent_to_admin'      => false,
					'plain_text'         => false,
					'email'              => $this,
				)
			);
		}

		/**
		 * Get content plain.
		 *
		 * @return string
		 */
		public function get_content_plain() {
			return wc_get_template_html(
				$this->template_plain,
				array(
					'order'              => $this->object,
					'email_heading'      => $this->get_heading(),
					'additional_content' => $this->get_additional_content(),
					'sent_to_admin'      => false,
					'plain_text'         => true,
					'email'              => $this,
				)
			);
		}

		/**
		 * Default content to show below main email content.
		 *
		 * @since 3.7.0
		 * @return string
		 */
		public function get_default_additional_content() {
			return $this->email_improvements_enabled
				? __( 'Thanks again! If you need any help with your order, please contact us at {store_email}.', 'woocommerce' )
				: __( 'Thanks for using {site_url}!', 'woocommerce' );
		}
	}

endif;

return new WC_Email_Customer_Processing_Order();

2. Füge den Platzhalter in den Email-Inhalt ein

WooCommerce » Einstellungen » Emails » Bestellung in Bearbeitung » additional_content.
Wir nutzen testweise folgenden Inhalt:

Du möchtest mehr über uns erfahren? <br>Besuche uns JETZT bei Instagram und Facebook! <a href="{wpml_test_url}">{wpml_test_url}</a>

3. Email-Inhalt übersetzen mit WPML

WPML » Übersetzungsdashboard » Zeichenketten » Email Inhalt markieren und für Übersetzung mit PTC einreichen.
Siehe Foto.

4. Email in Originalsprache testen (korrekt)

Erstelle eine Testbestellung in der Hauptsprache des Shops / der Testseite. Stelle diese manuell im Backend von "in Wartestellung" auf "in Bearbeitung".
Du erhältst nun eine Email, der Link-Tag ist korrekt und funktioniert.

5. Email in Fremdsprache testen (fehlerhaft)

Erstelle eine Testbestellung in einer Fremdsprache des Shops / der Testseite. Stelle diese manuell im Backend von "in Wartestellung" auf "in Bearbeitung".
Du erhältst nun eine Email, der Link-Tag ist ungültig.
Er kann nicht angeklickt werden.
Erwartet: Der Tag ist gültig und funktioniert.

Ich habe zur Reproduktion das bei uns verwendete Plugin Kadence Email Designer deaktiviert. Der Fehler tritt bei Stock Woo mit WPML auf, keine weiteren Email-Anpassungen. Für den Versand nutzen wir WP Mail SMTP.

Kannst du den Fehler auf einer WPML Testseite reproduzieren?

email-translation-link0ungültig___Screenshot_20260305_141444.png
email_originalsprache-korrekt__Screenshot_20260305_141227.png
wpml-auto-translate__Screenshot_20260305_141037.png
März 5, 2026 um 17:23 #17875896

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Hallo Robert,

vielen Dank für deine Rückmeldung und die Details zum Problem.

Es ist wichtig zu betonen, dass WooCommerce-Core-Klassen niemals direkt verändert werden sollten. Solche Änderungen sind nicht update-sicher und können zu unerwarteten Fehlern führen – insbesondere bei Übersetzungen oder Kompatibilität mit Plugins wie WPML.

Die empfohlene Vorgehensweise ist, Anpassungen über eigene Hooks oder Filter vorzunehmen. WooCommerce stellt dafür zahlreiche Filter bereit, mit denen sich Platzhalter oder Inhalte in E-Mails sicher überschreiben lassen.

Ein Beispiel wäre die Nutzung des Filters woocommerce_email_order_meta_fields, um zusätzliche oder angepasste Platzhalter in die E-Mail einzufügen:

add_filter( 'woocommerce_email_order_meta_fields', function( $fields, $sent_to_admin, $order ) {
    $fields['custom_placeholder'] = array(
        'label' => __( 'Custom Placeholder', 'textdomain' ),
        'value' => get_post_meta( $order->get_id(), '_custom_placeholder', true ),
    );
    return $fields;
}, 10, 3 );

Damit kannst du eigene Platzhalter definieren, die dann auch im E-Mail-Template korrekt ersetzt werden – ohne die Core-Klassen zu verändern.

Quelle: https://woocommerce.com/document/add-a-custom-field-in-an-order-to-the-emails/

Falls es um die Verarbeitung innerhalb eines href-Attributs geht, sollten wir prüfen, ob der Platzhalter über einen Hook wie woocommerce_email_order_meta oder über ein angepasstes Template eingebunden werden kann. So bleibt die Lösung update-sicher und kompatibel mit WPML.

Die Übersetzung findet in diesem Fall unter WPML > String-Übersetzung statt. Hier sollte auch darauf geachtet werden, dass der registrierte String die korrekte Ausgangssprache hat:
https://wpml.org/documentation/getting-started-guide/string-translation/how-to-change-the-source-language-of-strings/

Der verlinkte Inhalt muss zudem übersetzt und veröffentlicht sein.

Bitte teste dies in einer Staging-Umgebung und gib uns Bescheid, ob die Platzhalter so korrekt ersetzt werden.

Mit freundlichen Grüßen
Andreas

März 6, 2026 um 10:18 #17877446

Robert Rosanke

Hallo Andreas,

vielen Dank für deine Rückmeldung.

Ich habe das Gefühl, dass der Fokus zu sehr auf der Bearbeitung der WooCommerce Core-Klasse liegt. Mir ist bewusst, dass man Core-Dateien nicht verändert. Die von mir vorgenommene Änderung diente ausschließlich als minimaler Proof of Concept (PoC), um den Fehler isoliert und schnellstmöglich für euch reproduzierbar zu machen.

Bitte lass uns zum eigentlichen Problem zurückkehren: Platzhalter innerhalb von HTML-Attributen (wie a href) werden in unserem Beispiel in übersetzten WooCommerce-E-Mails nicht korrekt ersetzt.

Dein Vorschlag scheint leider nicht mit der von mir beschriebenen Problematik zusammenzuhängen. Die vorgeschlagene Lösung zielt darauf ab, via Code Inhalte in die Email an einer fest definierten Stelle einzusetzen. Das ist nicht unser Thema. Es löst den spezifischen Fehler bei der Platzhalter-Ersetzung im Übersetzungs-Kontext nicht. Bei unserem Problem geht es um den Text, den der user im Settings UI der Email hinterlegt. Ein ganz normaler Platzhalter, wie auch {order_id} etc.

Ich bitte dich daher, meinen bereitgestellten Ablauf exakt so zu testen, wie ich ihn beschrieben habe, um mit minimalem Aufwand zu reproduzieren.

Nur so lässt können wir validieren, ob hier ein Fehler in der Verarbeitung der Platzhalter durch WPML vorliegt, wenn diese in HTML-Attributen stehen. Sobald wir den Bug auf Basis des PoC bestätigt haben, können wir gerne über die nächsten Schritte sprechen.

Vielen Dank für deine Unterstützung beim Eingrenzen dieses Fehlers.

Grüße
Robert

März 6, 2026 um 17:04 #17878250

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Hallo,

Ich kann gerne anbieten, mir das einmal genauer anzusehen.

Ich möchte einen temporären Zugriff (wp-admin und FTP) auf die Website anfordern, um das Problem genauer zu untersuchen.

Die dafür erforderlichen Felder findest du unterhalb des Kommentarbereichs, wenn Du dich anmeldest, um die nächste Antwort zu hinterlassen. Die Informationen, die du angibst, sind privat, was bedeutet, dass nur du und ich sie sehen und darauf zugreifen können.

WICHTIG
Lege bitte unbedingt eine Sicherungskopie der Website und der Datenbank an, bevor Du uns den Zugriff gewährst.
Wenn Du die Felder "wp-admin / FTP" nicht sehen kannst, werden Ihre Anmeldedaten für Post und Website als "PUBLIC" (Öffentlich) festgelegt. Veröffentliche die Daten NICHT, es sei denn, Du siehst die erforderlichen wp-admin / FTP-Felder.

Ich muss hier eventuell ein Plugin namens "All In One WP Migration" installieren, um eine Kopie der Website anzulegen, auf welcher ich das Problem genauer untersuchen kann.

Ich wäre allerdings auch sehr dankbar, wenn du zu diesem Zweck selbst eine Staging Site von deinem Server aus bereitstellen könntest.

Bei Fragen zum Erstellen einer solchen Staging Site kannst Du deinen Hosting-Anbieter konsultieren. Achte bitte darauf, dass WPML auf diesem Staging ebenso unter https://wpml.org/de/account/websites/ registriert sein muss.

Solltest Du dazu nicht in der Lage sein, eine solche Kopie der Website zum Testen bereitzustellen, dann lass es mich bitte auf diesem Ticket wissen.

Das private Antwortformular sieht folgendermaßen aus:
versteckter Link

Klicke beim nächsten Antworten auf "I still need assistance".

Video:
versteckter Link

Beachte bitte, dass wir verpflichtet sind, diese Informationen auf jedem Ticket individuell anzufordern. Wir dürfen nicht auf Zugangsinformationen zugreifen, die nicht speziell auf diesem Ticket im privaten Antwortformular übermittelt wurden.

Mit freundlichen Grüßen
Andreas

März 6, 2026 um 17:09 #17878251

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Im Grunde muss die registrierte URL in WPML String-Übersetzung registriert werden:

WPML biete in dem Fall Hooks an um Strings zu registrieren und um übersetze Strings im Frontend anzuzeigen.
Beispiel:

// Registrierung (einmalig, z.B. beim Plugin-Init)
do_action( 'wpml_register_single_string', 'woocommerce-emails', 'wpml_test_url', 'https://wpml.org/de/forums/topic/uebersetzung-von-woocommerce-email-fehlerhaft-platzhalter-in-a-href-attribut-wird-nicht-ausgetuscht/' );
// Verwendung im Code
$this->placeholders['{wpml_test_url}'] = apply_filters(
    'wpml_translate_single_string',
    'https://wpml.org/de/forums/topic/uebersetzung-von-woocommerce-email-fehlerhaft-platzhalter-in-a-href-attribut-wird-nicht-ausgetuscht/',
    'woocommerce-emails',
    'wpml_test_url'
);
März 7, 2026 um 14:08 #17879397

Robert Rosanke

Hallo Andreas,

dein Code-Vorschlag zeigt, wie man einen string übersetzen kann.
Das ist jedoch nicht unser Problem, das im Ticket beschrieben wird.

Ich zitiere hier aus dem ersten Post im Thread bzgl. dem Verhalten von unserem Platzhalter {pay_order_url}:
Der gesamte Email-Inhalt wird automatisch von WPML mit auto translate übersetzt. Das klappt auch.
Das Feld additional_content ist der WPML Engine also definitiv bekannt.

- In der Sprache DE (Originalsprache) wird der Link korrekt in der Email ausgegeben und ist klickbar.
- Bei allen Übersetzungen funktioniert das a tag nicht. Das href-Attribut beinhaltet leider nicht den finalen wert des Platzhalters.
User können dadurch nicht auf den eigentlich vorhanden Link in der Email-Klicken.

Der Platzhalter wird bereits korrekt vom System behandelt, wenn er lose im Email-Inhalt steht. Als normaler Fließtext wird er auch bei Übersetzungen korrekt ersetzt, dazu habe ich oben im Thread Screenhots angehängt.
Sobald ich ihn jedoch ins href-Attribut packe, wird er nicht mehr ausgetauscht (nur bei Übersetzungen).

- Erwartet im href-Attribut bei Übersetzungen: {pay_order_url} => versteckter Link.....
- Erhalten im href-Attribut bei Übersetzungen: {pay_order_url} => {pay_order_url}

Das ist der Fehler bei Übersetzungen, auch in den Screenshots oben zu sehen, in dem ich die Email-Source zeige.
Dafür habe ich die oben die Anleitung zum reproduzieren gegeben.
Bitte versuche, den Fall auf einer leeren WPML-Testseite zu reproduzieren.
Es sind nur zwei Zeilen Code-Anpassung für den Test notwendig, siehe oben. Es sollte schnell erledigt sein.

März 8, 2026 um 5:42 #17879803

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ein Platzhalter wie {pay_order_url} wird in der Zweitsprache keinen Link ausgeben, wenn der Code dieses Plugins sich nicht an die Coding-Standards von WordPress, WooCommerce oder WPML hält.

Beisiel:
Der Platzhalter verwendet wc_get_checkout_url() um die URL zu bestimmen, dann kann unser Add-on WCML die korrekte URL in der Zweisprache zuweisen.

oder

Die WPML Hook wpml_permalink wird angewendet, damit WPML die URLs in den Zweitsprachen automatisch anpassen kann:
https://wpml.org/wpml-hook/wpml_permalink/

oder

Der String wird direkt in den Code eingegeben, dann muss er mit WPML String Translation registriert und übersetzt werden.

---

Kann ich mir das einmal auf eurer Website oder besser sogar auf einer Staging Site anschauen?

Ich muss exakt wissen, wie ich das Problem replizieren kann, bevor ich es eskalieren werde.

Ich möchte einen temporären Zugriff (wp-admin und FTP) auf die Website anfordern, um das Problem genauer zu untersuchen.

Die dafür erforderlichen Felder findest du unterhalb des Kommentarbereichs, wenn Du dich anmeldest, um die nächste Antwort zu hinterlassen. Die Informationen, die du angibst, sind privat, was bedeutet, dass nur du und ich sie sehen und darauf zugreifen können.

WICHTIG
Lege bitte unbedingt eine Sicherungskopie der Website und der Datenbank an, bevor Du uns den Zugriff gewährst.
Wenn Du die Felder "wp-admin / FTP" nicht sehen kannst, werden Ihre Anmeldedaten für Post und Website als "PUBLIC" (Öffentlich) festgelegt. Veröffentliche die Daten NICHT, es sei denn, Du siehst die erforderlichen wp-admin / FTP-Felder.

Ich muss hier eventuell ein Plugin namens "All In One WP Migration" installieren, um eine Kopie der Website anzulegen, auf welcher ich das Problem genauer untersuchen kann.

Ich wäre allerdings auch sehr dankbar, wenn du zu diesem Zweck selbst eine Staging Site von deinem Server aus bereitstellen könntest.

Bei Fragen zum Erstellen einer solchen Staging Site kannst Du deinen Hosting-Anbieter konsultieren. Achte bitte darauf, dass WPML auf diesem Staging ebenso unter https://wpml.org/de/account/websites/ registriert sein muss.

Solltest Du dazu nicht in der Lage sein, eine solche Kopie der Website zum Testen bereitzustellen, dann lass es mich bitte auf diesem Ticket wissen.

Das private Antwortformular sieht folgendermaßen aus:
versteckter Link

Klicke beim nächsten Antworten auf "I still need assistance".

Video:
versteckter Link

Beachte bitte, dass wir verpflichtet sind, diese Informationen auf jedem Ticket individuell anzufordern. Wir dürfen nicht auf Zugangsinformationen zugreifen, die nicht speziell auf diesem Ticket im privaten Antwortformular übermittelt wurden.

Ich bitte zudem um exakte Angaben dazu, wo die Code-Änderungen auf dem Server vorgommen wurden.

März 8, 2026 um 9:11 #17879882

Robert Rosanke

Bitte stelle eine WPML Testseite bereit, damit wir reproduzieren und den Fehler isoliert und ohne Sicherheitsrisiko für uns überprüfen zu können.
Wir haben oben extra eine einfache und schnell umzusetzende Anleitung bereit gestellt.
=> https://wpml.org/de/forums/topic/uebersetzung-von-woocommerce-email-fehlerhaft-platzhalter-in-a-href-attribut-wird-nicht-ausgetuscht/#post-17875040

Live haben wir den Fehler, auf der Staging auch, selbst wenn wir einige Plugins deaktivieren.
Nun bleibt nur die Frage, ob der Fehler auch auf eurer frischen Seite besteht, damit ihr es intern überprüfen könnt.

Hier ein Beispiel von einem WPML Ticket, das ich letztens bei euch erstellt habe und an die zweite Ebene eskaliert wurde. Wir haben sofort eine WPML Testseite erstellt, reproduziert und fertig.
Es ging schnell, einfach und wir mussten keinen Zugang zum Shop oder Hosting geben.
- https://wpml.org/de/forums/topic/fehlerbericht-inkonsistente-synchronisierung-bei-leeren-oder-geloschten-meta-feldern/

Wir möchten den Zugang von externen Leuten zum Shop auf ein Minimum begrenzen, da dort einfach sehr viele sensible Daten liegen.
Ich denke, dass ihr das verstehen könnt.
Da wir hier eine Reproduktion haben, sollte es auch ohne Zugang gehen.

Falls du keine Lust darauf hast, weise das Ticket bitte einem anderen Bearbeiter zu, der mit uns den Fehler auf einer WPML Testseite reproduziert, damit wir fortfahren können.

März 10, 2026 um 12:34 #17885396

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ich verstehe, kein Problem!

Ich bitte allerdings darum, auf dieser Sandbox keine Änderungen an der Code-Basis von WordPress oder den Plugins vorzunehmen. Wir müssen uns bei dieser Sandbox darauf verlassen können, dass diese Komponenten unverändert bleiben.

Bitte nutze für Code-Anpassungen nur die empfohlene Vorgehensweise unter Anwendung von Hooks. Du kannst dazu das File Manager Plugin und die functions.php-Datei des aktiven Themes verwenden.

Ein-Klick-Anmeldung:
versteckter Link

Hinterlasse mir bitte einen Kommentar, sobald du fertig bist.