Wie überschreibe ich JavaScript-Dateien im untergeordneten Thema?
-
-
Wasist das übergeordnete Thema?Wie werden die Skripte vom übergeordneten Thema * aufgerufen *?What is the parent Theme? How are the scripts being *called* by the parent Theme?
- 1
- 2011-08-24
- Chip Bennett
-
4 Antworten
- Stimmen
-
- 2011-08-24
Untergeordnete Themen überschreibennur PHP-Dateien (wie header.php),diein Funktionen wieget_template_part oderget_header usw.enthalten sind.
Der richtige Weg,um Skripte zu WordPress hinzuzufügen,ist wp_enqueue_script . Wenn Ihr übergeordnetes Thema dies verwendet,können Sie die JS-Dateien überschreiben,indem Sie wp_dequeue_script verwenden und Ihreeigenen in die Warteschlange stellen.
Wie so ...
<?php // hook in late to make sure the parent theme's registration // has fired so you can undo it. Otherwise the parent will simply // enqueue its script anyway. add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100); function wpse26822_script_fix() { wp_dequeue_script('parent_theme_script_handle'); wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery')); }
Wenn das übergeordnete Thema wp_enqueue_scriptnicht verwendet,wirdes wahrscheinlichin wp_head (oder wp_footer)eingebunden,um die dortigen Skripte wiederzugeben. Sie würden also remove_action verwenden,um diese Funktionen zuentfernen,die die Skripte wiedergeben,und dann Ihreigenes Skriptin die Warteschlange stellen.
Wenn das Skriptfestin der Vorlagendatei codiertist,müssen Sie diese Vorlagendateiin Ihrem untergeordneten Themanur ohne das Skript-Tagersetzen.
Wenn sie wp_enqueue_script-Aufrufe verwendet haben,die get_stylesheet_directory_uri verwenden,sollten Sienichtstunmüssen. Da diesnichtgeschieht,müssen Sienur herumstöbern und sehen,was der Autor des Themasgetan hat.
Child themes only override php files (like header.php) that are included with functions like get_template_part or get_header, etc.
The correct way to add scripts to WordPress is with wp_enqueue_script. If your parent theme uses this, you can override the JS files by using wp_dequeue_script and enqueuing your own.
Like so...
<?php // hook in late to make sure the parent theme's registration // has fired so you can undo it. Otherwise the parent will simply // enqueue its script anyway. add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100); function wpse26822_script_fix() { wp_dequeue_script('parent_theme_script_handle'); wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery')); }
If the parent theme isn't using wp_enqueue_script, it's probably hooking into wp_head (or wp_footer) to echo out the scripts there. So you'd use remove_action to get rid of those functions echoing the scripts out, and then enqueue your own script.
If the script is hard coded into the template file, you'll just need to replace that template file in your child theme without the script tag.
If they used wp_enqueue_script calls that utilize get_stylesheet_directory_uri, then you shouldn't have to do anything. Since this isn't happening, you'll just have to poke around and see what the theme author did.
-
Wenn das übergeordnete Designget_stylesheet_directory_uri verwendet,um Skriptein die Warteschlange zu stellen,muss das untergeordnete Design alle soin die Warteschlangegestellten Skripte ** duplizieren **,da sie sonstnichtgefunden werden.Inget_stylesheet_directory_urigibt es keinen Fallback-Mechanismus,mit dem überprüft werden kann,obim untergeordneten Themaeine **einzelne Datei ** vorhandenist,undbei Bedarf auf die Datei des übergeordneten Themas zurückgegriffen werden kann.if the parent theme uses get_stylesheet_directory_uri to enqueue scripts, then the child theme will **have** to duplicate all scripts thus enqueued, because otherwise they woun't be found. There is no fallback mechanism in get_stylesheet_directory_uri to check if an **individual file** exists in the child theme and fall back to the parent theme's file if necessary.
-
Aus dem Kodex: „Wp_print_scripts solltenicht zum Einreihen von Stilen oder Skripten auf der Startseite verwendet werden.Verwenden Sie stattdessen wp_enqueue_scripts." http://codex.wordpress.org/Plugin_API/Action_Reference/wp_print_scriptsFrom the Codex: “wp_print_scripts should not be used to enqueue styles or scripts on the front page. Use wp_enqueue_scripts instead. ” http://codex.wordpress.org/Plugin_API/Action_Reference/wp_print_scripts
- 0
- 2013-08-13
- Christian Lescuyer
-
Denken Sie daran,wann diesgeschrieben wurde: vor zwei Jahren.Vor `wp_enqueue_scripts` konntennur Skripte am Frontendin die Warteschlangegestellt werden.Aktualisiert.Wenn Sieetwas veraltetes sehen,können Sieesgernebearbeiten.Keep in mind when this was written: two years ago. Before `wp_enqueue_scripts` could be used to only enqueue scripts on the front end. Updated. If you see something out of date, feel free to edit.
- 0
- 2013-08-13
- chrisguitarguy
-
Entschuldigung,keine Kritikimpliziert,ich habe Ihre Antwortpositivbewertet :)Sorry, no criticism implied, I did upvote your answer :)
- 0
- 2013-08-16
- Christian Lescuyer
-
Bittebeachten Sie,dass Siemöglicherweiseeine späte Prioritätfestlegenmüssen (z. B. 100),um sicherzustellen,dass Ihre Warteschlange *nach * der Warteschlange des übergeordneten Themaserfolgt. `add_action ('wp_enqueue_scripts','wpse26822_script_fix',100);` von http://codex.wordpress.org/Function_Reference/wp_dequeue_scriptPlease note that you may have to set a late priority (for instance 100) to make sure your dequeue happens *after* the parent theme enqueue. `add_action( 'wp_enqueue_scripts', 'wpse26822_script_fix', 100 );` from http://codex.wordpress.org/Function_Reference/wp_dequeue_script
- 4
- 2014-09-04
- Spone
-
Updatefür 2016: Laut http://stackoverflow.com/questions/23507179/wp-dequeue-script-for-child-theme-to-replace-scriptmüssen wir auch `wp_deregister_script ('parent-script-handle' verwenden)); `um das übergeordnete Skript vollständig zuentfernen.In der Tat hatesbei mir ohnenichtfunktioniert.WP 4.6.1Update for 2016: according to http://stackoverflow.com/questions/23507179/wp-dequeue-script-for-child-theme-to-replace-script we also have to use `wp_deregister_script('parent-script-handle');` to completely remove the parent script. Indeed, it didn't work for me without it. WP 4.6.1
- 4
- 2016-11-30
- PhiLho
-
Kannst dumeine Frage hierbitte beantworten?Diese Antwortistetwas verwirrend: https://wordpress.stackexchange.com/questions/286957/modifying-js-files-in-child-themecan you answer my question here please? This answer is a bit confusing:https://wordpress.stackexchange.com/questions/286957/modifying-js-files-in-child-theme
- 0
- 2017-11-26
- csandreas1
-
@PhiLho,ich verwende 5.4 und `wp_dequeue_script ()` * hat *fürmich selbstfunktioniert.Das übergeordnete Thema hatte `wp_enqueue_script ('fitvids',get_template_directory_uri (). '/Js/fitvids.js',array ('jquery'),'1.1',true); '- vielleicht hatesmit der Art und Weise zutun,wie dasSkript wurde vom übergeordneten Themageladen?@PhiLho, I'm using 5.4, and `wp_dequeue_script()` *did* work for me by itself. The parent theme had `wp_enqueue_script( 'fitvids', get_template_directory_uri() . '/js/fitvids.js', array( 'jquery' ), '1.1', true );` -- maybe it has to do with the way the script was loaded by the parent theme?
- 0
- 2020-04-05
- kkm
-
@PhiLho,ich habe auch `wp_deregister_script` hinzugefügt,dies hatnichtsgeändert,aber vielleichtetwas Speicherfreigegeben,der von der Skriptregistrierungnutzlosgehalten wird.Ichmusste auch zwei Aktionenfür 'wp_enqueue_scripts' hinzufügen,die Standardpriorität zum Ladenmeines CSS-Überschreibungsblatts,aber um das Skript loszuwerden,fügteicheine weiteremit der Priorität 100 hinzu,wiein der Antwort vorgeschlagen.Die Tatsache,dassesnichtfunktioniert hat,kannjedochnicht durch das Fiasko der Ladereihenfolgeerklärt werden,dain meinem Fallbeim Entladen oder Abmeldenim Normal-Priotiry-Hooknur Fehlerprotokolliert wurden.Aufjeden Fall seltsam.@PhiLho, I also added `wp_deregister_script`, this changed nothing, but maybe released some memory uselessly held by the script registration. I also had to add two actions for 'wp_enqueue_scripts', the default-priority to load my css override sheet, but to get rid of the script I added another, with the priority 100, as the answer suggested. But the fact it did not work cannot be explained by the load order fiasco, because in my case, unloading or deregistering in the normal-priotiry hook only logged errors. Strange, in any case.
- 0
- 2020-04-05
- kkm
-
- 2015-11-11
Ineinigen Fällenistes wichtig,sowohl die Funktionsaufrufe add_action als auch wp_enqueue_script wiefolgt zupriorisieren:
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207); function wpse26822_script_fix() { wp_dequeue_script('storefront-navigation'); wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true); }
In diesem Fall wurde wp_enqueue_scripts vom übergeordneten Elementmit einer Priorität von 20120206 (dem Datum) aufgerufen. Daher wird diese Aktionmit einer Priorität hinzugefügt,die kaumgrößerist,sodass sie sofort aus der Warteschlangeentfernt wird. Anschließend wird diefolgende Enqueue-Anweisungtatsächlichpriorisiert,um sicherzustellen,dass siegeladen wird,nachdem die alte aus der Warteschlangeentfernt wurde. Das Richtigeistin diesem Fall auch wichtig,da dies angibt,dassesin der Fußzeilein die Warteschlangegestellt werden soll,in der das übergeordnete Skript zuerstin die Warteschlangegestellt wurde.
Ich kannes auchnichtganzerklären,aberich stellefest,dass Sie,wenn Sie das ursprüngliche Skript unmittelbarnach dem Einreihenin die Warteschlange stellen,anscheinendeffektiv verhindern können,dasses überhauptgeladen wird.
In some cases it is important to prioritize both the add_action and the wp_enqueue_script function calls like so:
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207); function wpse26822_script_fix() { wp_dequeue_script('storefront-navigation'); wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true); }
In this case, wp_enqueue_scripts was called by the parent with a priority of 20120206 (the date) and so this action is added with a priority just barely greater so that it will immediately be dequeued. Then, the enqueue statement that follows that follows is actually prioritized after that to ensure that it loads after the old one was dequeued. The true, in this case is also important because that specifies that it is to be enqueued in the footer, which is where the parent script was first enqueued.
Also, I can't quite explain it entirely, but I notice that if you are careful with dequeuing the initial script immediately after it being enqueued, it seems you can effectively prevent it from loading in the first place.
-
Die Funktion `wp_enqueue_script` hat keinen Prioritätsparameter,sondernnureine Versionsnummer,die als Abfragezeichenfolge an das Ende des Pfads angekettetist._Dieser Parameter wird verwendet,um sicherzustellen,dass die richtige Version unabhängig vom Caching an den Clientgesendet wird [...] _The function `wp_enqueue_script` doesn't have a priority parameter, it's only a version number which is concatenated to the end of the path as a query string. _This parameter is used to ensure that the correct version is sent to the client regardless of caching [...]_
- 1
- 2016-01-18
- Emile Bergeron
-
- 2016-12-25
Rufen Sie wp_deregister_script auf,bevor Sie Ihreeigene Version registrieren
call wp_deregister_script before register your own version
-
Warum?Diesistnurerforderlich,wenn Sie denselben Griff verwenden -etwas,das Sienichttunmüssen.Sie solltenes wahrscheinlich sogarnichttun,daeseinfacherist,Code zu debuggen,dessen Quelle klarist.Why? This is only needed when you are using the same handle – something you don't have to do. You probably even shouldn't, because it is easier to debug code whose source is clear.
- 1
- 2016-12-25
- fuxia
-
- 2019-05-28
// enqueue your required script file add_action('wp_enqueue_scripts', 'your_child_theme_js_file_override'); function your_child_theme_js_file_override(){ wp_enqueue_script( 'child_theme_script_handle', get_stylesheet_directory_uri() . '/assets/js/your-file.js', array('jquery' ) ); } // dequeue your required script file function your_child_theme_js_file_dequeue() { wp_dequeue_script( 'parent_theme_script_handle' ); } add_action( 'wp_print_scripts', 'your_child_theme_js_file_dequeue', 100 );
// enqueue your required script file add_action('wp_enqueue_scripts', 'your_child_theme_js_file_override'); function your_child_theme_js_file_override(){ wp_enqueue_script( 'child_theme_script_handle', get_stylesheet_directory_uri() . '/assets/js/your-file.js', array('jquery' ) ); } // dequeue your required script file function your_child_theme_js_file_dequeue() { wp_dequeue_script( 'parent_theme_script_handle' ); } add_action( 'wp_print_scripts', 'your_child_theme_js_file_dequeue', 100 );
Ich ladeeinige JavaScript-Dateienin das übergeordnete Thema.Der Pfadim übergeordneten Thema lautet:
Im untergeordneten Themaerstelleich denselben Pfad (
scripts > custom.js
) und ändereeinen Teil derjQueryin der Dateicustom.js
.Das Problemist,dass die Änderungennicht übernommen werden.Ist dies derfalsche Weg,um Änderungen an diesen Dateienim untergeordneten Thema vorzunehmen?