ИСПРАВЛЕНО: ошибка неперехваченного типа сайта WordPress: jQuery (…).live не является функцией, из-за которой изображения с помощью JS не отображаются

#javascript #jquery #wordpress

#javascript #jquery #wordpress

Вопрос:

Я создаю сайт WordPress и внезапно получаю сообщение об ошибке:

 Uncaught TypeError: jQuery(...).live is not a function
    at HTMLDocument.<anonymous> (main.js?ver=1.1:214)
    at i (jquery.js?ver=1.12.4-wp:2)
    at Object.fireWith [as resolveWith] (jquery.js?ver=1.12.4-wp:2)
    at Function.ready (jquery.js?ver=1.12.4-wp:2)
    at HTMLDocument.J (jquery.js?ver=1.12.4-wp:2)
  

Я не уверен, как воспроизвести эту ошибку, поскольку это внезапное возникновение.

Когда я захожу на свой сайт, не загружаются изображения с JS

Я проверил свои плагины и, похоже, не вижу ничего нового, добавленного при просмотре сайта в Elementor, отображаются все изображения, есть идеи, как это исправить? Ни один из этих сайтов не был закодирован в raw, только чистый WordPress

Кто-нибудь может проверить element и сказать мне, вызывает ли у меня проблемы / какой плагин?

Комментарии:

1. WordPress 5.5 перестал использовать jquery migrate. Это вызывало проблемы со старыми плагинами и темами. Это может исправить это: wordpress.org/plugins/enable-jquery-migrate-helper

2. @Cully Спасибо, это изменение произошло в течение последнего дня или около того?

3. @Cully Спасибо, что это помогло! Можете ли вы опубликовать в качестве ответа, чтобы я мог выбрать, если кто-то еще в сообществе столкнется с такой же проблемой, пожалуйста 🙂

4. Я опубликовал более подробный ответ.

Ответ №1:

WordPress 5.5 перестал использовать jQuery migrate. Это изменение вызывало проблемы со старыми плагинами и темами. Если вы замечаете проблемы после обновления до WordPress 5.5, установка этого плагина может исправить это: https://wordpress.org/plugins/enable-jquery-migrate-helper /

Хотя, в конечном счете, лучшим решением было бы либо обновить ваши текущие плагины и темы до версий, которые не зависят от jQuery migrate. Или, если это невозможно, попробуйте перейти от этих плагинов к тем, которые не требуют переноса jQuery. Если вы этого не сделаете, вы, вероятно, столкнетесь с проблемами совместимости в будущем или, что еще хуже, с уязвимостями безопасности из-за этих устаревших плагинов / тем.

ОБНОВЛЕНИЕ: 18 сентября 2020 г.

Я просмотрел исходный код для плагина Enable jQuery Migrate Helper, и у него есть это условие для запуска:

 if ( version_compare( $GLOBALS['wp_version'], '5.6-alpha', '<' ) amp;amp; ! class_exists( 'jQuery_Migrate_Helper' ) ) {
    include_once __DIR__ . '/class-jquery-migrate-helper.php';
    add_action( 'plugins_loaded', array( 'jQuery_Migrate_Helper', 'init_actions' ) );
}
  

Таким образом, плагин будет работать только до WordPress 5.5 включительно. Как только WordPress достигнет версии 5.6-alpha, он перестанет работать.

ОБНОВЛЕНИЕ: 15 февраля 2021

Код плагина был обновлен для работы с WordPress 5.6. Однако в версии 5.6 и после нее он будет включать jquery-migrate-3.3.2 вместо jquery-migrate-1.4.1 намного меньше файлов (в основном скрипты jquery-ui). Если вы хотите продолжить использовать более старую версию jquery, есть пара вариантов.

Вариант A.Вы могли бы скопировать плагин jquery migrate в новую папку (по сути, сделать это своим собственным плагином), переименовать его, отредактировать class-jquery-migrate-helper.php файл, найти эту строку в replace_scripts функции:

 if ( version_compare( $GLOBALS['wp_version'], '5.6-alpha', '<' ) || 'yes' === get_option( '_jquery_migrate_downgrade_version', 'no' ) ) {
  

И замените ее на:

 if(true) {
  

Это приведет к тому, что плагин всегда будет устанавливать старую версию jquery.

Вариант B. Создайте новый плагин, который просто включает старые файлы jquery, выполнив следующее:

  1. Создайте новый плагин.
  2. Скопируйте все enable-jquery-migrate-helper/js файлы из плагина jquery migrate в js/ папку вашего нового плагина.
  3. Добавьте этот код в свой файл плагина:
 add_action('wp_default_scripts', function ($scripts) {
    $setScripts = function($scripts, $handle, $src, $deps = [], $ver = false, $in_footer = false) {
        $script = $scripts->query( $handle, 'registered' );

        if ( $script ) {
            // If already added
            $script->src  = $src;
            $script->deps = $deps;
            $script->ver  = $ver;
            $script->args = $in_footer;

            unset( $script->extra['group'] );

            if ( $in_footer ) {
                $script->add_data( 'group', 1 );
            }
        } else {
            // Add the script
            if ( $in_footer ) {
                $scripts->add( $handle, $src, $deps, $ver, 1 );
            } else {
                $scripts->add( $handle, $src, $deps, $ver );
            }
        }
    };

    $assets_url = $assets_url = plugins_url( 'js/', __FILE__  );

    $setScripts( $scripts, 'jquery-migrate', $assets_url . 'jquery-migrate/jquery-migrate-1.4.1-wp.js', array(), '1.4.1-wp' );
    $setScripts( $scripts, 'jquery-core', $assets_url . 'jquery/jquery-1.12.4-wp.js', array(), '1.12.4-wp' );
    $setScripts( $scripts, 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4-wp' );
    $setScripts( $scripts, 'jquery-ui-core', $assets_url . 'jquery-ui/core.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-core', $assets_url . 'jquery-ui/effect.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-blind', $assets_url . 'jquery-ui/effect-blind.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-bounce', $assets_url . 'jquery-ui/effect-bounce.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-clip', $assets_url . 'jquery-ui/effect-clip.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-drop', $assets_url . 'jquery-ui/effect-drop.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-explode', $assets_url . 'jquery-ui/effect-explode.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-fade', $assets_url . 'jquery-ui/effect-fade.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-fold', $assets_url . 'jquery-ui/effect-fold.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-highlight', $assets_url . 'jquery-ui/effect-highlight.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-puff', $assets_url . 'jquery-ui/effect-puff.min.js', array( 'jquery-effects-core', 'jquery-effects-scale' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-pulsate', $assets_url . 'jquery-ui/effect-pulsate.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-scale', $assets_url . 'jquery-ui/effect-scale.min.js', array( 'jquery-effects-core', 'jquery-effects-size' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-shake', $assets_url . 'jquery-ui/effect-shake.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-size', $assets_url . 'jquery-ui/effect-size.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-slide', $assets_url . 'jquery-ui/effect-slide.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-effects-transfer', $assets_url . 'jquery-ui/effect-transfer.min.js', array( 'jquery-effects-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-accordion', $assets_url . 'jquery-ui/accordion.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-autocomplete', $assets_url . 'jquery-ui/autocomplete.min.js', array( 'jquery-ui-menu', 'wp-a11y' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-button', $assets_url . 'jquery-ui/button.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-datepicker', $assets_url . 'jquery-ui/datepicker.min.js', array( 'jquery-ui-core' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-dialog', $assets_url . 'jquery-ui/dialog.min.js', array( 'jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-draggable', $assets_url . 'jquery-ui/draggable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-droppable', $assets_url . 'jquery-ui/droppable.min.js', array( 'jquery-ui-draggable' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-menu', $assets_url . 'jquery-ui/menu.min.js', array( 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-mouse', $assets_url . 'jquery-ui/mouse.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-position', $assets_url . 'jquery-ui/position.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-progressbar', $assets_url . 'jquery-ui/progressbar.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-resizable', $assets_url . 'jquery-ui/resizable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-selectable', $assets_url . 'jquery-ui/selectable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-selectmenu', $assets_url . 'jquery-ui/selectmenu.min.js', array( 'jquery-ui-menu' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-slider', $assets_url . 'jquery-ui/slider.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-sortable', $assets_url . 'jquery-ui/sortable.min.js', array( 'jquery-ui-mouse' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-spinner', $assets_url . 'jquery-ui/spinner.min.js', array( 'jquery-ui-button' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-tabs', $assets_url . 'jquery-ui/tabs.min.js', array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-tooltip', $assets_url . 'jquery-ui/tooltip.min.js', array( 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-ui-widget', $assets_url . 'jquery-ui/widget.min.js', array( 'jquery' ), '1.11.4-wp', 1 );
    $setScripts( $scripts, 'jquery-touch-punch', false, array( 'jquery-ui-widget', 'jquery-ui-mouse' ), '0.2.2', 1 );
}, -10);
  

Комментарии:

1. Спасибо, приятель, я ценю твою помощь

2. Функция не работала у меня в дочерней теме. Мне пришлось добавить сам скрипт в нижний колонтитул: <script src=" code.jquery.com/jquery-migrate-1.2.1.min.js "></... >

3. "Вы могли бы скопировать плагин jquery migrate в новую папку" как вы это делаете?

4. @CodyBugstein Скопируйте содержимое плагина jquery migrate в новую папку с другим именем. По сути, это похоже на создание нового плагина с тем же кодом, за исключением одного изменения, которое я описал.

5. Как вы копируете его в новую папку, вот о чем я спрашиваю

Ответ №2:

WordPress 5.5 перестал использовать jquery migrate. Это вызывало проблемы со старыми плагинами и темами. Это исправление: https://wordpress.org/plugins/enable-jquery-migrate-helper /

Комментарии:

1. Это не решение

2. @CodyBugstein Это было временное исправление, подробно описанное выше

3. Ну, это временно решило мой случай. Подтверждено для WordPress 5.7. Тема Avada: Вызвала проблемы с переключением вкладок в Fusion Builder

4. Это скорее флэш-исправление, чтобы вы могли поддерживать работу своего веб-сайта до тех пор, пока не будет получено постоянное разрешение (разработчики темы обновят для поддержки).