Support » Allgemeine Fragen » Javascript auf einer Seite einbauen
Javascript auf einer Seite einbauen
-
Hallo zusammen
Ich bin neu bei wordpress und bin gerade dabei meine Webseite von einem anderem Anbieter nach WordPress zu migrieren.
Soweit hat bis jetzt alles ganz gut geklappt, nur habe ich auf einer Seite ein script am laufen, was in wordpress nicht so recht funktionieren will.
Dieses script soll auch nur auf dieser Seite aufgerufen werden und steht eigentlich im Header
Ich gebe euch jetzt einfach mal den Headerinhalt welcher auf der alten Seite u.A. benutz wird.<head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="eigen/style.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <script src="calculator/main.js"></script> </head>
Mir geht es nicht um das CSS (das ist eh hinfällig und wurde neu erstellt, sondern lediglich um die Einbindung der script Abfragen in WordPress.
Wäre echt dankbar für eure Ratschläge
-
Zum Einbinden von JavaScript bietet dir WordPress eine Funktion
wp_enqueue_script()
(Referenz), die du in einem Child Theme oder einem eigenen Plugin verwenden kannst. Die Funktion wird über den Hookwp_enqueu_scripts
eingebunden und sorgt dafür, dass z.B. jQuery nicht von jedem Plugin neu geladen wird (und damit zu JavaScript-Konflikten führt).add_action( 'wp_enqueue_scripts', 'my_javascript' ); function my_javascript() { wp_enqueue_script( 'angularjs', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"', array(), '1.6.4', false ); wp_enqueue_script( 'calculator', plugins_url( 'calculator/main.j', __FILE__ ), array( 'angularjs' ), false, false ); }
(Da das Bootstrap-JavaScript Bestandteil des Themes ist, habe ich mich jetzt nur auf das auf Angular basierende JavaScript beschränkt.)
Hallo Bego Mario Garde
Danke für deine Hilfe
Habe ich das richtig verstanden, das der Code
add_action( 'wp_enqueue_scripts', 'my_javascript' ); function my_javascript() { wp_enqueue_script( 'angularjs', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"', array(), '1.6.4', false ); wp_enqueue_script( 'calculator', plugins_url( 'calculator/main.j', __FILE__ ), array( 'angularjs' ), false, false ); }
in die
functions.php
des themes eingefügt werden muss?
habe ich dann nicht das Problem, dass das script auf jeder Seite ausgeführt wird?
Ich habe ebenfalls versucht den code mittels denHeader and Footer Scripts Plugin
direkt auf der Seite ein zu bauen, aber da wird mir auf der Seite nur der Code angezeigt… in die functions.php des themes eingefügt werden muss?
Des Child Themes – sonst wird das ja beim nächsten Update überschrieben. Deshalb hatte ich ja auch geschrieben „…eine Funktion wp_enqueue_script() (Referenz), die du in einem Child Theme oder einem eigenen Plugin verwenden kannst.“habe ich dann nicht das Problem, dass das script auf jeder Seite ausgeführt wird?
Stimmt, da fehlt noch was – sorry. Probier’s mal so:add_action( 'wp_enqueue_scripts', 'my_javascript' ); function my_javascript() { if( is_page( 'Brimborium' ) ) { wp_enqueue_script( 'angularjs', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"', array(), '1.6.4', false ); wp_enqueue_script( 'calculator', plugins_url( 'calculator/main.j', __FILE__ ), array( 'angularjs' ), false, false ); } }
Hier wird das JavaScript nur auf der Seite „Brimborium“ eingebunden.
(Alternativ kannst du auch eine oder mehrere Seiten-IDs angeben, also
is_page( [42, 4711] )
)- Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von Bego Mario Garde. Grund: Nachtrag wegen Seiten-IDs
??? komme da nicht so ganz draus??
was sehr speziell ist, wenn ich
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <script src="calculator/main.js"></script>
direkt in das header footer plugin einfüge, funktioniert das script auf der Vorschauseite, wenn ich dann aber zurück auf bearbeiten gehe und speicher klappt es nicht mehr.
Child Themes muss ich noch zusätzlich anlenen oder?- Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von bitcoin4free.
OK, nochmal, zum Mit
schreibenlesen:Wenn du Änderungen an einem Theme vornimmst, werden diese Änderungen überschrieben, sobald das Theme aktualisiert wird. Deshalb solltest du entweder den Code woanders unterbringen (z.B. eigenes Plugin) oder ein Child Theme erstellen. Wie das geht, haben wir hier mehrfach beschrieben; du kannst das gerne hier nachlesen.
JavaScript einfach in den Header einzubinden, ist keine gute Idee, weil dann ein Plugin unter Umständen die gleiche Funktionalität (z.B. Angular) mitbringt und so einen Fehler erzeugt. Deshalb gibt es die Funktion
wp_enqueue_script()
. Die Funktion wird über den Hookwp_enqueue_scripts
(Plural!) wahlweise im Header oder Footer eingebunden.OK? 🙂
das mit
wp_enqueue_script()
habe ich verstanden, das Child Theme habe ich auch angelegt, meinefunctions.php
vom Child Theme sieht demnach so aus:function twentyseventeen_child_styles() { wp_deregister_style( 'twentyseventeen-style'); wp_register_style('twentyseventeen-style', get_template_directory_uri(). '/style.css'); wp_enqueue_style('twentyseventeen-style', get_template_directory_uri(). '/style.css'); wp_enqueue_style( 'childtheme-style', get_stylesheet_directory_uri().'/style.css', array('twentyseventeen-style') ); } add_action( 'wp_enqueue_scripts', 'twentyseventeen_child_styles' ); add_action( 'wp_enqueue_scripts', 'my_javascript' ); function my_javascript() { if( is_page( 'calculator' ) ) { wp_enqueue_script( 'angularjs', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"', array(), '1.6.4', false ); wp_enqueue_script( 'calculator', plugins_url( 'calculator/main.j', __FILE__ ), array( 'angularjs' ), false, false ); } }
der html text der seite ist folgender:
<div> <div class="text-center" style="margin: 3em;"> <h2></h2> </div> <div class="row"> <div class="col-sm-1"></div> <div class="col-sm-10 text-center"><form id="main-form" class="form-horizontal" style="padding: 2em;"> <div class="form-group"> <label class="control-label col-sm-2">Hash Power:</label> <div class="col-sm-10"> <div class="input-group"><input class="form-control" style="width: auto; display: inline-block;" type="number" placeholder="10" /> <select class="selectpicker form-control" style="width: auto; display: inline-block;"></select></div> </div> </div> <!-- Eigene Reihen --> <div class="form-group"> <label class="control-label col-sm-2">Anbieter:</label> <div class="col-sm-1"></div> </div> <div class="form-group"> <label class="control-label col-sm-2">Preis für den Vertrag:</label> <div class="col-sm-5"><input class="form-control" type="number" placeholder="0.0 / 0,0 $" /></div> </div> <div class="form-group"> <label class="control-label col-sm-2">Laufzeit:</label> <div class="col-sm-1"></div> </div> <div class="form-group"> <label class="control-label col-sm-2">mindest Auszahlung:</label> <div class="col-sm-5"><input class="form-control" type="number" placeholder="0.0 / 0,0 BTC" /></div> </div> <!-- Eigene Reihen --> </form></div> <div class="col-sm-1"></div> </div> <div class="row"> <div class="col-sm-1"></div> <div class="col-sm-10"> erreichen des mindest Payout nach <table id="main-table" class="table table-bordered" style="margin-left: auto; margin-right: auto; width: 100%;"> <tbody> <tr><!-- <th>mindest Payout</th> --><!-- <th>prifitable</th> --></tr> <tr><!-- <td>฿ {{getminPayout()}}</td> --> <td>{{getPayoutdays()}} Tagen</td> <td>{{(getPayoutdays()/30).toPrecision(2)}} Monaten</td> <td>{{(getPayoutdays()/365).toPrecision(2)}} Jahren</td> <!-- <td>{{getprofitable()}}</td> --></tr> </tbody> </table> <div class="row"> <div class="col-sm-1"></div> <div class="col-sm-10"> <table id="main-table" class="table table-bordered" style="margin-left: auto; margin-right: auto; width: 100%;"> <thead> <tr> <th>Profit</th> <th>BTC ฿</th> <th>USD $</th> <!-- <th>GBP</th> --> <th>EUR €</th> <th>Fee $</th> <th>Profit $</th> <th>Return on Invest</th> </tr> </thead> <tbody> <tr> <td>Pro Tag</td> <td>{{getBTCPerDay()}}</td> <td>{{getUSDPerDay()}}</td> <!-- <td> {{getGBPPerDay()}}</td> --> <td>{{getEURPerDay()}}</td> <td>{{getminingfeePerDay()}}</td> <td>{{getProfitPerDay()}}</td> <td>{{getROI()}} Tagen</td> </tr> <tr> <td>Pro Woche</td> <td>{{(getBTCPerDay() * 7).toPrecision(2)}}</td> <td>{{(getUSDPerDay() * 7).toFixed(2)}}</td> <!-- <td> {{(getGBPPerDay() * 7).toFixed(2)}}</td> --> <td>{{(getEURPerDay() * 7).toFixed(2)}}</td> <td>{{(getminingfeePerDay() * 7).toFixed(2)}}</td> <td>{{(getProfitPerDay() * 7).toFixed(2)}}</td> <td>{{(getROI() / 7).toFixed(2)}} Wochen</td> </tr> <tr> <td>Pro Monat</td> <td>{{(getBTCPerDay() * 30).toPrecision(2)}}</td> <td>{{(getUSDPerDay() * 30).toFixed(2)}}</td> <!-- <td> {{(getGBPPerDay() * 30).toFixed(2)}}</td> --> <td>{{(getEURPerDay() * 30).toFixed(2)}}</td> <td>{{(getminingfeePerDay() * 30).toFixed(2)}}</td> <td>{{(getProfitPerDay() * 30).toFixed(2)}}</td> <td>{{(getROI() / 30).toFixed(2)}} Monaten</td> </tr> <tr> <td>Pro Jahr</td> <td>{{(getBTCPerDay() * 365).toPrecision(2)}}</td> <td>{{(getUSDPerDay() * 365).toFixed(2)}}</td> <!-- <td> {{(getGBPPerDay() * 365).toFixed(2)}}</td> --> <td>{{(getEURPerDay() * 365).toFixed(2)}}</td> <td>{{(getminingfeePerDay() * 365).toFixed(2)}}</td> <td>{{(getProfitPerDay() * 365).toFixed(2)}}</td> <td rowspan="2">{{(getROI() / 365).toFixed(2)}} Jahren</td> </tr> <tr> <td>Nach Laufzeit</td> <td>{{(getBTCPerDay() * 365 * getRuntime()).toPrecision(2)}}</td> <td>{{(getUSDPerDay() * 365 * getRuntime()).toFixed(2)}}</td> <!-- <td> {{(getGBPPerDay() * 365).toFixed(2)}}</td> --> <td>{{(getEURPerDay() * 365 * getRuntime()).toFixed(2)}}</td> <td>{{(getminingfeePerDay() * 365 * getRuntime()).toFixed(2)}}</td> <td>{{(getProfitPerDay() * 365* getRuntime()).toFixed(2)}}</td> </tr> </tbody> </table> <div class="row"> <div class="col-sm-1"></div> <div class="col-sm-10"> Berechnung basiert auf aktuellen <table id="main-table" class="table table-bordered" style="margin-left: auto; margin-right: auto; width: 100%;"> <tbody> <tr> <td>Bitcoinkurs</td> <td>$ {{(getKurs())}}</td> </tr> <tr> <td>Difficulty</td> <td>{{(getDi())}}</td> </tr> </tbody> </table> </div> <div class="col-sm-1"></div> </div> <div class="row"> <div class="col-sm-1"></div> <div class="col-sm-10 text-center"> <p style="max-width: 100%;">Cloudmining Profit Calculator 0.5</p> <p style="max-width: 100%;">DISCLAIMER: Diese Daten basieren auf dem Wechselkurs von <a href="http://www.coindesk.com" target="_blank" rel="noopener">coindesk.com</a> & Netzwerkdaten von <a href="http://www.blockchain.info" target="_blank" rel="noopener">blockchain.info</a>. Berechnet mit dem 12.5 Bitcoin Block Reward <a href="https://en.bitcoin.it/wiki/Controlled_supply#Projected_Bitcoins_Short_Term" target="_blank" rel="noopener">welcher sich ändert </a>. <a href="http://www.bitcoinblockhalf.com/" target="_blank" rel="noopener">Informationen zum Block Reward findest du hier</a> Dieser Calculator dient lediglich zum Überblick und verschiedener Anbieter. Weder der Mininganbieter noch bitcoin4free können für die Richtigkeit Verantwortlich gemacht werden.</p> </div> <div class="col-sm-1"></div> </div> </div> </div> </div> </div> </div>
und das script ist dieses:
let app = angular.module('app-calculator', []); app.controller('mainController', function($scope, $http){ $scope.reward = 12.5; $scope.difficulty = 0; $scope.hashingPower = 1; // $scope.minpayout = 0.0; $scope.bitcoin = { time: Date.now(), exchangerates: { usd: 0, gbp: 0, eur: 0 } }; $scope.hashingUnitOptions = { availablehashingUnits: [ {value: 1, name: 'H/s'}, {value: 1000, name: 'KH/s'}, {value: 1000000, name: 'MH/s'}, {value: 1000000000, name: 'GH/s'}, {value: 1000000000000, name: 'TH/s'}, ], selectedHashingUnit: {value: 1000000000000, name: 'TH/s'} }; $scope.providerUnitOptions = { availableproviderUnits: [ {value: 0, name: 'Mining Anbieter ausw\u00e4hlen'}, {value: 0.0035, name: 'Hashflare SHA-256'}, {value: 0.005, name: 'Hashflare Scrypt'}, {value: 0.0028, name: 'Genesis SHA'}, {value: 1/150, name: 'CCG Mining'}, {value: 0.0047, name: 'fflak mining'}, ], selectedProviderUnit: {value: 0, name: 'Mining Anbieter ausw\u00e4hlen'} }; $scope.timeUnitOptions = { availabletimeUnits: [ {value: 0, name: 'Vertragslaufzeit ausw\u00e4len'}, {value: 1, name: '1 Jahr '}, {value: 2, name: '2 Jahre'}, {value: 3, name: '3 Jahre'}, {value: 4, name: '4 Jahre'}, {value: 5, name: '5 Jahre / Lifetime'}, ], selectedTimeUnit: {value: 0, name: 'Vertragslaufzeit ausw\u00e4len'} }; $http.get('http://api.coindesk.com/v1/bpi/currentprice.json').then(function (response) { let cdr = response.data; $scope.bitcoin.exchangerates.usd = parseFloat(cdr.bpi.USD.rate.replace(',','')); $scope.bitcoin.exchangerates.gbp = parseFloat(cdr.bpi.GBP.rate.replace(',','')); $scope.bitcoin.exchangerates.eur = parseFloat(cdr.bpi.EUR.rate.replace(',','')); }); $http.get('https://blockchain.info/q/getdifficulty?cors=true').then(function (response) { $scope.difficulty = parseFloat(response.data); }); $scope.getBTCPerDay_Exact = function () { return 86400 / ($scope.difficulty * (Math.pow(2,48)/65535) / ($scope.hashingPower * $scope.hashingUnitOptions.selectedHashingUnit.value)) * $scope.reward; }; $scope.getBTCPerDay = function () { let temp = $scope.getBTCPerDay_Exact(); return temp.toPrecision(2); }; $scope.getUSDPerDay = function () { let temp = $scope.getBTCPerDay_Exact(); temp *= $scope.bitcoin.exchangerates.usd; return temp.toFixed(2); }; $scope.getGBPPerDay = function () { let temp = $scope.getBTCPerDay_Exact(); temp *= $scope.bitcoin.exchangerates.gbp; return temp.toFixed(2); }; $scope.getEURPerDay = function () { let temp = $scope.getBTCPerDay_Exact(); temp *= $scope.bitcoin.exchangerates.eur; return temp.toFixed(2); }; $scope.getminingfeePerDay = function () { let temp =$scope.providerUnitOptions.selectedProviderUnit.value * ($scope.hashingPower * $scope.hashingUnitOptions.selectedHashingUnit.value) / 10000000000 ; return temp.toFixed(2); }; $scope.getProfitPerDay = function () { let temp = $scope.getUSDPerDay() - $scope.getminingfeePerDay(); return temp.toFixed(2); }; $scope.getROI = function () { let temp = $scope.contractPrice / $scope.getProfitPerDay(); return temp.toFixed(0); }; $scope.getminPayout = function () { let temp = $scope.minpayout; return temp.toFixed(4); }; $scope.getPayoutdays = function () { let temp = $scope.minPayout / $scope.getBTCPerDay() ; return temp.toFixed(0); }; $scope.getRuntime = function () { let temp = $scope.timeUnitOptions.selectedTimeUnit.value ; return temp.toFixed(0); }; $scope.getKurs = function () { let temp = $scope.bitcoin.exchangerates.usd; return temp.toFixed(2); }; $scope.getDi = function () { let temp = $scope.difficulty; return temp.toFixed(2); }; });
leider klappt es aber nicht, die berechnung wird nicht ausgeführt und die Dropdownauswahl funktioniert auch nicht.
bin ich zu blöd???
- Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von bitcoin4free.
- Diese Antwort wurde geändert vor 6 Jahren, 4 Monaten von Bego Mario Garde.
jetzt wird mein Beitrag icht gezeigt???
habe gerade den inhalt der
main.js
derfunctions.php
der Child Theme und das html der Seite gepostet. aber irgendwie wird der nicht angezeigtWo liegt denn das Script? Vielleicht stimmt die Pfadangabe nicht?
Was sagt die Konsole der Entwickler-Tools deines Browsers?das script liegt in
wordpress/calculator
wobeiwordpress
das Stammverzeichnis ist.
Die Konsole von firefox sagt mir `SyntaxError: unterminated comment
ReferenceError: jQuery is not defined`
bekomme den Fehler aber nur bei der WordPress Seite, auf der alten Webseite funktioniert das script tadellos.Schau dir diese Zeile doch bitte nochmal genau an:
wp_enqueue_script( 'calculator', plugins_url( 'calculator/main.js', __FILE__ ), array( 'angularjs' ), false, false );
plugins_url()
ist weder das Web-Stammverzeichnis, noch das Verzeichnis eines Child Themes. Also: JavaScript in das Child-Theme verschieben, am besten in ein Unterverzeichnis/js
, stattmain.js
in z.B.calculator.js
umbenennen und dann mitwp_enqueue_script( 'calculator', get_template_directory_uri() . '/js/calculator.js'), array( 'angularjs' ), false, false );
einbinden.
Die Fehlermeldung bezüglich jQuery kommt wahrscheinlich von einem anderen Plugin. Deaktivier mal alle und aktiviere sie dann einzeln, bis die Fehlermeldung kommt, um den Verursacher festzustellen.
hm… also wenn ich in der
funktions.php
folgenden Inhalt habefunction twentyseventeen_child_styles() { wp_deregister_style( 'twentyseventeen-style'); wp_register_style('twentyseventeen-style', get_template_directory_uri(). '/style.css'); wp_enqueue_style('twentyseventeen-style', get_template_directory_uri(). '/style.css'); wp_enqueue_style( 'childtheme-style', get_stylesheet_directory_uri().'/style.css', array('twentyseventeen-style') ); } add_action( 'wp_enqueue_scripts', 'twentyseventeen_child_styles' ); add_action( 'wp_enqueue_scripts', 'my_javascript' ); function my_javascript() { if( is_page( 'calculator' ) ) { wp_enqueue_script( 'angularjs', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"', array(), '1.6.4', false ); wp_enqueue_script( 'calculator', get_template_directory_uri() . '/js/calculator.js'), array( 'angularjs' ), false, false ); } }
bekomme ich eine leere Seite und auch das Backend ist nicht mehr erreichbar.
diese AnpassungenAlso: JavaScript in das Child-Theme verschieben, am besten in ein Unterverzeichnis /js, statt main.js in z.B. calculator.js umbenennen und dann mit
habe ich selbstverständlich gemacht.
Da war nach der Änderung noch eine Klammer übrig geblieben, die da nicht hingehört. Probier mal …
add_action( 'wp_enqueue_scripts', 'my_javascript' ); function my_javascript() { if( is_page( 'calculator' ) ) { wp_enqueue_script( 'angularjs', 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"', array(), '1.6.4', false ); wp_enqueue_script( 'calculator', get_template_directory_uri() . '/js/calculator.js', array( 'angularjs' ), false, false ); } }
Leider bringts das auch nichts ich vermute mal mein WP kommt mit AngularJS nicht zurecht. Schade eigentlich, auf meiner Zeta Seite hat das ganze wunderbar funktioniert, auf der WP Seite bekomme ich es nicht ams laufen.
Ich bekomme immer die Variablen auf der Seite aber keine Werte, auch das Dropdownmenü ist ohne Funktion.Schade. Ich geb’s auf. Ohne URL zur Website und Einblick in deine Änderungen kann ich dir nicht helfen.
Die URL gebe ich dir gerne:
Das ist die neue Seite (aktuell noch auf einem eigenen Qnap-Server) http://denni.ddns.net:888/mining/calculator/ (weis nicht ob du von aussen darauf zugreifen kannst.
Und das ist die Seite wo es funktioniert http://bitcoin4free.biz/calculator.html (also so wie es sein sollte)
- Das Thema „Javascript auf einer Seite einbauen“ ist für neue Antworten geschlossen.