Оновіть версію 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.