Оновіть версію jquery


24

Запускаю WordPress версії 4.7.2. і він використовує jQuery версії 1.12. Мені потрібно оновити цю версію до вищої. Раніше я замінив її новою версією, але коли я оновлюю ядро ​​WordPress, він замінюється на 1.12 знову. Як я можу змінити версію jQuery, яку WordPress використовує постійно?

Відповіді:


29

Попередження: Не слід замінювати версію jQuery core, особливо на панелі адміністратора . Оскільки багато основних функціональних можливостей WordPress можуть залежати від версії. Також інший плагін може залежати відjQueryверсії, доданої в ядрі.

Якщо ви впевнені, що хочете змінити основну jQueryверсію, у такому випадку ви можете додати наступний КОД у functions.phpфайл своєї активної теми (ще краще, якщо ви створите плагін для цього):

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

Це замінить основну jQueryверсію і замість неї завантажить версію 3.1.1з сервера Google.

Також, хоча це не рекомендується , ви можете використовувати наступний додатковий рядок CODE для заміни версії jQuery wp-adminтакож:

add_action( 'admin_enqueue_scripts', 'replace_core_jquery_version' );

Таким чином, навіть після оновлення WordPress, ви матимете версію, jQueryяк вам захочеться.

Трохи краща функція:

Ця replace_core_jquery_versionфункція також видаляє jquery-migrateсценарій, доданий ядром WordPress. Це розумно, оскільки найновіша версія jQuery не буде належним чином працювати зі старішою версією jquery-migrate. Однак ви можете також включити новішу версію jquery-migrate. У цьому випадку замість цього використовуйте таку функцію:

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

Чи можете ви просто видалити дію з function.php, якщо виявите, що вона порушує вашу тему? Чи повернеться він до початкової версії jQuery чи це постійна зміна?
— Нік

1
Якщо функція зворотного виклику wp_enqueue_scriptsдії тільки оновлення jQuery та jQuery запускається з іншого місця, то видалення дії відновить початковий jQuery. Однак іноді браузери кешують старий КОД, залежно від налаштувань кеш-сервера. Отже, вам потрібно буде очистити кеш браузера після цього, щоб побачити зміни.
— Фаяз

ок, дякую, я просто хотів переконатися, що я не накрутив свій сайт, перш ніж додавати цю дію. У мене було відчуття, що ви сказали, що це точно, але я хотів це захистити.
— Нік

1
Це, очевидно, не є постійним , оскільки ця зміна залежить від самого КОДУ, нічого не зберігається на базі даних. Таким чином, видалення відповідного КОДЕ повернеться до старого стану.
— Фаяз

Сценарій міграції для версій 3.x не працює, коли плагіни / теми очікують версії нижче 1.12. Більше про це тут: wordpress.stackexchange.com/a/244543/75495
— cjbj

5

Я розробив плагін для цієї конкретної проблеми. Плагін не псується з WordPress jQuery, оскільки він завантажений лише в передній частині. Див.: Менеджер jQuery для WordPress

Чому ще один інструмент оновлення jQuery / Manager / Developer / Debugging?

Оскільки жоден із інструментів розробника не дозволяє вибрати конкретну версію jQuery та / або jQuery Migrate. Забезпечення як виробничої, так і мінімізованої версії. Дивіться функції нижче!

Executed Виконаний лише в передній частині, не заважає адміністратору WordPress / backend та WP-налаштуванням (з міркувань сумісності) Див. Https://core.trac.wordpress.org/ticket/45130 та https: // core. trac.wordpress.org/ticket/37110

✅ Вмикайте / вимикайте jQuery та / або міграцію jQuery

Активуйте конкретну версію jQuery та / або jQuery Migrate

І багато іншого! Код є відкритим кодом, щоб ви могли вивчити його, вивчити його та зробити свій внесок.


Практично всі користуються неправильною ручкою

WordPress насправді використовує ручку jquery-core, а не 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' );

JQuery ручка просто псевдонім для завантаження Jquery-ядра з JQuery-Migrate

Див докладніше про псевдонімами: wp_register_script декількох ідентифікаторів?

Правильний спосіб зробити це

У наведеному нижче прикладі я використовую офіційний jQuery CDN на https://code.jquery.com, я також використовую script_loader_tag, щоб я міг додати деякі атрибути CDN.
Ви можете використовувати наступний код:

// 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 );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.