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.
Grazie per le informazioni aggiuntive. Usare PHP_INT_MAX sembra piuttosto OTT, però? –
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 –
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