Aktualisiere die jquery Version

24

Ich führe WordPress Version 4.7.2 aus. und es verwendet jQuery Version 1.12. Ich muss diese Version auf eine höhere Version aktualisieren. Ich habe es vorher durch eine neue Version ersetzt, aber wenn ich den WordPress-Kern aktualisiere, wird es wieder durch 1.12 ersetzt. Wie kann ich die Version von jQuery ändern, die WordPress permanent verwendet?

Siamak Ferdos
quelle

Antworten:

29

Warnung: Sie sollten die jQuery-Kernversion nicht ersetzen, insbesondere nicht im Admin-Bereich . Da viele WordPress-Kernfunktionen von der Version abhängen können. Andere Plugins können auch von derjQueryim Core hinzugefügten Versionabhängen.

Wenn Sie sicher sind, dass Sie die Kernversion ändern möchten jQuery, können Sie in diesem Fall den folgenden CODE in die functions.phpDatei Ihres aktiven Themas einfügen (noch besser, wenn Sie ein Plugin dafür erstellen):

function replace_core_jquery_version() {
    wp_deregister_script( 'jquery' );
    // Change the URL if you want to load a local copy of jQuery from your own 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' );

Dadurch wird die Kernversion ersetzt jQueryund stattdessen die Version 3.1.1vom Google-Server geladen .

Auch wenn dies nicht empfohlen wird , können Sie die folgende zusätzliche CODE-Zeile verwenden, um auch die jQuery-Version zu ersetzen wp-admin:

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

Auf diese Weise haben Sie auch nach der Aktualisierung von WordPress die jQuerygewünschte Version .

Eine etwas bessere Funktion:

Die replace_core_jquery_versionobige Funktion entfernt auch jquery-migrateSkripts, die vom WordPress-Kern hinzugefügt wurden. Dies ist sinnvoll, da die neueste Version von jQuery mit einer älteren Version von nicht ordnungsgemäß funktioniert jquery-migrate. Sie können jedoch auch eine neuere Version von jquery-migratehinzufügen. Verwenden Sie in diesem Fall stattdessen die folgende Funktion:

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' );
}
Fayaz
quelle
Kannst du die Aktion einfach aus functions.php entfernen, wenn du feststellst, dass sie dein Thema verletzt? Wird die ursprüngliche jQuery-Version wiederhergestellt oder handelt es sich um eine dauerhafte Änderung?
Nick
1
Wenn die Rückruffunktion der wp_enqueue_scriptsAktion nur jQuery aktualisiert und jQuery von einer anderen Stelle in die Warteschlange gestellt wird, wird durch Entfernen der Aktion die ursprüngliche jQuery wiederhergestellt. Manchmal zwischenspeichern Browser jedoch alten CODE, abhängig von den Server-Cache-Einstellungen. Sie müssen also den Browser-Cache löschen, um die Änderung zu sehen.
Fayaz
ok danke, ich wollte nur sicherstellen, dass ich meine Seite nicht vermasselt habe, bevor ich diese Aktion hinzufügte. Ich hatte das Gefühl, dass das, was Sie sagten, korrekt ist, aber ich wollte auf Nummer sicher gehen.
Nick
1
Dies ist offensichtlich nicht dauerhaft , da diese Änderung vom CODE selbst abhängt und nichts in der Datenbank gespeichert wird. Wenn Sie also den zugehörigen CODE entfernen, wird der alte Zustand wiederhergestellt.
Fayaz
Das Migrationsskript für 3.x-Versionen funktioniert nicht, wenn Plugins / Themes eine Version unter 1.12 erwarten. Mehr dazu hier: wordpress.stackexchange.com/a/244543/75495
cjbj
5

Ich habe ein Plugin für dieses spezielle Problem entwickelt. Das Plugin kann nicht mit WordPress jQuery umgehen, da es nur im Frontend geladen wird. Siehe: jQuery Manager für WordPress

Warum noch ein jQuery Updater / Manager / Developer / Debugging-Tool?

Da Sie mit keinem der Entwicklertools eine bestimmte Version von jQuery und / oder jQuery Migrate auswählen können. Bereitstellung sowohl der Produktions- als auch der verkleinerten Version. Siehe Funktionen unten!

✅ Wird nur im Frontend ausgeführt und beeinträchtigt WordPress-Administrator / Backend und WP-Customizer nicht (aus Kompatibilitätsgründen). Siehe: https://core.trac.wordpress.org/ticket/45130 und https: // core. trac.wordpress.org/ticket/37110

Schalten Sie jQuery und / oder jQuery Migrate ein / aus

✅ Aktivieren Sie eine bestimmte Version von jQuery und / oder jQuery Migrate

Und vieles mehr! Der Code ist Open Source, sodass Sie ihn studieren, daraus lernen und Beiträge leisten können.


Fast jeder benutzt den falschen Griff

WordPress verwendet tatsächlich das JQuery-Core-Handle, nicht 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' );

Das jquery- Handle ist nur ein Alias ​​zum Laden von jquery-core mit jquery-migrate

. Weitere Informationen zu Aliasen: wp_register_script Mehrere Bezeichner?

Der richtige Weg, es zu tun

In meinem Beispiel unten verwende ich das offizielle jQuery-CDN unter https://code.jquery.com. Ich verwende auch script_loader_tag, damit ich einige CDN-Attribute hinzufügen kann.
Sie könnten den folgenden Code verwenden:

// Front-end not excuted in the wp admin and the wp customizer (for compatibility reasons)
// See: https://core.trac.wordpress.org/ticket/45130 and 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 'We are in the WP Admin or in the WP Customizer';
        return;
    }
    else {
        // Deregister WP core jQuery, see https://github.com/Remzi1993/wp-jquery-manager/issues/2 and https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
        wp_deregister_script( 'jquery' ); // the jquery handle is just an alias to load jquery-core with jquery-migrate
        // Deregister WP jQuery
        wp_deregister_script( 'jquery-core' );
        // Deregister WP jQuery Migrate
        wp_deregister_script( 'jquery-migrate' );

        // Register jQuery in the head
        wp_register_script( 'jquery-core', 'https://code.jquery.com/jquery-3.3.1.min.js', array(), null, false );

        /**
         * Register jquery using jquery-core as a dependency, so other scripts could use the jquery handle
         * see /wordpress/283828/wp-register-script-multiple-identifiers
         * We first register the script and afther that we enqueue it, see why:
         * /wordpress/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
         * /programming/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 );
Remzi Cavdar
quelle