Обновить версию jquery

24

Я использую WordPress версии 4.7.2. и он использует JQuery версии 1.12. Мне нужно обновить эту версию до более высокой. Я заменял его новой версией раньше, но когда я обновляю ядро ​​WordPress, он снова заменяется на 1.12. Как я могу изменить версию jQuery, которую WordPress использует постоянно?

Сиамак Фердос
источник

Ответы:

29

Предупреждение: вам не следует заменять базовую версию jQuery, особенно в админ-панели . Поскольку многие функциональные возможности 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' );
}
Fayaz
источник
Можете ли вы просто удалить действие из functions.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 Manager для WordPress

Зачем нужен еще один jQuery Updater / Manager / Developer / Debugging?

Потому что ни один из инструментов разработчика не позволяет выбрать конкретную версию jQuery и / или jQuery Migrate. Предоставление как производственной, так и минимизированной версии. Смотрите особенности ниже!

Executed Выполняется только во внешнем интерфейсе, не мешает администрированию / бэкенду WordPress и настройщику WP (по соображениям совместимости). См .: https://core.trac.wordpress.org/ticket/45130 и https: // core. trac.wordpress.org/ticket/37110

Включите / выключите jQuery и / или jQuery Migrate.

✅ Активировать определенную версию jQuery и / или jQuery Migrate.

И многое другое! Код с открытым исходным кодом, так что вы можете изучить его, учиться на нем и внести свой вклад.


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

WordPress использует дескриптор ядра jquery, а не 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 );
Ремзи Кавдар
источник