Navigation überspringen

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

Problem:
Die Links, welche im LayerSlider unter Link& Attribute gesetzt habe, werden auf der englischen Seite des Sliders nicht zur Übersetzung dargestellt.

Solution:
Das LayerSlider Plugin registriert nur $layer['html'] und $layer['props']['html']. Der Anker-Link ist im wp_layerslider als 'url' gespeichert. Um sie zu übersetzen, müssen wir sie also auf die gleiche Weise registrieren und anzeigen.

Als temporäre Lösung haben wir nun den Code kopiert und ihn für das "url" Feld angepasst. Bitte beachten Sie, dass es sich hierbei nicht um eine vollständig getestete Lösung handelt und dass die endgültige Korrektur vom LayerSlider-Team durchgeführt werden sollte.

Workaround:
#1 Öffnen Sie wp-content/plugins/LayerSlider/assets/wp/actions.php und fügen Sie nach Zeile 1722 folgendes hinzu:

						if( ! empty( $layer['url'] ) && $layer['type'] != 'img' ) {

							// Check 'createdWith' property to decide which WPML implementation
							// should we use. This property was added in v6.5.5 along with the
							// new WPML implementation, so no version comparison required.
							if( ! empty( $layer['uuid'] ) && ! empty( $data['properties']['createdWith'] ) ) {
	
								$string_name = "slider-{$sliderID}-layer-{$layer['uuid']}-url";
								do_action( 'wpml_register_single_string', 'LayerSlider Sliders', $string_name, $layer['url'] );
	
							// Old implementation
							} else {
	
								$string_name = '<'.$layer['type'].':'.substr(sha1($layer['url']), 0, 10).'> layer on slide #'.($slideIndex+1).' in slider #'.$sliderID.'';
								do_action( 'wpml_register_single_string', 'LayerSlider WP', $string_name, $layer['url']);
							}
						}

#2 Öffnen Sie wp-content/plugins/LayerSlider/assets/includes/slider_markup_html.php und fügen Sie nach Zeile 234 ein:

					if( ! empty( $slides['properties']['attrs']['createdWith'] ) ) {
						$string_name = "slider-{$id}-layer-{$layer['props']['uuid']}-url";
						$layer['props']['url'] = apply_filters( 'wpml_translate_single_string', $layer['props']['url'], 'LayerSlider Sliders', $string_name );

					// Old implementation
					} else {
						$string_name = '<'.$layer['props']['type'].':'.substr(sha1($layer['props']['url']), 0, 10).'> layer on slide #'.($slidekey+1).' in slider #'.$id.'';
						$layer['props']['url'] = apply_filters( 'wpml_translate_single_string', $layer['props']['url'], 'LayerSlider WP', $string_name);
					}

#3 Öffnen Sie den Slider, bearbeiten Sie diese (z.B. ein Leerzeichen im Layer-Text hinzufügen) und speichern Sie.

#4 Die Links sind nun in der String Translation Tabelle registriert. Markieren Sie die Strings und wählen Sie unterhalb der Tabelle "Die Sprache der ausgewählten Strings ändern" und ändern Sie die Strings von Englisch auf Deutsch (Damit die deutsche Flagge neben dem String erscheint).

#5 Übersetzen Sie nun die Links zu /en/ => z.B..: /en/services/#mindful_business.

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.

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

Zuletzt aktualisiert von oliverT-11 Vor 3 Jahren, 11 Monaten.

Assistiert von: Marcel.

Verfasser Beiträge
November 12, 2020 unter 7:17 pm #7437847

oliverT-11

Tell us what you are trying to do?
Nachdem jetzt mit Ihrer Hilfe (vorausgegangenes Ticket) die Umschaltung der Startsteite zwischen deutsch und englisch funktioniert, ist ein neues Problem entstanden.

Die Links, die mit den Gestaltungselementen "Finance & Accounting", "Payroll Management", "Expatriate Consulting" und "Mindful Business" aufgerufen werden, werden auf der englischen Seite des Sliders nicht korrekt umgesetzt.

Auf der deutschen Originalseite wird mit dem Gestaltungselement "Finance & Accounting" der Anker-Link "versteckter Link" aufgerufen. Dieser Anker-Link wird in der übersetzten englischen Seite zu "versteckter Link" umgewandelt.

Tatsächlich müsste der Anker-Link jedoch "versteckter Link" lauten.

Gibt es eine Möglichkeit, die Anker-Links zu korrigieren? In der String-Übersetzung habe ich leider nichts finden können.

Für Ihre Hilfe bin ich Ihnen sehr dankbar.

Viele Grüße,
Oliver Tunnat

Is there any documentation that you are following?
https://wpml.org/documentation/plugins-compatibility/creating-multilingual-sliders-using-layerslider-and-wpml/

Is there a similar example that we can see?

What is the link to your site?
versteckter Link

November 13, 2020 unter 9:34 am #7441747

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

dieses Problem scheint LayerSlider bekannt zu sein: versteckter Link

Gibt es einen Grund, warum Sie kein URL Rewrite zu "Pretty Permalinks" verwenden? (also /en/ anstatt ?lang=en) Es gibt dabei nur Vorteile für das SEO. Damit sollte LayerSlider umgehen können.

Weitere Infos dazu finden sie hier:
https://wpml.org/documentation/getting-started-guide/language-setup/language-url-options/#different-languages-in-directories
https://stackoverflow.com/questions/12682952/proper-url-forming-with-query-string-and-anchor-hashtag
https://wpml.org/forums/topic/anchor-links-across-languages/

Freundliche Grüße
Marcel

November 13, 2020 unter 2:05 pm #7443491

oliverT-11

Hallo Marcel,

vielen Dank, dass Sie sich wieder meines Problems annehmen. Und auch vielen Dank frü den Hinweis zur Umstellung auf "Pretty Permalinks".

Die Umstellung habe ich gerade durchgeführt. Über das Menü lassen sich damit alle Seiten aufrufen. Nur funktionieren die Links auf der Startseite weiterhin nicht. Sie werden jetzt überhaupt nicht mehr angepasst und sind die gleichen wie auf der deutschsprachigen Startseite.

Ist bestimmt nur eine Kleinigkeit, ein Caching-Problem vielleicht? Ich habe alles String-Übersetzungen nochmal von Hand neu gespeichert.

versteckter Link

Viele Grüße,
Oliver

November 13, 2020 unter 2:54 pm #7443741

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

können Sie bitte versuchen die Startseite minimal zu verändern (z. B.: Leerzeichen einfügen) um eine Aktualisierung auszulösen. Sobald die Übersetze Version mit 100& gespeichert wurde, können Sie erneut prüfen, ob sich etwas an den Links verändert.

Bitte um Info

Freundliche Grüße
Marcel

November 17, 2020 unter 2:42 pm #7467407

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

danke für den Zugang. Ich sehe hier auch keine Möglichkeit, dass LayerSlider mit den Ankerlinks auch in dieser URL Variante umgehen kann. Das Feld von "Sider Linking field" wird überhaupt nicht ausgelesen, es wird somit überhaupt keine verlinkte URL zur Übersetzung sichtbar.

Wir haben dieses Problem von ein paar Tagen über ein Chat Ticket gemeldet bekommen und konnten es als Bug bestätigen. Unser Kompatibilitäts-Team bereitet gerade eine Meldung an den Autor vor, damit dies im Code von LayerSlider behoben wird: https://wpml.org/forums/topic/translate-layer-slider-links/

Ich gebe Ihnen Bescheid, sobald die Lösung über ein LayerSlider Update behoben wird. Beachten Sie bitte, dass es dauern kann bis LayerSlider hier reagiert.

Freundliche Grüße
Marcel

November 21, 2020 unter 8:41 am #7497645

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

wir haben einen temporären Workaround gefunden und diesen bereits an den Autor weitergeleitet. Als temporäre Lösung können Sie folgenden Code verändern, bis LayerSlider dies über ein Update löst:

1- Öffnen Sie wp-content/plugins/LayerSlider/assets/wp/actions.php
2- Nach Zeile 1702 foreach($data['layers'] as $slideIndex => $slide) { fügen Sie folgendes hinzu:

// Register slider layer link
			if (! empty($slide['properties']['layer_link'] )) {
				$string_name = "slider-{$sliderID}-layer_link-{$slide['properties']['layer_link']}";
				do_action( 'wpml_register_single_string', 'LayerSlider Sliders', $string_name, $slide['properties']['layer_link'] );

			}

3- Öffnen Sie wp-content/plugins/LayerSlider/assets/includes/slider_markup_html.php
Zeile 547:

  $slide['props']['linkUrl'] = ! empty( $slide['props']['linkUrl'] ) ? $slide['props']['linkUrl'] : '#'; 

Und fügen Sie danach dies hinzu:

$slide['props']['linkUrl'] = apply_filters( 'wpml_translate_single_string', $slide['props']['linkUrl'], 'LayerSlider Sliders', "slider-{$id}-layer_link-{$slide['props']['linkUrl']}");

4- Speichern Sie den Slider erneut ab und übersetzen Sie die Strings in der WPML String Translation.

BItte um Info, ob für Sie es damit funktioniert.

Freundliche Grüße
Marcel

November 21, 2020 unter 7:10 pm #7499623

oliverT-11

Hallo Marcel,

zunächst ganz herzlichen Dank für die Mühe und den Lösungsvorschlag.

Die Schritte 1 - 3 habe ich durchgeführt und den Slider gespeichert. Das hat soweit noch nicht geholfen.

Ich habe aber keine Idee, was mit "and translate the registered strings in ST" gemeint ist. Welche Strings? Die bisher nicht übersetzten Links/URLs? Da habe ich keine Idee, wo ich die finden kann. Mit einer Domain-Suche habe ich sie nicht finden können.

In der String-Übersetzung finde ich nur die Labels der Schaltflächen, nicht aber die URL.

Haben Sie da vielleicht noch einen Tip für mich?

Viele Grüße,
Oliver

LayerSlider_Links.png
LayerSlider_content.png
WPML_String.png
November 23, 2020 unter 10:04 am #7507431

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

bitte prüfen Sie die Antwort oben mit dem Code erneut, hier war noch ein Übersetzungsfehler enthalten, bitte entschuldigen Sie. Ich habe es nun ab 3.) ausgebessert.

Wenn Sie also den Slider abspeichern, sollten die neuen URL Strings in der String Translation Tabelle verfügbar sein. Können Sie dies bitte erneut überprüfen?

Freundliche Grüße
Marcel

November 23, 2020 unter 8:49 pm #7512417

oliverT-11

Hallo Marcel,

die Änderungen habe ich nochmal vollständig vorgenommen. Leider hat das nicht geholfen.

Zwar finde ich jetzt in der String-Übersetzung entsprechende (und bereits übersetzte) Werte - siehe beigefügter Screenshot. Diese werden auf der englischsprachigen Startseite jedoch nicht verwendet. Dort werden weiterhin die auf die deutssprachigen Seiten zeigenden Links angesteuert.

Haben Sie vielleicht noch eine Idee?

Viele Grüße,
Oliver Tunnat

Bildschirmfoto 2020-11-23 um 21.42.27.png
November 24, 2020 unter 7:14 pm #7520183

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

ich habe weitere Tests durchgeführt und der beschriebene Workaround funktioniert in Ihrem Fall nicht, da LayerSlider ein anderes URL-Feld dafür setzt. Ich werde versuchen das Problem erneut von Grund auf in einer isolierten Sandbox nachzustellen, um dies zur Prüfung an unser Kompatibilitäts-Team weiterzuleiten.

Freundliche Grüße
Marcel

November 26, 2020 unter 11:56 am #7534157

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

ich habe das ganze nun hier auf dieser Sandbox versteckter Link reproduziert und den Fall unser Kompatibilitäts-Team zur weiteren Prüfung weitergeleitet.

Soweit ich herausfinden konnte, hat der Autor das Problem bereits 2019 behoben: versteckter Link

Ich melde mich, sobald ich eine Rückmeldung dazu erhalte.

Freundliche Grüße
Marcel

Dezember 1, 2020 unter 9:05 am #7567947

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

Das LayerSlider Plugin registriert nur $layer['html'] und $layer['props']['html']. Der Anker-Link ist im wp_layerslider als 'url' gespeichert. Um sie zu übersetzen, müssen wir sie also auf die gleiche Weise registrieren und anzeigen.

Die endgültige Behebung sollte an das LayerSlider Team gehen. Als temporäre Lösung haben wir nun den Code kopiert und ihn für das "url" Feld angepasst. Bitte beachten SIe, dass es sich hierbei nicht um eine vollständig getestete Lösung handelt und dass die endgültige Korrektur vom LayerSlider-Team durchgeführt werden sollte.

Workaround:

#1 Öffnen Sie wp-content/plugins/LayerSlider/assets/wp/actions.php und fügen Sie nach Zeile 1722 folgendes hinzu:

						if( ! empty( $layer['url'] ) && $layer['type'] != 'img' ) {

							// Check 'createdWith' property to decide which WPML implementation
							// should we use. This property was added in v6.5.5 along with the
							// new WPML implementation, so no version comparison required.
							if( ! empty( $layer['uuid'] ) && ! empty( $data['properties']['createdWith'] ) ) {
	
								$string_name = "slider-{$sliderID}-layer-{$layer['uuid']}-url";
								do_action( 'wpml_register_single_string', 'LayerSlider Sliders', $string_name, $layer['url'] );
	
							// Old implementation
							} else {
	
								$string_name = '<'.$layer['type'].':'.substr(sha1($layer['url']), 0, 10).'> layer on slide #'.($slideIndex+1).' in slider #'.$sliderID.'';
								do_action( 'wpml_register_single_string', 'LayerSlider WP', $string_name, $layer['url']);
							}
						}

#2 Öffnen Sie wp-content/plugins/LayerSlider/assets/includes/slider_markup_html.php und fügen Sie nach Zeile 234 ein:

					if( ! empty( $slides['properties']['attrs']['createdWith'] ) ) {
						$string_name = "slider-{$id}-layer-{$layer['props']['uuid']}-url";
						$layer['props']['url'] = apply_filters( 'wpml_translate_single_string', $layer['props']['url'], 'LayerSlider Sliders', $string_name );

					// Old implementation
					} else {
						$string_name = '<'.$layer['props']['type'].':'.substr(sha1($layer['props']['url']), 0, 10).'> layer on slide #'.($slidekey+1).' in slider #'.$id.'';
						$layer['props']['url'] = apply_filters( 'wpml_translate_single_string', $layer['props']['url'], 'LayerSlider WP', $string_name);
					}

#3 Öffnen Sie den Slider, bearbeiten Sie diese (z.B. ein Leerzeichen im Layer-Text hinzufügen) und speichern Sie.

#4 Die Anchor Links sind nun in der String Translation Tabelle registriert. Markieren Sie die Strings und wählen Sie unterhalb der Tabelle "Die Sprache der ausgewählten Strings ändern" und ändern Sie die Strings von Englisch auf Deutsch (Damit die deutsche Flagge neben dem String erscheint).

#5 Übersetzen Sie nun die Links zu /en/ => z.B..: /en/services/#mindful_business.

Funktionierendes Beispiel:
Mindfull Business => versteckter Link
URL Ziel ist nun versteckter Link

Freundliche Grüße
Marcel

Dezember 1, 2020 unter 8:00 pm #7573787

oliverT-11

Hallo Marcel,

Ihre Mühe und Ihre Hilfe weiß ich wirklich sehr zu schätzen. Vielen Dank!

Gerne probiere ich den vorgeschlagenen Workaround. Könnten Sie mir dafür bitte mitteilen, welche Dateien ich dafür verwenden soll? Ich habe beide Dateien ja bisher zweimal mit Ihren Angaben angepasst. Mache ich die Änderungen in der Original-Datei oder in der zuletzt geänderten? Und könnten Sie mir bitte wieder die jeweils den Inhalt der vorausgehenden Zeile nenne, damit ich auch wirklich die richtige Stelle zum Einfügen finde?

Nochmals vielen herzlichen Dank!

Viele Grüße,
Oliver

Dezember 2, 2020 unter 9:24 am #7577449

Marcel
Supporter

Sprachen: Englisch (English ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+01:00)

Hallo Oliver,

falls Sie die Originaldateien noch haben können Sie die Änderung in diesen Dateien durchführen und per FTP aktualisieren. Oder Sie entfernen die Änderungen manuell und fügen es die Änderungen dann nach den oben ein.

Sie können auch gerne die 2 Files einfach von meiner Testseite kopieren:

Zugang:
versteckter Link

Files:
versteckter Link

versteckter Link

Freundliche Grüße
Marcel