Что означает “Не отменяйте регистрацию скрипта jquery в административной зоне”?

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

Мы все знаем преимущества использования кэширования CDN и т.д. В связи с этим я отменил регистрацию скрипта и зарегистрировал jQuery с использованием ссылки CDN. Но проблема в том, что это показывает ошибку вот такого рода.

Да, отладка в WordPress включена.

Она показывает ошибку такого вида.

Замечание: wp_deregister_script был вызван неправильно. Не отменяйте регистрацию скрипта jQuery в области администрирования. Чтобы нацелиться на тему интерфейса, используйте хук wp_enqueue_scripts. Пожалуйста, ознакомьтесь с отладкой в WordPress для получения дополнительной информации. (Это сообщение было добавлено в версии 3.6.) в D:\learnnepal\wp-includes\functions.php на строке 3622

Но я думаю, что код в порядке.

Когда я удаляю следующие строки кода, это сообщение не появляется?

add_action( 'wp_enqueue_scripts', function(){
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), null, false );
    wp_enqueue_script( 'jquery');
});

Есть ли проблема с кодом?

Очевидно, отключение отладки является обходным путем, но это очень плохая практика, не так ли?

На основе ошибки…

add_action( 'wp_enqueue_scripts', function(){
    if (is_admin()) return; // не изменяйте очереди в бэкенде
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), null, false );
    wp_enqueue_script( 'jquery');
});

Честно говоря, если у вас нет огромного трафика в широком географическом районе, я бы сказал, что CDN сильно переоценены. Я наблюдал задержки на сайтах, которыми управлял, и очень часто узким местом оказывался именно CDN — я смотрю на тебя, Google. Поэтому это может быть решение, не стоящее реализации.

Во-вторых, изменение очереди ядровых скриптов — опасная игра. Плагины и темы зависят от этих скриптов. Если вы загрузите версию, отличную от ожидаемой, скрипты могут не сработать.

Очевидно, отключение отладки является обходным путем, но это очень плохая практика, не так ли?

Производство или разработка? Отладка должна быть отключена на производственном сервере и включена только во время отладки.

Как отмечает ошибка, вы действительно не хотите отменять регистрацию скрипта jQuery в области администрирования. Чтобы избежать уведомления, вы можете:

if ( ! is_admin() ) {
    add_action( 'wp_enqueue_scripts', function(){
        wp_deregister_script( 'jquery' );
        wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), null, false );
        wp_enqueue_script( 'jquery');
    });
}

Причина, по которой не следует отменять регистрацию в области администрирования, заключается в том, что многие основные функции WP для административного раздела зависят от JavaScript, и команда WP написала этот функционал так, чтобы он работал именно с версией jQuery, которая поставляется с WordPress. Хотя не должно быть никакой разницы в функциональности, если бы в другой версии jQuery отсутствовало что-то важное или было нечто сломанное, это могло бы сделать вашу административную панель непригодной для использования.

Если вы используете правильный хук, он не должен выдавать замечания:

if ( is_admin() ) {
    $hook = 'admin_enqueue_scripts';
} elseif ( 'wp-login.php' === $GLOBALS['pagenow'] ) {
    $hook = 'login_enqueue_scripts';
} else {
    $hook = 'wp_enqueue_scripts';
}
add_action( $hook, function() {
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), null, false );
    wp_enqueue_script( 'jquery');
} );

Я столкнулся с той же ошибкой на странице входа. Необходимо также проверить является ли это страницей входа.

Актуальная версия кода выглядит следующим образом:

    add_action( 'init', function(){
    
        // Проверьте, является ли это админкой или страницей входа
        if (is_admin() || is_login()) return;
    
        // Удалите версию WP.
        wp_deregister_script( 'jquery' );
        wp_deregister_script( 'jquery-migrate' );
    
        // Добавьте jQuery из CDN Google.
        wp_register_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js', false, '3.7.1', true );
        wp_enqueue_script( 'jquery' );
        wp_add_inline_script( 'jquery', 'window.jQuery || document.write("<script src=\"' . esc_url( get_site_url() ) . '/wp-includes/js/jquery/jquery.min.js?ver=3.7.1\" type=\"text/javascript\"><\/script>")' );
    
        // Добавьте jQuery migrate из CDN jsDelivr.
        wp_register_script( 'jquery-migrate', '//cdn.jsdelivr.net/npm/[email protected]/dist/jquery-migrate.min.js', false, '3.5.2', true );
        wp_enqueue_script( 'jquery-migrate' );
        wp_add_inline_script( 'jquery-migrate', 'window.jQuery || document.write("<script src=\"' . esc_url( get_site_url() ) . '/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1\" type=\"text/javascript\"><\/script>")' );
    });

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

Ошибка сообщения: «Notice: wp_deregister_script was called incorrectly. Do not deregister the jquery script in the administration area» в контексте WordPress указывает на некорректное использование функции wp_deregister_script() в админ-зоне. Центральная проблема заключается в том, что вы пытаетесь изменить стандартное подключение jQuery при помощи внешнего CDN в той области, где WordPress полагается на свои стандартные скрипты для корректного функционирования.

Важные аспекты и шаги для устранения проблемы:

  1. Понимание проблемы:

    • В админ-зоне WordPress многие функции зависят от специфичной версии jQuery, которая поставляется вместе с системой. Изменение источника jQuery может повлиять на стабильность и правильность работы администратора.
  2. Правильное использование хуков:

    • Если вы хотите заменить jQuery на фронтенде, используйте хук wp_enqueue_scripts. Контекст использования методов имеет критическую значимость. Ошибка появляется, так как код выполняется без проверки, находитесь ли вы в админ-зоне.
  3. Оптимизация для разных областей сайта:

    • Разделите выполнение скрипта в зависимости от области:
      if ( is_admin() ) {
       $hook = 'admin_enqueue_scripts';
      } elseif ( 'wp-login.php' === $GLOBALS['pagenow'] ) {
       $hook = 'login_enqueue_scripts';
      } else {
       $hook = 'wp_enqueue_scripts';
      }
      add_action( $hook, function() {
       wp_deregister_script( 'jquery' );
       wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), null, false );
       wp_enqueue_script( 'jquery');
      });
  4. Проверка условий выполнения:

    • Используйте проверки, чтобы код выполнялся только на страницах, где это действительно необходимо. Добавьте проверку на админ-зону и страницу входа:
      add_action( 'init', function(){
       if (is_admin() || 'wp-login.php' === $GLOBALS['pagenow']) return;
       wp_deregister_script( 'jquery' );
       wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', false, '3.7.1', true );
       wp_enqueue_script( 'jquery' );
      });
  5. Безопасность и стабильность:

    • внедряйте замены осторожно, чтобы ни один из критических кусков функциональности админ-зоны не пострадал, и проводите тестирование перед массовым внедрением на продакшн.

Кроме того, при использовании CDN важно учитывать надежность и скорость соединения, так как внешний источник может стать узким местом. Рассмотрите необходимость подобного изменения и получите выгоды только в случае действительно широкой географии пользователей.

В заключение, отключение отладки в продакшне нормальная и рекомендуемая практика, но устранение ошибок с отключенной отладкой недопустимо на стадии разработки и тестирования. Соблюдайте эти правила для обеспечения корректной работы сайта и избегайте ошибок в будущем.

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

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