Actualizarea versiunii jQuery

21 feb. 2017, 11:02:03
Vizualizări: 68.6K
Voturi: 38

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?

0
Toate răspunsurile la întrebare 2
7
47

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' );
}
21 feb. 2017 15:16:12
Comentarii

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ă?

Nick Nick
23 aug. 2018 19:54:02

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.

Fayaz Fayaz
23 aug. 2018 20:37:25

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.

Nick Nick
23 aug. 2018 20:39:13

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

Fayaz Fayaz
23 aug. 2018 20:39:28

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 cjbj
24 oct. 2018 16:55:51

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

Fayaz Fayaz
24 oct. 2018 18:18:02

Din păcate, nu pare să funcționeze în WordPress 5. Vechiul Jquery este descărcat, dar noul nu este încărcat.

TelFiRE TelFiRE
5 mar. 2020 07:18:57
Arată celelalte 2 comentarii
0
17

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:

https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226

// 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 );
1 iul. 2019 22:15:53