wp_enqueue_script() nu funcționează deloc
Î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!
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.
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
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
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
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
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
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
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
De obicei ar trebui să funcționeze, nu sunt sigur de ce nu merge în cazul tău.
Robert hue
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
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.
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.