Actualizarea versiunii jQuery
Folosesc WordPress versiunea 4.7.2 și acesta utilizează jQuery versiunea 1.12. Trebuie să actualizez această versiune la una mai nouă. Am înlocuit-o anterior cu o versiune nouă, dar când actualizez nucleul WordPress, aceasta revine la versiunea 1.12. Cum pot schimba definitiv versiunea de jQuery pe care o folosește WordPress?

Atenție: Nu ar trebui să înlocuiți versiunea de bază a jQuery, în special în panoul de administrare. Deoarece multe funcționalități de bază ale WordPress pot depinde de această versiune. De asemenea, alte plugin-uri pot depinde de versiunea
jQuery
inclusă în nucleu.
Dacă sunteți sigur că doriți să schimbați versiunea de bază a jQuery
, în acest caz puteți adăuga următorul COD în fișierul functions.php
al temei active (și mai bine ar fi să creați un plugin pentru asta):
function replace_core_jquery_version() {
wp_deregister_script( 'jquery' );
// Schimbați URL-ul dacă doriți să încărcați o copie locală a jQuery de pe propriul server.
wp_register_script( 'jquery', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
}
add_action( 'wp_enqueue_scripts', 'replace_core_jquery_version' );
Aceasta va înlocui versiunea de bază a jQuery
și va încărca în schimb versiunea 3.1.1
de pe serverul Google.
De asemenea, deși nu este recomandat, puteți folosi următoarea linie suplimentară de COD pentru a înlocui versiunea jQuery și în wp-admin
:
add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );
În acest fel, chiar și după actualizarea WordPress, veți avea versiunea de jQuery
dorită.
O funcție puțin mai bună:
Funcția replace_core_jquery_version
de mai sus elimină și scriptul jquery-migrate
adăugat de nucleul WordPress. Acest lucru este rezonabil, deoarece cea mai nouă versiune de jQuery nu va funcționa corect cu o versiune mai veche a jquery-migrate
. Cu toate acestea, puteți include și o versiune mai nouă a jquery-migrate
. În acest caz, folosiți următoarea funcție:
function replace_core_jquery_version() {
wp_deregister_script( 'jquery-core' );
wp_register_script( 'jquery-core', "https://code.jquery.com/jquery-3.1.1.min.js", array(), '3.1.1' );
wp_deregister_script( 'jquery-migrate' );
wp_register_script( 'jquery-migrate', "https://code.jquery.com/jquery-migrate-3.0.0.min.js", array(), '3.0.0' );
}

Poți să elimini pur și simplu acțiunea din functions.php dacă descoperi că strică tema ta? Se va reveni la versiunea originală de jQuery sau aceasta este o modificare permanentă?

Dacă funcția de callback a acțiunii wp_enqueue_scripts
actualizează doar jQuery, iar jQuery este încărcat din altă parte, atunci eliminarea acțiunii va restaura versiunea originală de jQuery. Totuși, uneori browserele cachează codul vechi, în funcție de setările de cache ale serverului, așa că va trebui să ștergi cache-ul browserului după ce faci asta pentru a vedea modificarea.

ok mulțumesc, voiam doar să mă asigur că nu stric site-ul înainte de a adăuga această acțiune. Am simțit că ceea ce ai spus este corect, dar am vrut să fiu precaut.

Acest lucru este evident nu permanent, deoarece această modificare depinde de CODUL în sine, nimic nu este salvat în baza de date. Deci, eliminarea CODULUI asociat va readuce starea anterioară.

Scriptul de migrare pentru versiunile 3.x nu funcționează atunci când plugin-urile/temele așteaptă o versiune sub 1.12. Mai multe despre asta aici: https://wordpress.stackexchange.com/a/244543/75495

@cjbj desigur că așa stau lucrurile. Cu toate acestea, întrebarea era despre abandonarea 1.12
, deci evident răspunsul nu acoperă acest aspect.

Am dezvoltat un plugin pentru această problemă specifică. Plugin-ul nu interferează cu jQuery din WordPress deoarece este încărcat doar în front-end. Vezi: jQuery Manager for WordPress
De ce încă un instrument pentru actualizarea/managementul/dezvoltarea/debugging-ul jQuery?
Deoarece niciunul dintre instrumentele pentru dezvoltatori nu vă permite să selectați o versiune specifică de jQuery și/sau jQuery Migrate. Oferind atât versiunea de producție, cât și cea minificată. Vezi caracteristicile de mai jos!
✅ Este executat doar în front-end, nu interferează cu administrarea WordPress sau cu personalizatorul WP (din motive de compatibilitate) Vezi: https://core.trac.wordpress.org/ticket/45130 și https://core.trac.wordpress.org/ticket/37110
✅ Pornit/oprit jQuery și/sau jQuery Migrate
✅ Activează o versiune specifică de jQuery și/sau jQuery Migrate
Și multe altele! Codul este open source, astfel că îl puteți studia, învăța din el și contribui.
Aproape toată lumea folosește handle-ul incorect
WordPress folosește de fapt handle-ul jquery-core, nu jquery:
// jQuery $scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4' ); $scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4' ); $scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );
Handle-ul jquery este doar un alias pentru încărcarea jquery-core cu jquery-migrate
Mai multe informații despre aliasuri: wp_register_script multiple identifiers?
Modul corect de a face acest lucru
În exemplul meu de mai jos folosesc CDN-ul oficial jQuery de la https://code.jquery.com. De asemenea, folosesc script_loader_tag pentru a putea adăuga câteva atribute CDN.
Puteți folosi următorul cod:
// Front-end, nu este executat în administrarea WP sau în personalizatorul WP (din motive de compatibilitate)
// Vezi: https://core.trac.wordpress.org/ticket/45130 și https://core.trac.wordpress.org/ticket/37110
function wp_jquery_manager_plugin_front_end_scripts() {
$wp_admin = is_admin();
$wp_customizer = is_customize_preview();
// jQuery
if ( $wp_admin || $wp_customizer ) {
// echo 'Suntem în administrarea WP sau în personalizatorul WP';
return;
}
else {
// Deregistrează jQuery din nucleul WP, vezi https://github.com/Remzi1993/wp-jquery-manager/issues/2 și https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
wp_deregister_script( 'jquery' ); // handle-ul jquery este doar un alias pentru încărcarea jquery-core cu jquery-migrate
// Deregistrează jQuery din WP
wp_deregister_script( 'jquery-core' );
// Deregistrează jQuery Migrate din WP
wp_deregister_script( 'jquery-migrate' );
// Înregistrează jQuery în head
wp_register_script( 'jquery-core', 'https://code.jquery.com/jquery-3.3.1.min.js', array(), null, false );
/**
* Înregistrează jquery folosind jquery-core ca dependență, astfel încât alte scripturi să poată folosi handle-ul jquery
* vezi https://wordpress.stackexchange.com/questions/283828/wp-register-script-multiple-identifiers
* Mai întâi înregistrăm scriptul și apoi îl încărcăm, vezi de ce:
* https://wordpress.stackexchange.com/questions/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
* https://stackoverflow.com/questions/39653993/what-is-diffrence-between-wp-enqueue-script-and-wp-register-script
*/
wp_register_script( 'jquery', false, array( 'jquery-core' ), null, false );
wp_enqueue_script( 'jquery' );
}
}
add_action( 'wp_enqueue_scripts', 'wp_jquery_manager_plugin_front_end_scripts' );
function add_jquery_attributes( $tag, $handle ) {
if ( 'jquery-core' === $handle ) {
return str_replace( "type='text/javascript'", "type='text/javascript' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'", $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'add_jquery_attributes', 10, 2 );
