2014-05-07 8 views
11

Ich habe ein Kind Thema und ich bin in der Lage, das Skript, das ich verwenden möchte, um einige Themenfunktionen zu ersetzen und ersetzen Sie einige der Schaltflächen.wp_dequeue_script für untergeordnete Thema zu ersetzen Skript

Aber ich kann den alten Knopf nicht entfernen, so dass sie beide übereinander angezeigt werden. Wie kann ich das übergeordnete js-Skript entfernen?

hier ist mein function.php für das Kind Thema

function replace_scroll(){ 
    // Remove the Default JavaScript  
    wp_dequeue_script('dp-js'); 

    // Add your own script 
    $js_url = get_bloginfo('stylesheet_directory') . '/js'; 
    wp_enqueue_script('dp',"$js_url/dp1.scripts.js"); 
} 
add_action('wp_enqueue_scripts', 'replace_scroll'); 

Antwort

13

Einige Probleme hier mit

  • Sie sollten für Kinderthemen und get_template_directory_uri() für Eltern Themen statt der get_bloginfo() Funktionen werden mit get_stylesheet_directory_uri() beginnen. Letzteres ist langsamer und verwendet die ersten beiden Funktionen

  • Scripts und Stile sollten UND und aus der Warteschlange entfernt sie vollständig aus der Warteschlange

  • abgemeldeten werden zu entfernen Priorität ist wichtig. Sie müssen Ihre Funktion später anhängen, um sicherzustellen, dass die Stile und Skripts registriert sind, bevor Sie sie abmelden, andernfalls wird es nicht funktionieren.

Lösung:

Kopie der Eltern js-Datei, um Ihr Kind Thema und öffnen Sie es und machen die notwendigen geändert. Speichern Sie die Datei

Sie Jetzt müssen dequeue UND der Eltern js Datei abzumelden und dann enqueue Sie neue Kind Thema js Datei

Beispiel

/* 
* Use any number above 10 for priority as the default is 10 
* any number after 10 will load after 
*/ 
add_action('wp_enqueue_scripts', 'my_custom_scripts', 100); 
function my_custom_scripts() 
{ 
    wp_dequeue_script('parent-script-handle'); 
    wp_deregister_script('parent-script-handle'); 
    // Now the parent script is completely removed 

    /* 
    * Now enqueue you child js file, no need to register if you are not 
    * doing conditional loading 
    */ 
    wp_enqueue_script('child-script-handle', get_stylesheet_directory_uri() . '/child-script.js'); 
    //Now we have done it correctly 
} 
+1

Danke für die zusätzlichen Informationen. Aber PHP_INT_MAX scheint ziemlich OTT zu sein? –

+0

Könnte ja sein, aber ich verwende es gerne in untergeordneten Themen, um sicherzustellen, dass meine Funktionen zuletzt gehakt werden. Dies ist Ihre eigene Präferenz –

+0

Der Schlüsselpunkt, um dies zu erreichen, ist sicherzustellen, dass Sie das, was nach dem 'add_action' in Ihrem Eltern-Thema verwendet wird, übereinstimmen. Manchmal wird 'wp_enqueue_scripts' verwendet und manchmal' wp_footer', je nach Datei und Thema. – fidev

4

Sie benötigen, um herauszufinden, wo das übergeordnete Thema der Tasten erzeugt.

Wenn sie von JavaScript generiert werden, können Sie das Skript, das die Schaltflächen erstellt, aus der Warteschlange entfernen. Seien Sie vorsichtig, da jedes andere Javascript in dieser Datei ebenfalls entfernt wird. Wenn dies ein Problem ist, sollten Sie das js-Skript in Ihren Designordner kopieren, den nicht gewünschten Teil entfernen, das Original herausnehmen und Ihr geändertes Skript in die Warteschlange stellen.

Wie Sie dies tun.

Um ein Skript aus der Warteschlange zu entfernen, müssen Sie wissen, dass es Handle ist. Here's ein fantastisches Tutorial, wie Sie die Griffe von Skripten bekommen, sehr praktisch. Zusammenfassend lässt sich für den Fall, geht die Verbindung tot:

hinzugefügt functions.php Datei

function wpcustom_inspect_scripts_and_styles() { 
    global $wp_scripts; 
    global $wp_styles; 

    // Runs through the queue scripts 
    foreach($wp_scripts->queue as $handle) : 
     $scripts_list .= $handle . ' | '; 
    endforeach; 

    // Runs through the queue styles 
    foreach($wp_styles->queue as $handle) : 
     $styles_list .= $handle . ' | '; 
    endforeach; 

    printf('Scripts: %1$s Styles: %2$s', 
    $scripts_list, 
    $styles_list); 
} 

add_action('wp_print_scripts', 'wpcustom_inspect_scripts_and_styles'); 

Dies wird eine Liste aller js drucken und CSS zu Ihrer Seite an der Spitze geladen wird. Wenn Sie Schwierigkeiten haben, herauszufinden, was Sie möchten, können Sie immer einen dom inspector verwenden, beispielsweise in Chrome oder Firefox. Auf Chrome- Rechtsklick - Inspect-Element - Ressourcen - Frames - Ihre Site-URL - Skripte.

Dies wird Ihnen eine Liste aller Skripte und ihrer Standorte geben.

Sobald Sie herausgefunden haben, welches Skript Sie benötigen, kopieren Sie es in Ihr Thema und entfernen Sie den Teil, der die Schaltflächen hinzufügt.

Entfernen Sie dann das unerwünschte Skript mit dem Handle, das wir zuvor gefunden haben, und fügen Sie Ihr neues ein.

function wpcustom_deregister_scripts_and_styles(){ 

    wp_deregister_script('my-script-handle'); 
    wp_enqueue_script('my-new-script', get_template_directory_uri() . '/js/my-new-script.js', array(), '1.0', true); 
} 

add_action('wp_print_styles', 'wpcustom_deregister_scripts_and_styles', 100); 

Wenn die Tasten von PHP generiert werden, müssen Sie die Datei finden, die den HTML-Code in Ihrer Mutter Thema sind zu erzeugen, kopieren Sie es zu Ihrem Kind Thema, und das Entfernen der beanstandeten Linien.

8

Testen mit dem Mutter Thema Zwanzig Vierzehn, die diese in ihrer functions.php Datei hat:

function twentyfourteen_scripts() { 
    // other enqueues 
    wp_enqueue_script('twentyfourteen-script', get_template_directory_uri() . '/js/functions.js', array('jquery'), '20131209', true); 
} 
add_action('wp_enqueue_scripts', 'twentyfourteen_scripts'); 

Die Aktion wp_enqueue_scripts hat keinen erklärt Priorität, so dass es 10 den Standard ist verwenden. Um die dequeue Arbeit, die wir haben zu machen eine niedrigere Priorität in unserem Kind Themafunctions.php Datei hinzufügen:

function remove_twentyfourteen_scripts() 
{ 
    wp_dequeue_script('twentyfourteen-script'); 
} 
add_action('wp_enqueue_scripts', 'remove_twentyfourteen_scripts', 11); // <-- HERE 
+0

Das funktionierte für mich. Vielen Dank! –

+4

Beachten Sie, dass eine niedrigere Priorität bedeutet, dass die Aktion später ausgelöst werden muss. Daher muss das Prioritätsargument für add_action größer und verwirrend sein. Argument mit niedrigerer Priorität bedeutet, dass es früher ausgelöst wird, höher bedeutet, dass es später ausgelöst wird – edhurtig

3

Ich mag hinzufügen, dass wir brauchen get_stylesheet_directory_uri() zu verwenden, wenn der Ersatz Skript hinzugefügt, weil get_template_directory_uri() das übergeordnete Thema zurück Verzeichnis.

anzeigen Wordpress docs here

3

In einem typischen Wordpress-Flow, Plugins sind loaded Vor dem Thema, und im Fall eines untergeordneten Themas, wird das untergeordnete Thema vor dem übergeordneten Thema geladen, und zwar Datei eines untergeordneten Themas ist vor der functions.php eines übergeordneten Themas enthalten. So werden wp_enqueue_scripts Aktionen gestapelt und später in dieser Reihenfolge ausgeführt, es sei denn, die Priorität der Aktionen ist anders als der Standardwert (10) definiert. Das Problem besteht darin, dass Sie versuchen, Skripte zu entfernen, die noch nicht in die Warteschlange eingereiht wurden.


Um das Skript von Eltern hinzugefügt zu entfernen, die Priorität der wp_enqueue_scripts Aktion des Kind Thema hebt in Mutter Thema definierte Aktion zu höheren Wert als Wert.

// get_template_directory_uri(), if used in child theme, the parent theme directory URI will be returned, 
// use get_stylesheet_directory_uri() to get the child's theme directory uri 

add_action('wp_enqueue_scripts', 'child_theme_enqueue_scripts', 11); 
function child_theme_enqueue_scripts() 
{ 
    wp_dequeue_script('parent-theme-script'); 
    wp_enqueue_script('child-theme-script', get_stylesheet_directory_uri() . '/js/script.js'); 
} 


Um das Skript zum Beispiel zu ersetzen, Sie wollen es einige Änderungen vornehmen und lassen die bestehenden Abhängigkeiten und Lokalisierung sind zwei Arten.

Verwenden wp_enqueue_script mit den gleichen handle Namen aufgrund der Tatsache, dass, wenn Sie versuchen, eine bereits registrierten Handelte registrieren oder einreihen, werden die neuen Parameter außer Acht gelassen werden, sinnvoll, wenn das Skript später von Mutter lokalisiert ist die lokalisierten Daten zu halten.

// default priority 10 

add_action('wp_enqueue_scripts', 'child_theme_enqueue_scripts'); 
function child_theme_enqueue_scripts() 
{ 
    wp_enqueue_script('parent-theme-script', get_stylesheet_directory_uri() . '/js/script.js'); 
} 

Verwenden global $wp_scripts Objekt nur erforderliche Eigenschaften zu modifizieren, zum Beispiel, ändert nur src Eigenschaft bereits eine Warteschlange eingereiht oder eingetragene Skript.

// priority 11 

add_action('wp_enqueue_scripts', 'child_theme_enqueue_scripts', 11); 
function child_theme_enqueue_scripts() 
{ 
    global $wp_scripts; 
    $wp_scripts->registered[ 'parent-theme-script' ]->src = get_stylesheet_directory_uri() . '/js/script.js'; 
} 


Die Tatsache, dass Kinder Thema zuerst geladen wird, ist recht praktisch, da der Einsatz von Kindern Thema nicht zu ersetzen ist, sondern eher als Ergänzung zum Hauptthema.