it-swarm.com.de

Wie kann ich JavaScript-Dateien im untergeordneten Design überschreiben?

Ich lade einige JavaScript-Dateien im übergeordneten Design. Der Pfad im übergeordneten Thema lautet:

scripts > custom.js

Im untergeordneten Design erstelle ich denselben Pfad (scripts > custom.js) und ändere einige der jQuery-Elemente in der custom.js-Datei.

Das Problem ist, dass die Änderungen nicht übernommen werden. Ist dies der falsche Weg, um Änderungen an diesen Dateien im untergeordneten Design vorzunehmen?

34
Chris Molitor

Untergeordnete Designs überschreiben nur PHP-Dateien (wie header.php), die in Funktionen wie get_template_part oder get_header usw. enthalten sind.

Der richtige Weg, um Skripte zu WordPress hinzuzufügen, ist mit wp_enqueue_script . Wenn Ihr übergeordnetes Thema dies verwendet, können Sie die JS-Dateien mit wp_dequeue_script überschreiben und Ihre eigenen 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 Design nicht wp_enqueue_script verwendet, wird es wahrscheinlich in wp_head (oder wp_footer) eingebunden, um die Skripte dort auszugeben. Sie würden also remove_action verwenden, um diese Funktionen zu entfernen, die die Skripte wiedergeben, und dann Ihr eigenes Skript in die Warteschlange stellen.

Wenn das Skript in der Vorlagendatei fest programmiert ist, müssen Sie diese Vorlagendatei nur in Ihrem untergeordneten Design ohne das Skript-Tag ersetzen.

Wenn sie wp_enqueue_script-Aufrufe verwenden, die get_stylesheet_directory_uri verwenden, sollten Sie nichts tun müssen. Da dies nicht geschieht, müssen Sie nur herumstöbern und sehen, was der Autor des Themas getan hat.

45
chrisguitarguy
// 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 );
1
Zabid Ahmed

In einigen Fällen ist es wichtig, die Funktionsaufrufe add_action und wp_enqueue_script wie folgt zu priorisieren:

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 Element mit der Priorität 20120206 (dem Datum) aufgerufen, und diese Aktion wird mit einer Priorität hinzugefügt, die kaum höher ist, sodass sie sofort aus der Warteschlange entfernt wird. Anschließend wird die folgende Enqueue-Anweisung tatsächlich priorisiert, um sicherzustellen, dass sie geladen wird, nachdem die alte Anweisung aus der Warteschlange entfernt wurde. Das true ist in diesem Fall auch wichtig, da dies angibt, dass es in die Fußzeile eingereiht werden soll, in der das übergeordnete Skript zuerst eingereiht wurde.

Ich kann es auch nicht ganz erklären, aber ich stelle fest, dass Sie das Laden des ersten Skripts anfangs effektiv verhindern können, wenn Sie vorsichtig sind, wenn Sie das erste Skript unmittelbar nach dem Einreihen aus der Warteschlange entfernen.

1
damiankaelgreen

rufen Sie wp_deregister_script auf, bevor Sie Ihre eigene Version registrieren

1