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 :(

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
...

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.

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?

Ecco la soluzione al tuo altro problema. Perché $ per jQuery non funziona?. Converti il tuo codice per la modalità noconflict di jQuery e funzionerà.

Grazie mille, Robert! Se qualcun altro dovesse imbattersi in questo, basta usare: (function($){
$(document).ready(function(){
//your code
});
})(jQuery);
:)

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.

Di solito dovrebbe funzionare, non sono sicuro del perché non funzioni nel tuo caso.

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'

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.
