Mehrere Aufrufe von Javascript von Shortcode auf einer Seite

Ich bereite Plugin vor und ich habe Schwierigkeiten, Javascript von jedem (gleichen) Shortcode in einer Wp-Seite / Post zu nennen (und zurückzugeben). JavaScript gibt nur Werte zurück, die auf der Seite den Shortcode enthalten.

PHP-Code hier:

add_shortcode( 'ada_chart', 'ada_chart_stranka' ); function ada_chart_stranka ($atts) { $a = shortcode_atts( array( 'cid' => '', ), $atts ); $cislo_chart = $a['cid']; wp_register_script( 'ada_chart_handle', plugins_url().'/ada-chart/js/ada-chart1.js' ); $ada_sheet_params = array( 'ada_ch_cislo' => $cislo_chart, ); wp_localize_script( 'ada_chart_handle', 'ada_ch', $ada_sheet_params ); wp_enqueue_script( 'ada_chart_handle'); return 'atribut: '.$cislo_chart; } 

und JS-Skript hier:

  var cisloChart = ada_ch.ada_ch_cislo; document.getElementById('chart_div'+cisloChart).innerHTML = 'Cislo: ' + cisloChart; 

Kann jemand mich heplen? Vielen Dank

Solutions Collecting From Web of "Mehrere Aufrufe von Javascript von Shortcode auf einer Seite"

Ein Skript sollte nur einmal pro Seite in die Warteschlange eingereiht und lokalisiert werden. Also, was Sie beschreiben, ist das richtige Verhalten. Ich denke, Sie verwirren die Lokalisierung eines Skripts mit dem Drucken von Inline-JavaScript. Einreihen und Lokalisieren sollte auch in der Aktion wp_enqueue_scripts .

Sie müssen in einem anderen Ansatz denken.

Zum Beispiel (nur ein Beispiel) könnten Sie die Dataset-API verwenden:

Platzieren Sie zuerst das Skript in die Warteschlange:

 add_action( 'wp_enqueue_scripts', 'cyb_enqueue_scripts' ); function cyb_enqueue_scripts() { wp_enqueue_script( 'ada_chart_handle', plugins_url().'/ada-chart/js/ada-chart1.js' ); } 

Zweitens, verwenden Sie das Datenattribut, um den cid Wert aufzunehmen:

 add_shortcode( 'ada_chart', 'ada_chart_stranka' ); function ada_chart_stranka ($atts) { $a = shortcode_atts( array( 'cid' => '', ), $atts ); $cislo_chart = $a['cid']; return '
'; }

Drittens schreiben Sie JavaScript, das die Datenmengen-API verwendet, um das Data-CID-Attribut zu lesen und die gewünschte Aktion auszuführen:

 // Get all elements with data-cid attribute var a = document.querySelectorAll('[data-cid]'); // Loop over all selected elements for (var i in a) if (a.hasOwnProperty(i)) { // Get the value of data-cid attribute for current element in the loop var cid = a[i].getAttribute('data-cid'); // Do something with the cid value } 

Cybmeta,

Vielen Dank für deine Antwort. Deine Idee hat mir viele schlaflose Nächte erspart

Ich habe versucht, Ihre Lösung zu verwenden, aber es gab einige Probleme. Der Browser hat leere divs angezeigt, ohne irgendeinen Fehler in Javascript anzuzeigen.

Aber schließlich habe ich deine und meine Lösung kombiniert, die sehr gut funktioniert. Scheint, dass wp_enqueue_scripts besser innerhalb des Shortcodes zu verwenden ist.

Endgültige Lösung:

PHP-Skript:

  add_shortcode( 'ada_chart', 'ada_chart_stranka' ); function ada_chart_stranka ($atts) { $a = shortcode_atts( array( 'cid' => '', ), $atts ); $cislo_chart = $a['cid']; wp_enqueue_script( 'ada_chart_handle', plugins_url().'/ada-chart/js/ada-chart.js'); return 'atribut: '.$cislo_chart.'
'; }

Javascript:

  var a = document.querySelectorAll('[data-cid]'); for (var i in a) if (a.hasOwnProperty(i)) { // Get the value of data-cid attribute for current element in the loop var cid = a[i].getAttribute('data-cid'); 'Cislo: ' + cid; // Do something with the cid value document.getElementById('chart_div'+cid).innerHTML = 'Cislo: ' + cid; }