2014-05-07 24 views
11

Ho un tema figlio e sono in grado di aggiungere lo script che desidero utilizzare per sostituire alcune funzioni del tema e sostituire alcuni dei pulsanti.wp_dequeue_script per il tema figlio per sostituire lo script

Ma non riesco a rimuovere il vecchio pulsante in modo che entrambi vengano visualizzati uno sopra l'altro. Come posso rimuovere lo script js principale?

qui è la mia function.php per il tema bambino

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'); 

risposta

13

Alcuni problemi qui per cominciare

  • Si deve usare get_stylesheet_directory_uri() per i temi dei bambini e per i temi get_template_directory_uri() genitore invece dei get_bloginfo() funzioni. Quest'ultimo è più lento e utilizza le prime due funzioni

  • script e stili dovrebbero essere cancellati E e rimosse dalla coda per rimuoverli completamente dalla coda

  • Priorità è importante. Devi agganciare la tua funzione in un secondo momento per assicurarti che gli stili e gli script siano registrati prima di annullarli, altrimenti non funzionerà.

Soluzione:

Copiare il file js genitore al vostro tema bambino e aprirlo e fare la necessaria cambiato. Salvare il file

Ora è necessario annullare l'accodamento E annullare la registrazione di file genitore js e poi Enqueue si file nuovo tema bambino js

Esempio

/* 
* 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

Grazie per le informazioni aggiuntive. Usare PHP_INT_MAX sembra piuttosto OTT, però? –

+0

Potrebbe essere sì, ma mi piace usarlo nei temi figlio per assicurarmi che le mie funzioni vengano agganciate per ultime. Questa è puramente la tua preferenza –

+0

Il punto chiave per far funzionare tutto questo è assicurarti di abbinare ciò che viene utilizzato dopo l'aggiunta di "add_action" nel tema dei tuoi genitori. A volte viene usato 'wp_enqueue_scripts' e talvolta' wp_footer', a seconda dei file e del tema. – fidev

4

È necessario capire dove il tema genitore sta generando i pulsanti.

Se vengono generati da javascript, è possibile deselezionare lo script che sta creando i pulsanti. Basta fare attenzione, come qualsiasi altro javascript in quel file verrà rimosso pure. Se questo è un problema, il modo migliore per farlo è copiare lo script js nella cartella del tema, rimuovere la parte che non si desidera, deselezionare l'originale e accodare lo script modificato.

Come fare questo.

Per disconnettere uno script è necessario sapere che è gestito. Here's un fantastico tutorial su come ottenere le maniglie degli script, molto utile. Per riassumere nel caso in cui il collegamento si esaurisce:

aggiunti al file functions.php

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'); 

Ciò stampare un elenco di tutti i js e css essere caricati alla tua pagina in alto. Se hai problemi a capire cosa, puoi sempre usare un dom inspector, come su Chrome o Firefox. Su chrome- fai clic con il pulsante destro del mouse - inspect element - Resources- Frames- Your url del tuo sito - script.

Questo vi darà un elenco di tutti gli script e le loro posizioni.

Una volta individuato quale script è necessario, copiarlo sul tema e rimuovere la parte che aggiunge i pulsanti.

Quindi deselezionare lo script indesiderato utilizzando la maniglia che abbiamo trovato in precedenza e accodare il nuovo.

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); 

Se i pulsanti vengono generati da PHP, è necessario trovare il file che sta generando il codice HTML nel tema genitore, copiarlo sul tema del bambino, e la rimozione delle linee offensive.

8

Test con il tema genitore Venti Quattordici che ha questo nel suo file functions.php:

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'); 

L'azione wp_enqueue_scripts non ha una priorità dichiarata, quindi è usando il default 10. Per far funzionare dequeue dobbiamo aggiungere una priorità più bassa nel nostro tema bambinofunctions.php di file:

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

Questo ha funzionato per me. Grazie mille! –

+4

nota che una priorità 'inferiore' significa che l'azione deve essere attivata in un secondo momento, e quindi l'argomento prioritario di add_action deve essere maggiore, confondendo correttamente ?. Argomenti con priorità inferiore significa che spara prima, più alto significa che scocca dopo – edhurtig

3

Voglio aggiungere che abbiamo bisogno di usare get_stylesheet_directory_uri() quando si aggiunge lo script di sostituzione perché get_template_directory_uri() restituisce il tema genitore directory.

Vedere la documentazione di WordPress here

3

In un tipico flusso di wordpress, plugin vengono caricati prima del tema, e in caso di tema figlio, il tema figlio viene caricato prima del tema principale, in particolare, il file functions.php di un tema figlio è incluso prima di functions.php di un genitore. Pertanto, le azioni wp_enqueue_scripts vengono impilate e successivamente eseguite nell'ordine, a meno che la priorità delle azioni sia definita diversamente da tale valore predefinito (10). Il problema qui è che si sta tentando di deselezionare lo script che non è ancora stato accodato.


Per rimuovere lo script aggiunto dal genitore, aumentare la priorità di wp_enqueue_scripts azione del tema bambino di valore superiore al valore definito in azione tema genitore.

// 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'); 
} 


Per sostituire lo script, per esempio, si desidera apportare alcune modifiche e lasciare le dipendenze esistenti e la localizzazione ci sono due modi.

Utilizzare wp_enqueue_script con lo stesso handle nome, a causa del fatto che se si tenta di registrare o accodare una maniglia già registrato, verranno ignorati i nuovi parametri, utile se lo script viene successivamente localizzata dal genitore per mantenere i dati localizzati.

// 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'); 
} 

Uso globale $wp_scripts oggetto per modificare le proprietà solo necessarie, ad esempio, cambiano solo src proprietà di copione già accodati o registrato.

// 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'; 
} 


Il fatto che il tema bambino viene caricato prima è molto pratico in quanto l'uso del tema bambino non è quello di sostituire, ma più come Oltre al tema principale.