wp_enqueue_script() non funziona affatto

23 dic 2014, 22:16:36
Visualizzazioni: 70.2K
Voti: 9

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!

0
Tutte le risposte alla domanda 3
12
14

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.

23 dic 2014 22:30:39
Commenti

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 DON TOLIVER
23 dic 2014 22:37:57

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 Robert hue
23 dic 2014 22:41:57

Ho modificato il commento. Per favore leggilo :)

DON TOLIVER DON TOLIVER
23 dic 2014 22:42:50

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 Robert hue
23 dic 2014 22:46:13

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 DON TOLIVER
23 dic 2014 22:50:41

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 Robert hue
23 dic 2014 22:51:00

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

DON TOLIVER DON TOLIVER
23 dic 2014 22:55:15

Felice di aver potuto aiutare. :)

Robert hue Robert hue
23 dic 2014 22:57:37

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 DON TOLIVER
23 dic 2014 23:01:33

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

Robert hue Robert hue
23 dic 2014 23:08:09

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 Brad Dalton
9 lug 2015 04:01:48

Puoi sempre abituarti a digitare jQuery invece di $ tutto il tempo, e in questo modo non avrai mai questo problema. Inoltre, non avrai bisogno di hack o closure aggiuntive per risolvere un problema inesistente in questo modo.

mopsyd mopsyd
29 mar 2018 09:54:51
Mostra i restanti 7 commenti
0

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.

8 gen 2019 19:43:42
0

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.

8 gen 2019 22:21:03