wp_enqueue_script() nu funcționează deloc

23 dec. 2014, 22:16:36
Vizualizări: 70.2K
Voturi: 9

Încerc să încarc fișiere JavaScript folosind wp_enqueue_script(), dar nu funcționează deloc. Iată codul meu:

function load_css_js() {
    // Încarcă fișierul CSS de bază
    wp_enqueue_style('gdgt-base', get_template_directory_uri() . '/css/gdgt-base.css');
    // Încarcă fișierul CSS pentru iconițe
    wp_enqueue_style('gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css', true);
    // Înregistrează scriptul JavaScript de bază
    wp_register_script('gdgt-base', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ) , true);
    // Încarcă scriptul JavaScript înregistrat
    wp_enqueue_script('gdgt-base');
}

add_action('wp_enqueue_scripts', 'load_css_js');

Totuși, când deînregistrez JavaScript-ul implicit WP și înregistrez jQuery din altă parte, funcționează. Ce ar putea cauza această problemă? Mulțumesc pentru ajutor!

0
Toate răspunsurile la întrebare 3
12
14

wp_enqueue_style și wp_enqueue_script acceptă mulți parametri și este foarte important să îi utilizați în ordinea corectă, altfel aceste funcții vor eșua.

Mai jos sunt seturile complete de parametri pentru fiecare funcție.

wp_enqueue_style( $handle, $src, $deps, $ver, $media );
wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );

În wp_enqueue_style ați definit corect $handle și $src, dar $deps l-ați setat la true, ceea ce nu este corect. Același lucru este valabil și pentru wp_enqueue_script.

Iată funcția corectată.

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

Pentru mai multe informații, citiți documentația pentru fiecare funcție în codex.

23 dec. 2014 22:30:39
Comentarii

EDIT: Se pare că încarcă fișierul JS, dar codul din fișierul JS nu funcționează. (Funcționează dacă dezactivez jQuery-ul implicit). | Din păcate, codul fixat nu funcționează :(

DON TOLIVER DON TOLIVER
23 dec. 2014 22:37:57

Tocmai l-am testat și funcționează corect. Cred că în tema ta altă funcție suprascrie output-ul. Caută alte funcții wp_enqueue_scripts...

Robert hue Robert hue
23 dec. 2014 22:41:57

Am editat comentariul. Te rog citește-l :)

DON TOLIVER DON TOLIVER
23 dec. 2014 22:42:50

Acesta este un subiect complet diferit de ce codul tău din fișierele JS nu funcționează. Motivul principal pentru care codul JS nu funcționează cu jQuery din nucleu, dar funcționează cu jQuery extern, ar putea fi faptul că jQuery din nucleu rulează în modul noconflict. Iar codul tău JS nu. Va trebui să modifici codul JS pentru jQuery noconflict.

Robert hue Robert hue
23 dec. 2014 22:46:13

Problema este că încarc cea mai recentă versiune de jQuery de la http://code.jquery.com/jquery-latest.min.js și funcționează. Deci ce ar putea cauza conflictul?

DON TOLIVER DON TOLIVER
23 dec. 2014 22:50:41

Iată soluția pentru cealaltă problemă a ta. De ce $ pentru jQuery nu funcționează?. Convertește codul tău pentru modul jQuery noconflict și va funcționa.

Robert hue Robert hue
23 dec. 2014 22:51:00

Mulțumesc mult, Robert! Dacă mai întâlnește cineva această problemă, folosește pur și simplu: (function($){ $(document).ready(function(){ //your code }); })(jQuery); :)

DON TOLIVER DON TOLIVER
23 dec. 2014 22:55:15

Mă bucur că am putut ajuta. :)

Robert hue Robert hue
23 dec. 2014 22:57:37

Hmm, am o altă întrebare, am înlocuit false cu true pentru $in_footer dar nu funcționează. M-am uitat și în codex și se pare că există true într-unul din exemplele lor. Dar din nu știu ce motiv, la mine nu merge.

DON TOLIVER DON TOLIVER
23 dec. 2014 23:01:33

De obicei ar trebui să funcționeze, nu sunt sigur de ce nu merge în cazul tău.

Robert hue Robert hue
23 dec. 2014 23:08:09

Se pare că folosești același handle pentru a înregistra un script și o foaie de stil. Nu sunt sigur dacă asta e o problemă sau nu, deoarece unul este CSS și celălalt JS gdgt-base'

Brad Dalton Brad Dalton
9 iul. 2015 04:01:48

Poți să te obișnuiești să tastezi mereu jQuery în loc de $, și atunci nu vei mai avea niciodată această problemă. De asemenea, nu vei avea nevoie de hack-uri sau închideri suplimentare pentru a rezolva o problemă inexistentă în acest fel.

mopsyd mopsyd
29 mar. 2018 09:54:51
Arată celelalte 7 comentarii
0

Pentru alți inepți ca mine, am zis să contribui și eu aici. :-)

Tocmai am petrecut o oră pentru că scrisesem array( '' ) în loc de array() în dependințe.

Să știți că există o diferență între:

wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array( '' ), false, true );

și

wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array(), false, true );

...Prima variantă nu va funcționa niciodată. A doua va merge. :-)

Răspunsul lui @Robert_Hue m-a condus la soluția mea.

8 ian. 2019 19:43:42
0

Când înregistrați și adăugați scripturi în coadă, nu este necesar să apelați atât wp_register_script(), cât și wp_enqueue_script(). Puteți apela doar wp_enqueue_script().

Sintaxa de bază a funcției wp_enqueue_script este:

wp_enqueue_script( string $handle, string $src = '', array $deps = array(), string|bool|null $ver = false, bool $in_footer = false )


Conform codului dvs., ar trebui să arate astfel:

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

[vizitați]: https://developer.wordpress.org/reference/functions/wp_enqueue_script/
documentația pentru mai multe informații.

8 ian. 2019 22:21:03