Navigation überspringen

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

Problem:
Der Kunde hat ein Shortcode, das JavaScript-Code ausgibt, welcher auf PHP-Funktionen zugreifen soll.
Solution:
Wir empfehlen, die Anweisungen zur Lokalisierung von Skripten in WordPress zu befolgen und insbesondere die Funktion

wp_localize_script()

zu verwenden, um Daten von PHP an JavaScript zu übergeben. Dies ist notwendig, da JavaScript auf der Client-Seite ausgeführt wird und keinen direkten Zugriff auf PHP-Funktionen hat. Weitere Informationen und Anleitungen finden Sie in der WordPress-Dokumentation unter wp_localize_script() und auf unserer WPML-Dokumentationsseite unter Textübersetzung für Themes aktivieren, die nicht mit WPML kompatibel sind.
Bitte beachten Sie, dass wir keinen Support für individuelle Anpassungen anbieten. Für weiterführende Hilfe empfehlen wir, einen zertifizierten WPML-Dienstleister zu kontaktieren, den Sie hier finden können.

Falls diese Lösung für Sie nicht relevant ist, weil sie veraltet ist oder nicht auf Ihren Fall zutrifft, empfehlen wir Ihnen, ein neues Support-Ticket zu eröffnen. Wir empfehlen auch, die Seite mit bekannten Problemen (https://wpml.org/known-issues/) zu überprüfen, die Version der dauerhaften Lösung zu verifizieren und zu bestätigen, dass Sie die neuesten Versionen von Themes und Plugins installiert haben.

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 1 Antwort, hat 2 Stimmen.

Zuletzt aktualisiert von Marcel Vor 9 Monaten, 2 Wochen.

Assistiert von: Marcel.

Autor Beiträge
September 9, 2024 um 1:14 pm #16156618

oliverG-53

Hintergrund des Themas:
Ich habe ein Shortcode, welches JavaScript-Code ausgibt:

function generate_toc_shortcode()
{
ob_start();
?>

document.addEventListener('DOMContentLoaded', function () {
generateTableOfContents();

let tocHeading = document.querySelector('#toc-heading');
let tocContent = document.querySelector('.toc-content');
let tocToggleIcon = document.querySelector('.toc-toggle-icon');

tocHeading.addEventListener('click', function () {
$(tocContent).slideToggle(300, function () {
if (tocContent.style.display === 'none' || getComputedStyle(tocContent).display === 'none') {
tocToggleIcon.classList.remove('collapsed');
} else {
tocToggleIcon.classList.add('collapsed');
}
});
});
});

function generateTableOfContents() {
let tocContainer = document.querySelector('#inhaltsverzeichnis');
if (tocContainer) {
let mainContent = document.querySelector('#main-content');
let tocHeading = document.createElement('h2');
tocHeading.id = 'toc-heading';
tocHeading.innerText = "Inhaltsverzeichnis";
let tocToggleIcon = document.createElement('span');
tocToggleIcon.className = 'toc-toggle-icon';
tocHeading.appendChild(tocToggleIcon);

let toc = document.createElement('ul');
toc.className = 'nxt-toc toc-content';
let lastH2Item;
let idCounter = 1;
Array.from(mainContent.querySelectorAll('h2, h3')).forEach(function (heading) {
let parentSection = heading.closest('#wissen-section, #unsere-loesungen-grid');
if (parentSection) {
return;
}
heading.id = 'heading' + idCounter;
idCounter++;
let item = document.createElement('li');
let link = document.createElement('a');
link.href = '#' + heading.id;
link.innerText = heading.innerText;
link.classList.add('con-toc-link');
link.classList.add('et_smooth_scroll_disabled');

link.addEventListener('click', function (event) {
event.preventDefault();
let headerOffset = document.querySelector('header .et_pb_row').offsetHeight + 50 || 0;
heading.style.scrollMarginTop = headerOffset + 'px';

heading.scrollIntoView({
behavior: 'smooth',
block: 'start',
});
});
item.appendChild(link);
if (heading.tagName === 'H2') {
toc.appendChild(item);
lastH2Item = item;
} else if (heading.tagName === 'H3' && lastH2Item) {
let subList = lastH2Item.querySelector('ul');
if (!subList) {
subList = document.createElement('ul');
subList.className = 'h3';
lastH2Item.appendChild(subList);
}
subList.appendChild(item);
}
});
tocContainer.appendChild(tocHeading);
tocContainer.appendChild(toc);
}
}

<?php
return ob_get_clean();
}

add_shortcode('nxt-toc', 'generate_toc_shortcode');

Dieser Code generiert ein Inhaltsverzeichnis.

Die Symptome:
Auf der automatisch übersetzen Seite steht immer noch das deutsche Wort da anstelle von "Table of Contents".

Fragen:
Wie kann ich das korrekt übersetzen?

September 9, 2024 um 2:04 pm #16157017

Marcel
Unterstützer

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

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

Hallo,

bitte stellen Sie sicher, dass Sie unseren Anleitungen folgen und auch die Anweisungen von WordPress zur Lokalisierung von Skripten beachten:

- https://developer.wordpress.org/reference/functions/wp_localize_script/
- https://wpml.org/documentation/support/enabling-text-translation-for-themes-not-compatible-with-wpml/

Die Funktion getText() funktioniert nur in PHP, da sie Teil des serverseitigen Lokalisierungssystems von WordPress ist, das Inhalte vor der Auslieferung an den Browser übersetzt. JavaScript läuft auf der Client-Seite und hat keinen Zugriff auf PHP-Funktionen, daher müssen Übersetzungen mithilfe von wp_localize_script() von PHP an JavaScript übergeben werden.

Bitte beachten Sie, dass wir keinen Support für individuelle Anpassungen anbieten können. Ich werde jedoch versuchen, Sie in die richtige Richtung zu weisen. Sie können ein Beispiel in der Praxis dazu hier sehen: https://stackoverflow.com/questions/16010820/wp-localize-script-not-working

Sollten Sie weiter Hilfe dazu benötigen, empfehle ich Ihnen einen zertifizierten WPML Dienstleister dafür zu kontaktieren. Sie finden diese hier:

Viele Grüße
Marcel