So fügen Sie Javascript korrekt in functions.php
-
-
Dasist verrückt: Können Sie die Pfeileim Code,der siegeneriert,nichtbearbeiten?(Oder wirdes voneinerexternen Quelle heruntergeladen?) Injedem Fall können Siebeide Ersetzungenin einereinzigen Funktion durchführen,um zu vermeiden,dass dergesamte HTML-Codeim Warenkorbblock zweimalgelesen undgeschrieben wird.Ich kenne keine Möglichkeit,das direkt ausfunctions.phpin die Seiteeinzufügen,aber Sie könnenesin einer separaten Skriptdatei speichern (falls Sienoch keine haben,können Siees hinzufügen) und dann [`wp-enqueue-script`] (http://codex.wordpress.org/Function_Reference/wp_enqueue_script)es.Siemüssen auch die "$"in "jQuery" ändern (siehe diese Seite,Abschnitt 7).That's crazy: can't you edit the arrows out in the code that generates them? (Or is it downloaded from an external source?) In any case you can do both replaces in a single function to avoid reading and writing all the HTML inside the cart block twice. I don't know a way to directly inject that into the page from functions.php but you can save it in a separate script file (if you don't already have one you can add it to) and then [`wp-enqueue-script`](http://codex.wordpress.org/Function_Reference/wp_enqueue_script) it. You'll also have to change the `$`s to `jQuery` (see that page section 7)
- 0
- 2014-06-25
- Rup
-
Nein,ichbin mir ziemlich sicher,dasses vor dem Einfügennichtentfernt werden kann.Wennesgeht,habeich keinen Weggefunden,es zutun. Guter Punkt,umesin einereinzigen Funktion hinzuzufügen.Würdees so aussehen? $ (Dokument) .ready (Funktion () { $ (". woocommerce-cart"). html (Funktion (i,val) { return val.replace ("→",""); return val.replace ("←",""); }); }); Ich werdein das Enqueue-Skript schauen.Scheint allerdingsetwas kompliziert zu sein. Danke!Nope, I'm pretty sure it can't be removed before inserted. If it can, I haven't been able to find a way to do it. Good point about adding it in a single function. Would it look like this? $(document).ready(function() { $(".woocommerce-cart").html(function(i, val) { return val.replace(" →", ""); return val.replace("← ", ""); }); }); I will look into the enqueue script. Seems a bit complicated, though.. Thanks!
- 0
- 2014-06-25
- user2806026
-
Okay.Ich habe diesen Ansatz ausprobiert. Erstellteeine Dateimit dem Namen 'removeArrows.js' und legte siein meinem Plugin-Ordner ab.Dies hat dengleichen Inhalt wie der ursprüngliche Code,außerjQuery statt $. dann habeich Folgendes zufunctions.php hinzugefügt; `Funktion wpb_adding_scripts () { wp_register_script ('my_amazing_script',plugins_url ('removeArrows.js',__FILE__),array ('jquery'),'1.1',true); wp_enqueue_script ('my_amazing_script'); }} add_action ('wp_enqueue_scripts','wpb_adding_scripts'); (Entschuldigung,ich kannnicht herausfinden,wie der Code richtig angezeigt wird.) Das hatnichtfunktioniert.Können Siemir helfen,das Problem zubeheben?Okay. I tried this approach; Made a file named 'removeArrows.js' and placed it in my plugin folder. This has the same content as the original code, except jQuery instead $. then I added the following to functions.php; `function wpb_adding_scripts() { wp_register_script('my_amazing_script', plugins_url('removeArrows.js', __FILE__), array('jquery'),'1.1', true); wp_enqueue_script('my_amazing_script'); } add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); (Sorry, I cant figure out how to make the code display properly) This did not work. Can you help me fix it?
- 0
- 2014-06-25
- user2806026
-
Bitte reichen Sieeine [Bearbeiten]ein undfügen Sie alle relevanten Informationen ** direkt zu Ihrer Frage hinzu ** Verwenden Sienicht den Kommentarbereich,um Code hinzuzufügenPlease file an [edit] and add all relevant info **directly to your question** Do not use the comment section to add code
- 1
- 2014-06-26
- Pieter Goosen
-
4 Antworten
- Stimmen
-
- 2014-06-26
Ihr
$scr
in Ihremwp_register_script()
Funktionistfalsch. Da sich Ihrefunctions.phpin Ihrem Pluginbefindet und sich Ihre removeArrows.jsim Stammverzeichnis Ihres Pluginsbefindet,sollte Ihr$scr
so aussehenplugins_url( '/removeArrows.js' , __FILE__ )
Ein weiterer wichtiger Punktist,dassesimmerempfehlenswertist,Ihre Skripte und Stile zuletzt zu laden. Dadurch wird sichergestellt,dassesnicht von anderen Skripten und Stilen überschrieben wird. Fügen Sie dazueinfach Ihrem Prioritätsparameter (
$priority
) vonadd_action
.add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
Und immer Skripte und Stile über den
wp_enqueue_scripts
Aktions-Hook,da dies der richtige Hookist. Laden Sie Skripte und Stilenicht direktinwp_head
oderwp_footer
EDIT
Wenn Siefür Themen angegeben haben,dass Siejetzt allesin Ihr Thema verschoben haben,ändert sich Ihr
$scr
in diesesget_template_directory_uri() . '/removeArrows.js'
für übergeordnete Themen und dies
get_stylesheet_directory_uri() . '/removeArrows.js'
für untergeordnete Themen. Ihr vollständiger Code sollte so aussehen
function wpb_adding_scripts() { wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true); wp_enqueue_script('my_amazing_script'); } add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
Your
$scr
in yourwp_register_script()
function is wrong. Given that your functions.php is inside your plugin, and your removeArrows.js is in the root of your plugin, your$scr
should look like thisplugins_url( '/removeArrows.js' , __FILE__ )
Another point of note, it is always good practice to load your scripts and styles last. This will ensure that it will not get overriden by other scripts and styles. To do this, just add a very low priority (very high number) to your priority parameter (
$priority
) ofadd_action
.add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
And always load/enqueue scripts and styles via the
wp_enqueue_scripts
action hook, as this is the proper hook to use. Do not load scripts and styles directly towp_head
orwp_footer
EDIT
For themes, as you've indicated that you now moved everything to your theme, your
$scr
would change to thisget_template_directory_uri() . '/removeArrows.js'
for parent themes and this
get_stylesheet_directory_uri() . '/removeArrows.js'
for child themes. Your complete code should look like this
function wpb_adding_scripts() { wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true); wp_enqueue_script('my_amazing_script'); } add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
-
Vielen Dankfür Ihrentollen Rat.Dies scheint der zu verwendende Ansatz zu sein.Eine Frage allerdings;Die Dateifunctions.phpbefindet sichin meinem Themenordner.Wie würdeich diejs-Datei verknüpfen,wenn sie sichnurim selben Themen-Stammordnerbefindet?Thanks a lot for your great advice. This seems like the approach to use. One question though; the functions.php is in my theme folder. How would I link the js-file if it's just in the same, theme root folder?
- 0
- 2014-06-26
- user2806026
-
Sie sollten allesin einem Plugin oderin einem Themabehalten,nichtteilen.Wenn Sie sichin einem Themabefinden,lautet Ihr "$ scr" "get_template_directory_uri ()".'/removeArrows.js'`für übergeordnete Themen und `get_templatestylesheet_directory_uri ().'/removeArrows.js'`für KinderthemenYou should keep everything in a plugin or in a theme, don't split them. If you are in a theme, your `$scr` would be `get_template_directory_uri() . '/removeArrows.js'` for parent themes, and `get_templatestylesheet_directory_uri() . '/removeArrows.js'` for childthemes
- 0
- 2014-06-26
- Pieter Goosen
-
Es wurdeerneut versucht,diesmal die Datei removeArrows.js direktim Themenordner hinzuzufügen und Folgendesin der Dateifunctions.php zu verwenden. Funktion wpb_adding_scripts () { wp_register_script ('my_amazing_script',get_template_directory_uri (). '/removeArrows.js',__FILE__),array ('jquery'),'1.1',true); wp_enqueue_script ('my_amazing_script'); }} add_action ('wp_enqueue_scripts','wpb_adding_scripts',999); Diesgibt mir Analysefehler: Syntaxfehler,unerwartetes ','in der Zeile wp_register_script.Tried again, this time adding the removeArrows.js directly in theme folder and using the following in functions.php; function wpb_adding_scripts() { wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', __FILE__), array('jquery'),'1.1', true); wp_enqueue_script('my_amazing_script'); } add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); this gives me Parse error: syntax error, unexpected ',' on the wp_register_script line.
- 0
- 2014-06-26
- user2806026
-
`get_template_directory_uri ().'/removeArrows.js',FILE) `solltenur`get_template_directory_uri () sein.'/removeArrows.js'``get_template_directory_uri() . '/removeArrows.js', FILE)` should just be `get_template_directory_uri() . '/removeArrows.js'`
- 0
- 2014-06-26
- Pieter Goosen
-
Nee.Verwenden Sie Ihren vollständigbearbeiteten Code am Ende Ihres ursprünglichen Beitrags.Daseinzige,wasestut,ist,die Warenkorbseitebeim Anzeigen des Inhaltseinzufrieren.Ich denkeichgebe einfach auf :-) Ein letzter Ausweg;Sie haben zunächsterwähnt,dassget_template_directory_uri ()für übergeordnete Themen undim endgültigen vollständigen Codefür untergeordnete Themengilt.Welchesistes?Mein Themaistein Elternteil :-)Nope. Used your completely code you edited into the bottom of your original post. Only thing it does is to freeze the cart page when viewing the contents. I think I'll just give up :-) One last resort though; you started by mentioning that get_template_directory_uri() is for parent themes, and then in the final complete code that it's for child themes. Which is it? My theme is a parent :-)
- 0
- 2014-06-27
- user2806026
-
Entschuldigung,habe dorteinen Fehlerbeim Kopieren und Einfügengemacht.Der letzte vollständige Codeistfür das übergeordnete Thema.Wenn diesnichtfunktioniert,müssen Sie sich Ihr Skript ansehenSorry, made a copy and paste error there. The last piece of complete code is for parent theme. If this doesn't work, you will need to have a look at your script
- 0
- 2014-06-27
- Pieter Goosen
-
- 2014-06-25
Ich würde keine weitereexternejs-Datei hinzufügen,esistnureine zusätzliche und unnötige Ressource zum Abrufen,und dasistetwas,das wirin Bezug auf die Ladezeiten von Seiten reduzierenmöchten.
Ich würde diesesjQuery-Snippetmit dem Hook
wp_head
in den Kopf Ihrer Websiteeinfügen. Sie würden Folgendesin Ihre Theme- oder Plugins-Funktionsdateieinfügen. Ich habe auch sichergestellt,dass sichjQueryim konfliktfreien Modusbefindet,wie Sie unten sehen können.add_action('wp_head','woocommerce_js'); function woocommerce_js() { // break out of php ?> jQuery(document).ready(function($) { $(".woocommerce-cart").html(function(i, val) { return val.replace(" →", ""); }); $(".woocommerce-cart").html(function(i, val) { return val.replace("← ", ""); }); }); <?php } // break back into php
Wenn Sie diesgetan und Ihre Seite aktualisiert haben,überprüfen Sie die Seitenquelle,um sicherzustellen,dass diesesjQuery-Snippettatsächlichin Ihre Seitegeladen wird. Wenn dies der Fallist,sollteesfunktionieren,es sei denn,das aktuellejQuery-Snippet,das Sie verwenden,istfehlerhaft.
I would not add another external js file, its just an extra and unnecessary resource to fetch and that is something we want to cut down on in terms of page loading times.
I would add this jQuery snippet in your websites head using the
wp_head
hook. You would paste the following in your theme or plugins functions file. I have also made sure jQuery is in no-conflict mode as you can see below.add_action('wp_head','woocommerce_js'); function woocommerce_js() { // break out of php ?> jQuery(document).ready(function($) { $(".woocommerce-cart").html(function(i, val) { return val.replace(" →", ""); }); $(".woocommerce-cart").html(function(i, val) { return val.replace("← ", ""); }); }); <?php } // break back into php
Once you have done this and refreshed your page, check the page source to make sure this jQuery snippet is in fact being loaded into your page. If it is then it should work unless their is something off in the actual jQuery snippet you are using.
-
Diesistjedochnicht die WordPress-Methode zum Laden von Javascript.Weitere Informationenfinden Sie unter [`wp_enqueue_script ()`] (https://codex.wordpress.org/Function_Reference/wp_enqueue_script).That's not the WordPress way to load Javascript, though. See [`wp_enqueue_script()`](https://codex.wordpress.org/Function_Reference/wp_enqueue_script) for more information.
- 0
- 2014-06-25
- Pat J
-
Hallo @PatJ,ich stimme zu,wenn Sieeine externe JS-Bibliothek oder JS-Dateimit all Ihren Javascript-Funktionen laden,dann wäre das absolut der richtige Weg.Wenn Siejedocheinen Ausschnitt aus Javascript laden,istesnicht sinnvoll,eine ganzneue JS-Datei zuerstellen undnur dafüreine zusätzliche HTTP-Anforderung hinzuzufügen.Nehmen wir zum Beispiel Google Analytics. In 99% der Designs oderbenutzerdefinierten Builds wird der JS über Themenoptionen oder Funktionsdateienin die Kopf- oder Fußzeileeingefügt.Esistgängige Praxis,JS- oder sogar CSS-Snippets auf diese Weiseeinzuschließen.Hi @PatJ, I agree, for loading an external JS library or JS file with all your Javascript functions in it, then yes absolutely that would be the correct way. However if you are loading a snippet of Javascript it does not make sense to create a whole new JS file and add an additional HTTP request just for that. Take Google Analytics for example, in 99% of themes or custom builds, the JS will be added into the the header or footer via theme options or functions file. Its common practice to include JS or even CSS snippets this way.
- 2
- 2014-06-25
- Matt Royal
-
"Common Practice"machtesjedochnicht richtig.Die [`wp_enqueue_script ()` docs] (https://codex.wordpress.org/Function_Reference/wp_enqueue_script)geben sogar an ** Diesist dieempfohlene Methode zum Verknüpfen von JavaScriptmit einer von WordPressgenerierten Seite **."Common practice" doesn't make it correct, though. The [`wp_enqueue_script()` docs](https://codex.wordpress.org/Function_Reference/wp_enqueue_script) even state **This is the recommended method of linking JavaScript to a WordPress generated page**.
- 1
- 2014-06-26
- Pat J
-
Wenn Sie das Standardthema 24 von WordPress verwenden,wird html5.jsin die Datei header.phpgeladen.Zugegeben,dies wird auseinem Grundgetan,um zu überprüfen,ob der Browser die Bedingung IE <9erfüllt. Mein Punktistjedoch,dass das Einreihen verständlicherweise dieempfohlene undbevorzugte Methodeist,jedoch abhängig von allen anderen Variablen/Umständen,die Sie umgebenversuchen,es zuerreichen,istmöglicherweisenichtimmer daspraktischste undich denke,dassein gewisses Maß an Diskretion angewendet werden sollte.Schau,ich könntemich auchin dieser Ansicht völligirren,ichbin interessiert zu hören,waseinige der wirklicherfahrenen Jungs zu sagen haben :-)If you take WordPress default twentyfourteen theme, it loads html5.js in the header.php. Granted its doe this way for a reason so as to check of the browser meets the condition of being IE < 9, but my point is that understandably, enqueuing is the recommended and preferred method but depending on all the other variables/circumstances surrounding what you are trying to achieve it may not always be the most practical and I think some discretion should be used. Look, I could be completely wrong in this view as well, I'm interested to hear what some of the really experienced guys have to say :-)
- 0
- 2014-06-26
- Matt Royal
-
Vielen Dankfür Ihrentollen Vorschlag.Ich kannes abernicht zum Laufenbringen;Wennich Ihren Codein dasThanks for your great suggestion. I can't get it to work though; if I add your code inside the
- 0
- 2014-06-26
- user2806026
Wenn Sieesin Ihre Dateifunctions.phpeinfügen,entfernen Sie daserste " Php" aus dem vonmir angegebenen Code,da Siebereits das Eröffnungs-Tag " Php"in Zeile 1 Ihrer Dateifunctions.php haben.Ich habemeine ursprüngliche Antwortbearbeitet und auch von dortentfernt.When you paste it in your functions.php file - remove the first `- 0
- 2014-06-26
- Matt Royal
Dieser JS-Codemussin eingeschlossen werden.Diese Methode zum Rendern von JSin WP wirdnichtempfohlen,aberin einigen Fällen sind schnelle Lösungen wichtiger als Best Practices.This JS code needs to wrapped in . This method to render JS in WP is not recommended, but in some cases quick solutions are more important than best practices.- 0
- 2020-01-09
- Tahi Reu
- 2018-08-24
Da die Antwortbereits akzeptiert wird,möchteichnur sagen,dasseseine andere Möglichkeitgibt,Javascript-Codein der Fußzeilein die Warteschlange zu stellen,wasich schon oftgetan habe.
in der Dateifunctions.php:
function load_script_to_remove_arrow(){ ?> <script> $(document).ready(function() { $(".woocommerce-cart").html(function(i, val) { return val.replace(" →", ""); }); $(".woocommerce-cart").html(function(i, val) { return val.replace("← ", ""); }); }); </script> <?php } add_action( 'wp_footer', 'load_script_to_remove_arrow' );
Sie können dieses Skriptnur unter Verwendung der Bedingung
in einebestimmte Seitenvorlage ladenif( is_page_template( 'page-template.php' ) ): //put above code (or just add_action part) inside this condition to load file only if the condition is true endif;
Wenn sich die Seite-template.phpim Verzeichnisbefindet (z. B. Vorlagenverzeichnisim Stammverzeichnis Ihres Themas),können Sie wiefolgt schreiben:
is_page_template( 'templates/page-template.php' );
As the answer is accepted already so, I just want to say there's another way to enqueue javascript code in footer which I have done many times.
in functions.php file:
function load_script_to_remove_arrow(){ ?> <script> $(document).ready(function() { $(".woocommerce-cart").html(function(i, val) { return val.replace(" →", ""); }); $(".woocommerce-cart").html(function(i, val) { return val.replace("← ", ""); }); }); </script> <?php } add_action( 'wp_footer', 'load_script_to_remove_arrow' );
you can load this script to particular page template only by using condition
if( is_page_template( 'page-template.php' ) ): //put above code (or just add_action part) inside this condition to load file only if the condition is true endif;
if the page-template.php is in directory ( say templates directory in your theme's root dir ) you can write like:
is_page_template( 'templates/page-template.php' );
-
Ich würdenichtempfehlen,das JavaScript soin die Fußzeile zu "backen".Es verhindert,dasses (zumindest leicht) aushakbar odermodifizierbarist,wasfür die Plugin- und Theme-Entwicklung äußerst wichtigist.Wenn Sie der Endbenutzereiner Site sind undein schnelles Skript oderetwas anderesbenötigen,versuchen Siees - aber selbst "wp_enqueue_script ()"istfastimmer allgemeinbesser undflexibler.I would not recommend "baking" the JavaScript into the footer like this. It prevents it from being unhookable or modifiable (at least, easily) which is extremely important in plugin and theme development. If you're the end-user of a site and need a quick script or something, go for it - but even still `wp_enqueue_script()` is almost always universally better and more flexible.
- 0
- 2018-08-24
- Xhynk
- 2018-08-24
Um die Frage zubeantworten,müssen wir zuerst zwischen Javascript und JQuery unterscheiden.
Umes aufeinfache Weise auszudrücken:
- Javascriptbasiert auf ECMAScript
- JQueryisteine Bibliothekfür Javascript
In Wirklichkeit stellen Sie also zwei verschiedene Fragen:
- Ihr Titel spricht voneiner Lösungfür die Implementierung von Javascript
- Ihre Frage spricht voneiner Lösungfür die Implementierung von JQuery
Dain den Google-Ergebnissen Ihr Titel angezeigt wird und dergesamte Inhalt der Seite über JQuery spricht,kann diesfür Personen,dienacheiner Javascript-Lösung suchen,sehrfrustrierend sein.
Undjetzt zur JQuery-Lösung:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);
Und die Javascript-Lösung:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );
Dieser Code kann zu Ihrerfunctions.php hinzugefügt werden Der Speicherort der Skripteistin beiden Fällen
wp-content/themes/theme-name/js/script.js
Viel Spaßbeim Codieren!
To answer the question we must first make a distinction between javascript and JQuery.
To state it in a simple fashion:
- Javascript is based on ECMAScript
- JQuery is a library for Javascript
So in reality you ask two different questions:
- Your title speaks about a solution for implementing javascript
- Your question speaks about a solution for implementing JQuery
Because the Google results show your title and all the content of the page talks about JQuery this can become very frustrating to people that search for a javascript solution.
And now for the JQuery solution:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);
And the javascript solution:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );
This code can be added to your functions.php The location of the scripts in both cases is
wp-content/themes/theme-name/js/script.js
Happy coding!
-
Ungefähr zu der Zeit,als OP veröffentlicht wurde,verwendeten Entwickler JQuery und Javascript austauschbar.Esist überhauptnichtgenau,aberes war,wiebeliebtjquery war und wie viel Javascript Funktionenfehlte.Around the time when OP posted, devs did use jquery and javascript interchangeably. It's not at all accurate, but it was how popular jquery was and how much javascript was missing features.
- 0
- 2020-04-29
- Rocky Kev
Ichmöchteeinige hässlich aussehende Pfeileentfernen,diebei Warenkorbschaltflächenin WooCommerce Standard sind. Um dies zuerreichen,habeicheinen Tipp zum Hinzufügen desfolgenden Codesgefunden,der die Pfeileentfernen sollte,wenn das Dokumentgeladen wurde.
Ichgehe davon aus,dassichesin meinefunctions.phpeinfügen werde. Wiegenau würdeich dastun?
EDIT
Okay. Ich habe diesen Ansatz ausprobiert:
Erstellteeine Dateimit dem Namen 'removeArrows.js' und legte siein meinem Plugin-Ordner ab. Dies hat dengleichen Inhalt wie der ursprüngliche Code,außerjQuery statt $. Dann habeich der Dateifunctions.php Folgendes hinzugefügt:
Ich kannnicht herausfinden,wie der Code richtig angezeigt wird. Das hatnichtfunktioniert. Irgendwelche Vorschläge,damit diesfunktioniert?
jQuery Snippet Source