wp_deregister_script() — отменяет регистрацию файла JavaScript

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

wp_deregister_script( $handle );
$handle
(строка) рабочее название (идентификатор) скрипта, указанное при регистрации через функцию wp_register_script()

Функция ничего не возвращает.

Пример

Сейчас мы перерегистрируем стандартный файл jQuery в WordPress на свежую версию jQuery, взятую из Google CDN.

// сначала отменяем регистрацию старого файла
wp_deregister_script( 'jquery' );
 
// регистрируем новый
wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' );

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

  • VRS13 сентября 2014 в 22:09 #

    Привет, Миша!

    Можешь ли подсказать по поводу этого хука.
    Я поставила такой код для подгрузки jquery с гугла (без этого не работает слайдшоу и раскрытие меню).

     if(wp_script_is('jquery','registered')) { 
        $ver = $wp_scripts->registered['jquery']->ver;
        wp_deregister_script('jquery'); 
        wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"), false, $ver); 
        if(!is_admin()) wp_enqueue_script('jquery'); 
     
        $ver = $wp_scripts->registered['swfobject']->ver;
        wp_deregister_script('swfobject'); 
        wp_register_script('swfobject', ("http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"), false, $ver); 
        if(!is_admin()) wp_enqueue_script('swfobject');
     
    }

    но плагин перенаправлений фиксирует 404 ошибку - в любой url добавляется /undefined?тут_цифры

    Как еще можно отключить подгрузку встроенного квери?

    • Миша14 сентября 2014 в 09:09 #

      Привет!
      Да к черту версию, укажи этот параметр null. То есть откинь последние два параметра функции.

      Во-вторых, условия !is_admin() не нужно, добавь весь этот код в хук wp_enqueue_scripts.

      Короче вот:

      function true_enqueue_scripts(){
      	wp_deregister_script('jquery'); 
      	wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js');
      	wp_enqueue_script('jquery'); 
      	wp_deregister_script('swfobject'); 
      	wp_register_script('swfobject', 'http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js');
      	wp_enqueue_script('swfobject');
      }
      add_action('wp_enqueue_scripts','true_enqueue_scripts');

      Если ничего не изменится, пиши, разберемся.

  • VRS20 сентября 2014 в 12:09 #

    Не, не изменилось.. Я потом попробовала вставить код напрямую в хедер. Та же проблема. Оказалось, что это особенность самого гугловского жквери. Другие библиотеки, с того же jquery.com, не добавляют такого в урл, но и не работают на раскрытие меню.
    Пока нашла выход из положения дописав в хтаккесс.
    RedirectMatch 301 (.*)\/undefined$ $1/

    Подбирать другой скрипт и загружать его со своего хостинга?

    • Миша20 сентября 2014 в 14:09 #

      Ну просто посмотри тогда, какая версия jquery подключается из гугла, скачай и залей её к себе на хостинг.

  • VRS20 сентября 2014 в 14:09 #

    Так тоже пробовала. Видимо гугл что-то добавил в скрипты.

  • VRS5 марта 2015 в 02:03 #

    В итоге выяснилось, что проблема связана со скриптом слайдера Camera.
    Обернула

    if($("div").is("#slider1")) {
    	   ....
    }

    и undefined исчезло из url-а.
    Сейчас использую твой код. Спасибо!

  • Сергей20 мая 2015 в 11:05 #

    Михаил, пожалуйста подскажи, почему не работает wp_deregister_script?
    Делаю так:

    function add_scripts() {
      $dir = get_template_directory_uri();
     
      wp_deregister_script('jquery');
      wp_register_script('jquery', $dir . '/js/jquery-1.11.1.js', false, null);
      wp_enqueue_script( 'jquery' );
     
      wp_enqueue_script( 'my-script', $dir . '/js/script.js', array(), null );
      wp_enqueue_script( 'jcarousellite', $dir . '/js/jquery.jcarousellite.min.js', array(), null );
    }
    add_action( 'wp_enqueue_scripts', 'add_scripts' );

    Но на страницу подгружается всё равно родной!

    <script type='text/javascript' src='http://site.ru/wp-includes/js/jquery/jquery.js?ver=1.11.2'></script>
    <script type='text/javascript' src='http://site.ru/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1'></script>

    Заранее спасибо за ответ.

    • Миша20 мая 2015 в 22:05 #
      1. Можете попробовать поменять приоритет хука.
      2. Можете попробовать wp_dequeue_script().
      • Сергей21 мая 2015 в 10:05 #

        Спасибо, но я это пробовал, не получается.. Как только появляется строка

        wp_register_script('jquery', $dir . '/js/jquery-1.11.1.js', false, null);

        на страницу инклудится родной jquery.

        • Миша22 мая 2015 в 07:05 #

          Может тогда так?

          wp_enqueue_script('jquery', $dir . '/js/jquery-1.11.1.js', false, null);
          • Сергей22 мая 2015 в 17:05 #

            Так тоже пробовал, тот же результат. Я не победил этот момент, а нужно это было для плагина, который инклудится в массив jquery

            wp_enqueue_script( 'plugin', 'dir_plugin/js_file', array('jquery'), 'version' )

            . Пришлось вручную редактировать файл плагина, а после обновления всё сотрется.

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Добрый день! В принципе вам только немного нужно доработать код из этого поста - категории уже есть, цена - это и так...

  • eveniy: Добрый день Михаил, подскажите на примере как добавить свои произвольные поля в в вашу форму фильтрации: Я так понимаю...

  • Миша: Отлично! )

  • Дмитрий: сам разобрался: в настройках кастомного типа записи недавно оптимизировал настройки и переоптимизировал: в аргументе 'ta...

  • Дмитрий: У меня по какой-то причине пропало отображение (как в колонке меню слева, так и метабокс в записях ) раздела рубрик для...