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.
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';
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.