wp_enqueue_script() non funziona affatto
Sto cercando di accodare i file JavaScript usando wp_enqueue_script(), ma non funziona affatto. Ecco il mio codice:
function load_css_js() {
// Carica il file CSS base
wp_enqueue_style('gdgt-base', get_template_directory_uri() . '/css/gdgt-base.css');
// Carica il file CSS delle icone
wp_enqueue_style('gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css', true);
// Registra lo script base con dipendenza da jQuery
wp_register_script('gdgt-base', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ) , true);
// Accoda lo script base
wp_enqueue_script('gdgt-base');
}
add_action('wp_enqueue_scripts', 'load_css_js');
Tuttavia, quando deregistro il JavaScript predefinito di WP e registro jQuery da un'altra fonte, funziona. Cosa potrebbe causare questo problema? Grazie per l'aiuto!
wp_enqueue_style e wp_enqueue_script accettano molti parametri ed è molto importante utilizzarli nell'ordine corretto altrimenti queste funzioni falliranno.
Ecco l'elenco completo dei parametri per ciascuna funzione.
wp_enqueue_style( $handle, $src, $deps, $ver, $media );
wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );
Nella tua wp_enqueue_style definisci correttamente $handle e $src, ma imposti $deps su true il che non è corretto. Lo stesso vale per wp_enqueue_script.
Quindi ecco la tua funzione corretta.
function load_css_js() {
wp_enqueue_style( 'gdgt-base', get_template_directory_uri() . '/css/gdgt-base.css', false, NULL, 'all' );
wp_enqueue_style( 'gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css', false, NULL, 'all' );
wp_register_script( 'gdgt-base', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ), NULL, false );
wp_enqueue_script( 'gdgt-base' );
}
add_action( 'wp_enqueue_scripts', 'load_css_js' );
Per maggiori informazioni, leggi la documentazione di ciascuna funzione sul Codex.
MODIFICA: Sembra che stia caricando il file JS, ma il codice all'interno del file JS non funziona. (Funziona se deregistro il jQuery predefinito). | Purtroppo, il codice corretto non funziona :(
DON TOLIVER
L'ho appena testato e funziona correttamente. Penso che nel tuo tema qualche altra funzione stia sovrascrivendo l'output. Cerca altre funzioni wp_enqueue_scripts...
Robert hue
Questo è un argomento completamente diverso sul perché il tuo codice nei file JS non funziona. La ragione principale per cui il codice JS non funziona con il core jQuery ma funziona con jQuery esterno potrebbe essere che il core jQuery viene eseguito in modalità noconflict. E il tuo codice JS no. Dovrai modificare il tuo codice JS per la modalità noconflict di jQuery.
Robert hue
Il fatto è che sto caricando l'ultima versione di jQuery da http://code.jquery.com/jquery-latest.min.js e funziona. Quindi cosa potrebbe causare il conflitto?
DON TOLIVER
Ecco la soluzione al tuo altro problema. Perché $ per jQuery non funziona?. Converti il tuo codice per la modalità noconflict di jQuery e funzionerà.
Robert hue
Grazie mille, Robert! Se qualcun altro dovesse imbattersi in questo, basta usare: (function($){
$(document).ready(function(){
//your code
});
})(jQuery); :)
DON TOLIVER
Ehm ho un'altra domanda, ho sostituito false con true per $in_footer ma non funziona. Ho guardato anche nel codex e sembra che ci sia true in uno dei loro esempi. Ma per qualche motivo non funziona nel mio caso.
DON TOLIVER
Di solito dovrebbe funzionare, non sono sicuro del perché non funzioni nel tuo caso.
Robert hue
Sembra che tu stia usando lo stesso handle per registrare uno script e un foglio di stile. Non sono sicuro se questo sia un problema o meno, dato che uno è CSS e l'altro è js gdgt-base'
Brad Dalton
Per altri idioti come me, ho pensato di contribuire qui. :-)
Ho appena perso un'ora perché avevo scritto array( '' ) invece di array() nelle dipendenze.
Basta sapere che c'è una differenza tra:
wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array( '' ), false, true );
e
wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array(), false, true );
... Il primo non caricherà mai. Il secondo invece sì. :-)
La risposta di @Robert_Hue mi ha portato alla soluzione.
Durante la registrazione e l'accodamento degli script, non è necessario chiamare sia wp_register_script() che wp_enqueue_script(). Basta chiamare direttamente wp_enqueue_script().
La sintassi base di wp_enque_script è:
wp_enqueue_script( string $handle, string $src = '', array $deps = array(), string|bool|null $ver = false, bool $in_footer = false )
Nel tuo caso, il codice dovrebbe essere così:
function load_css_js() {
wp_enqueue_style('gdgt-base-style', get_template_directory_uri() . '/css/gdgt-base.css');
wp_enqueue_style('gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css');
wp_enqueue_script('gdgt-base-script', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ) , '2019' true);
}
add_action('wp_enqueue_scripts', 'load_css_js');
[visita]: https://developer.wordpress.org/reference/functions/wp_enqueue_script/
la documentazione per maggiori informazioni.