Кнопка “Добавить скрипт” в плагине W3 Total Cache не работает из-за конфликта версий jQuery.

Вопрос или проблема

При попытке устранить проблему с блокировкой рендеринга на моем сайте я столкнулся с проблемой в плагине W3 Total Cache на странице его настроек минификации.

Две кнопки для добавления JS (Добавить скрипт) и CSS (Добавить таблицу стилей) не работают, после нажатия на них ничего не происходит.

Причина проблемы видна в сообщении об ошибке в консоли браузера (WP использует jQuery 1.12.4, W3TC требует jQuery <1.9)

Связанный вопрос jQuery(…).live не является функцией

options.js?ver=0.9.6:324 
Uncaught TypeError: jQuery(...).live is not a function
    at HTMLDocument.<anonymous> (options.js?ver=0.9.6:324)
    at i (load-scripts.php?c=0&load[]=jquery-core,utils&ver=4.8.5:2)
    at Object.fireWith [as resolveWith] (load-scripts.php?c=0&load[]=jquery-core,utils&ver=4.8.5:2)
    at Function.ready (load-scripts.php?c=0&load[]=jquery-core,utils&ver=4.8.5:2)
    at HTMLDocument.K (load-scripts.php?c=0&load[]=jquery-core,utils&ver=4.8.5:2)

options.js — это файл, вызывающий проблему в строках, подобных этой (jQuery(...).live был объявлен устаревшим с версии jQuery 1.9):

jQuery('#pgcache__reject__logged_roles').live('click', function(){
        w3tc_input_enable('#pgcache_reject_roles input[type=checkbox]', jQuery('#pgcache__reject__logged_roles:checked').size());
    });

Какой будет самый приемлемый и чистый способ решения проблемы:

  • Существует ли обновленный плагин W3TC?
  • Есть ли чистый способ заставить W3TC использовать другую версию jQuery, чем WP?
  • Использовать плагин jQuery, например jQuery Migrate?
  • Ручное изменение затронутых строк?

Настройки минификации JS

WP Admin обычно автоматически загружает скрипт миграции. Видимо, ваша тема отключила/зарегистрировала этот скрипт.

Будущий релиз исправит проблемы с вызовами устаревшей функции live() в случаях, подобных вашему, когда скрипт миграции не работает или не загружен.

Ответ или решение

Решение проблемы с кнопкой "Добавить скрипт" в плагине W3 Total Cache из-за конфликта версий jQuery

В процессе оптимизации вашего веб-сайта с помощью плагина W3 Total Cache (W3TC) могли возникнуть проблемы, связанные с работой функций на странице настроек минификации. Конкретно, кнопки для добавления JavaScript и CSS стилей не реагируют на нажатия, что приводит к невозможности устранения проблем с блокировкой рендеринга.

Описание проблемы

При нажатии кнопки "Добавить скрипт" в консоли браузера появляются ошибки, указывающие на конфликт версий jQuery:

Uncaught TypeError: jQuery(...).live is not a function

Здесь следует отметить, что WordPress использует jQuery версии 1.12.4, тогда как плагин W3TC требует jQuery версии менее 1.9. Данная ситуация приводит к тому, что вызываются устаревшие методы, такие как .live(), которые были удалены в более поздних версиях jQuery.

Возможные решения

1. Обновление плагина W3TC

Первым шагом стоит проверить наличие обновлений для плагина W3 Total Cache. В дальнейшем планируется выпуск обновления, которое исправит проблемы с вызовами устаревших функций, даже если скрипт миграции не загружен. Это наиболее целесообразный подход, так как он требует минимальных усилий и является наиболее чистым решением.

2. Использование различных версий jQuery

Хотя это решение представляется достаточно привлекательным, оно может привести к более сложным проблемам совместимости. Основные рекомендации здесь:

  • Создайте рабочую копию вашего сайта.
  • Измените файл functions.php вашей темы, чтобы регистрировать и подключить более старую версию jQuery.

Однако этот подход может вызвать дополнительные конфликты с другими плагинами или скриптами, поэтому его стоит использовать с осторожностью.

3. Подключение jQuery Migrate

Использование плагина jQuery Migrate может помочь вам использовать устаревшие функции, такие как .live(), без необходимости изменять код плагина. jQuery Migrate отслеживает старые функции и возможно, исправляет ошибки. Убедитесь, что модули обновлены, и jQuery Migrate загружен.

4. Ручное изменение затронутых строк

Если вы располагаете временем и возможностями для редактирования кода, вы можете самостоятельно изменить строки в файле options.js. Замените все вызовы .live() на .on(), который поддерживается в более новых версиях jQuery:

jQuery('#pgcache__reject__logged_roles').on('click', function() {
    w3tc_input_enable('#pgcache_reject_roles input[type=checkbox]', jQuery('#pgcache__reject__logged_roles:checked').length);
});

Этот подход требует аккуратности и понимания кода, так как это может повлиять на другие функции плагина.

Заключение

Решение проблемы с неработающей кнопкой "Добавить скрипт" в плагине W3 Total Cache можно достичь разными способами. Наилучшим вариантом будет ожидание обновления плагина, так как это обеспечит оптимальное решение без риска дополнительных проблем. Если вам необходимо быстрое решение, рассмотрите возможность подключения jQuery Migrate или внеся ручные исправления в код. Убедитесь, что у вас всегда есть резервная копия сайта перед внесением изменений.

Оцените материал
Добавить комментарий

Капча загружается...