WordPress как на ладони
Официальная конференция по WordPress в Moскве 18-19 августа, начало в 9:00 wordpress jino

wp_deregister_script() WP 2.1

Удаляет ранее зарегистрированный скрипт.

Чтобы подключить новый скрипт используйте функцию wp_register_script(), а чтобы вывести его в коде используйте wp_enqueue_script(). Обычно эти функции используются в связке и подключаются к событиям:

  • Лицевая часть: wp_enqueue_scripts, wp_print_scripts, wp_print_styles

  • Админ-панель: admin_enqueue_scripts, admin_print_scripts, admin_print_styles

  • Страница входа: login_enqueue_scripts

Чтобы убрать вывод скрипта из очереди используйте wp_dequeue_script()

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

wp_deregister_script( $handle );
$handle(строка) (обязательный)
Название скрипта, который нужно удалить (деригистрировать).

Примеры

#1 Удалим скрипт jQuery

Предположим нам нужно удалить базовую регистрацию jQuery скрипта. Тогда используем такой код в файле темы functions.php:

wp_deregister_script( 'jquery' );

#1.2 Зарегистрируем свой jQuery скрипт

Теперь, предположим мы хотим изменить ссылку откуда будет загружаться jQuery скрипт, будем использовать CDN google, т.е. скрипт будет скачиваться с репозитории google:

// Регистрация jQuery
add_action( 'wp_enqueue_scripts', 'jquery_script_method' );
function jquery_script_method() {
	wp_deregister_script( 'jquery' );
	wp_register_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', false, null, true );
	wp_enqueue_script( 'jquery' );
}    

Код wp_deregister_script: wp-includes/functions.wp-scripts.php VER 4.9.8

<?php
function wp_deregister_script( $handle ) {
	_wp_scripts_maybe_doing_it_wrong( __FUNCTION__ );

	/**
	 * Do not allow accidental or negligent de-registering of critical scripts in the admin.
	 * Show minimal remorse if the correct hook is used.
	 */
	$current_filter = current_filter();
	if ( ( is_admin() && 'admin_enqueue_scripts' !== $current_filter ) ||
		( 'wp-login.php' === $GLOBALS['pagenow'] && 'login_enqueue_scripts' !== $current_filter )
	) {
		$no = array(
			'jquery', 'jquery-core', 'jquery-migrate', 'jquery-ui-core', 'jquery-ui-accordion',
			'jquery-ui-autocomplete', 'jquery-ui-button', 'jquery-ui-datepicker', 'jquery-ui-dialog',
			'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-menu', 'jquery-ui-mouse',
			'jquery-ui-position', 'jquery-ui-progressbar', 'jquery-ui-resizable', 'jquery-ui-selectable',
			'jquery-ui-slider', 'jquery-ui-sortable', 'jquery-ui-spinner', 'jquery-ui-tabs',
			'jquery-ui-tooltip', 'jquery-ui-widget', 'underscore', 'backbone',
		);

		if ( in_array( $handle, $no ) ) {
			$message = sprintf(
				/* translators: 1: script name, 2: wp_enqueue_scripts */
				__( 'Do not deregister the %1$s script in the administration area. To target the front-end theme, use the %2$s hook.' ),
				"<code>$handle</code>",
				'<code>wp_enqueue_scripts</code>'
			);
			_doing_it_wrong( __FUNCTION__, $message, '3.6.0' );
			return;
		}
	}

	wp_scripts()->remove( $handle );
}

Cвязанные функции

Из метки: script (скрипт)

Еще из раздела: Регистрация script и style

8 комментов
  • Иван

    Добрый день! Ох уж этот WP 4.4, надобавлял скриптов и прочего после обновления, неужели нельзя было все это сделать без добавления в исходный код, а внутри обрабатывать...

    Тимур, вчера с вашей помощью отключил Rest Api, спасибо, но сегодня еще скрипт нашел wp-embed.min.js в подвале. Я не вставляю контент с других сайтов в записи и не хочу чтобы мой контент вставляли, как мне удалить скрипт?

    Сделал небольшую функцию на основе wp_deregister_script:

    add_action( 'wp_print_scripts','remove_embed', 100 );
    function remove_embed () {
    	wp_deregister_script ('wp-embed');
    }

    Скрипт с ее помощью удаляется, но быть может есть более элегантное решение, например, с помощью функции remove_action? sorry

    Ответить2.6 года назад #
    • Kama6673

      Да есть:

      remove_action( 'wp_head',                'wp_oembed_add_discovery_links'         );
      remove_action( 'wp_head',                'wp_oembed_add_host_js'                 );
      
      2
      Ответить2.6 года назад #
  • spartak

    Добрый день. При верстке темы нужно было подключить самую последнюю версию jquery, воспользовался функцией wp_deregister_script, все работает нормально.

    Решил проверить тему на ошибки плагином Theme Check, он ругается, пишет - "Темы не должны отменять регистрацию основных скриптов". Есть другие способы, или просто игнорировать подобные сообщения?
    Спасибо.

  • Сперва смотрю, какие скрипты и стили подключаются на странице

    function wpcustom_inspect_scripts_and_styles() {
     global $wp_scripts;
     global $wp_styles;
     $scripts_list = '';
     $styles_list = '';
     // Runs through the queue scripts
     foreach( $wp_scripts->queue as $handle ) :
       $scripts_list .= $handle . ' | ';
     endforeach;
    
     // Runs through the queue styles
     foreach( $wp_styles->queue as $handle ) :
       $styles_list .= $handle . ' | ';
     endforeach;
    
     printf('Scripts: %1$s  Styles: %2$s', 
       $scripts_list . "<br>", 
       $styles_list);
    }
    
    add_action( 'wp_print_scripts', 'wpcustom_inspect_scripts_and_styles' );

    Потом на всех страницах кроме ... отключаю ненужное из списка полученного acute

    function my_deregister_javascript() {
      if ( !is_page('location') ) {
    	wp_deregister_script( 'wpgmp_map' );
    	wp_deregister_script( 'wpgmp-google-map-main' );
      }
    }
    add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

    И как-то оно одни скрипты отключает, а другие почему-то нет. Какие варианты возможных причин?

    • Kama6673

      Используй wp_dequeue_script(). Также поставь приоритет поменьше не 100, а лучше используй хук wp_enqueue_scripts с большим приоритетом:

      add_action( 'wp_enqueue_scripts', 'jquery_script_method', 999 );
  • Здравствуйте!
    Интегрировал верстку лендинга и отключил с помощью wp_deregister_script() встроенную jquery. Вместо нее в футере подключаю свою. При таком подключении плагин Contact form 7 не добавляет на страницу свои скрипты. Попытка подключить вместо моей версии такую же как родная тоже ничего не дало. Если же убираю отключение родного джейквери, то нормально все работает. Но мне не нужно 2 джейквери на странице. Куда копать?

    UPD: Вроде получилось после того как при регистрации своего джейквери сменил кастомное имя на просто 'jquery'

    UPD2: Я так понял что в системе должно быть зарегистрировано то или иное jquery, но оно должно быть. Если у меня все скрипты свалены до кучи в один сжатый файл, включающий в себz и джейквери, то при отключении штатного джейквери мне все равно придется назвать этот файл при подключении 'jquery'?

Здравствуйте, !     Войти . Зарегистрироваться