Comment remplacer les fichiers JavaScript dans le thème enfant?
-
-
Quelest lethèmeparent?Comment les scripts sont-ils * appelés *par lethèmeparent?What is the parent Theme? How are the scripts being *called* by the parent Theme?
- 1
- 2011-08-24
- Chip Bennett
-
4 réponses
- votes
-
- 2011-08-24
Lesthèmesenfantsne remplacent que lesfichiersphp (comme header.php) qui sontinclus avec desfonctions commeget_template_part ouget_header,etc.
Labonnefaçon d'ajouter des scripts à WordPressest d'utiliser wp_enqueue_script . Si votrethèmeparent l'utilise,vouspouvez remplacer lesfichiers JSen utilisant wp_dequeue_script et enmettant le vôtreen file d'attente.
Comme ça ...
<?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')); }
Si lethèmeparentn'utilisepas wp_enqueue_script,il se connecteprobablement à wp_head (ou wp_footer)pourfaire écho aux scripts. Vous utiliseriez donc remove_action pour supprimer cesfonctionsfaisant écho aux scripts,puismettreen file d'attente votrepropre script.
Si le scriptest codéen dur dans lefichiermodèle,il vous suffira de remplacer cefichiermodèle dans votrethèmeenfant sans labalise script.
S'ils ont utilisé des appels wp_enqueue_script qui utilisent get_stylesheet_directory_uri ,vousne devriez rienfaire. Comme celane seproduitpas,vous devrez simplementfouilleret voir ce que l'auteur duthème afait.
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.
-
si lethèmeparent utiliseget_stylesheet_directory_uripourmettre les scriptsen file d'attente,alors lethèmeenfant devra ** dupliquertous les scripts ainsimisen file d'attente,car sinonilsne serontpastrouvés.Iln'y apas demécanisme de secours dansget_stylesheet_directory_uripour vérifier si un **fichierindividuel **existe dans lethèmeenfantet revenir aufichier duthèmeparent sinécessaire.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.
-
Du Codex: «Wp_print_scriptsne doitpas être utilisépourmettreen file d'attente des styles ou des scripts sur lapage d'accueil.Utilisezplutôt 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
-
Gardez à l'esprit quand cela a été écrit:il y a deux ans.Avant que `wp_enqueue_scripts`ne puisse être utilisépourmettreen file d'attente des scripts uniquement sur lefront-end.Mis àjour.Si vous voyez quelque chose quin'estpas àjour,n'hésitezpas à lemodifier.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
-
Désolé,aucune critiqueimplicite,j'ai votépour votre réponse :)Sorry, no criticism implied, I did upvote your answer :)
- 0
- 2013-08-16
- Christian Lescuyer
-
Veuilleznoter que vous devrezpeut-être définir uneprioritétardive (parexemple 100)pour vous assurer que votre retrait de lafile d'attente seproduit * après * lafile d'attente duthèmeparent. `add_action ('wp_enqueue_scripts','wpse26822_script_fix',100);` depuis 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
-
Mise àjourpour 2016: selon http://stackoverflow.com/questions/23507179/wp-dequeue-script-for-child-theme-to-replace-script,nous devons également utiliser `wp_deregister_script ('parent-script-handle'); `pour supprimer complètement le scriptparent.Eneffet,celan'apasfonctionnépourmoi sans cela.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
-
pouvez-vous répondre àma questionici s'il vousplaît?Cette réponseest unpeu déroutante: 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,j'utilise 5.4,et `wp_dequeue_script ()` * a *fonctionnépourmoipar lui-même.Lethèmeparent avait `wp_enqueue_script ('fitvids',get_template_directory_uri (). '/Js/fitvids.js',array ('jquery'),'1.1',true);` -peut-être que cela a à voir avec lafaçon dont lele script a été chargépar lethèmeparent?@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,j'ai aussi ajouté `wp_deregister_script`,celan'a rien changé,maispeut-être libéré de lamémoireinutilement détenuepar l'enregistrement du script.J'ai également dû ajouter deux actionspour 'wp_enqueue_scripts',laprioritépar défautpour chargermafeuille de remplacement css,maispourme débarrasser du script,j'en ai ajouté une autre,avec lapriorité 100,comme le suggérait la réponse.Mais lefait que celan'apasfonctionnéne peutpas êtreexpliquépar lefiasco de l'ordre de chargement,car dansmon cas,le déchargement ou la désinscription dans le hooknormal-priotiryne consignait que deserreurs.Etrange,en tout cas.@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
Dans certains cas,ilestimportant de donner lapriorité aux appels defonction add_actionet wp_enqueue_script comme ceci:
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); }
Dans ce cas,wp_enqueue_scripts a été appelépar leparent avec unepriorité de 20120206 (la date)et donc cette actionest ajoutée avec unepriorité àpeine plusgrandepour qu'elle soitimmédiatement retirée de lafile d'attente. Ensuite,l'instruction demiseen file d'attente qui suit qui suitesten faitpriorisée après celapour s'assurer qu'elle se charge après que l'ancienne a été retirée de lafile d'attente. Le vrai,dans ce cas,est égalementimportant car cela spécifie qu'il doit êtremisen file d'attente dans lepied depage,quiest l'endroit où le scriptparent a étémisen file d'attentepour lapremièrefois.
Deplus,je nepeuxpastout àfait l'expliquerentièrement,maisje remarque que si vousfaites attention à retirer le scriptinitialimmédiatement après samiseen file d'attente,il semble que vouspuissiezeffectivement l'empêcher de se chargeren premier lieu.
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.
-
Lafonction `wp_enqueue_script`n'apas deparamètre depriorité,c'est seulement unnuméro de version quiest concaténé à lafin du chemin comme une chaîne de requête._Ceparamètreest utilisépour s'assurer que la version correcteestenvoyée au clientindépendamment de lamiseen cache [...] _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
appelez wp_deregister_script avant d'enregistrer votrepropre version
call wp_deregister_script before register your own version
-
Pourquoi?Cecin'estnécessaire que lorsque vous utilisez lamêmepoignée - quelque chose que vousn'avezpas àfaire.Vousne devriezprobablementmêmepas,carilestplusfacile de déboguer du code dont la sourceest claire.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 );
Je charge desfichiers JavaScript dans lethèmeparent.Le chemin dans lethèmeparentest:
Dans lethèmeenfant,je crée lemême chemin (
scripts > custom.js
)et je change unepartie dejQuery dans lefichiercustom.js
.Leproblèmeest que lesmodificationsne sontpas appliquées.Est-ce lamauvaisefaçon d'apporter desmodifications à cesfichiers dans lethèmeenfant?