Не удается отменить регистрацию скрипта с помощью wp_deregister_script

3 апр. 2017 г., 20:08:34
Просмотры: 14K
Голосов: 8

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

Вот краткая история шагов, которые я предпринял:

  1. Найти имя скрипта в исходных файлах плагина

    wp_register_script( 'dsq_count_script', plugins_url( '/media/js/count.js', FILE ) ); wp_localize_script( 'dsq_count_script', 'countVars', $count_vars ); wp_enqueue_script( 'dsq_count_script', plugins_url( '/media/js/count.js', FILE ) );

  2. Добавить действие для хука wp_print_scripts

    add_action('wp_print_scripts', array($this, 'deregister_unused_scripts'), 100);
    
  3. Реализовать функцию deregister_unused_scripts

    public function deregister_unused_scripts()
    {
        wp_dequeue_script('dsq_count_script');
        wp_deregister_script('dsq_count_script');
    }
    

Все равно не работает.

Я также попробовал другой хук:

add_action('wp_footer', array($this, 'deregister_unused_scripts'), 100);

Но это тоже не помогло, я все равно получаю вывод в футере:

<script type='text/javascript'>
/* <![CDATA[ */
var countVars = {"disqusShortname":"myname"};
/* ]]> */
</script>
<script type='text/javascript' src='http://myurl.net/wp-content/plugins/disqus-comment-system/media/js/count.js?ver=4.7.3'></script>

Что может быть не так?

РЕДАКТИРОВАНИЕ

Вот действие, используемое для регистрации скрипта плагина:

add_action('wp_footer', 'dsq_output_footer_comment_js');
2
Комментарии

На каком хуке и с каким приоритетом подключается скрипт?

Nathan Johnson Nathan Johnson
3 апр. 2017 г. 20:29:20

@NathanJohnson это стандартное значение = 10, смотрите обновление вопроса

CROSP CROSP
3 апр. 2017 г. 20:41:56
Все ответы на вопрос 2
3
15

При попытке удалить скрипт из очереди, нам нужно подключиться после того, как скрипт будет добавлен в очередь, но до его вывода. В данном случае, плагин Disqus использует хук wp_footer с приоритетом 10 для добавления скриптов в очередь. Скрипты в футере выводятся во время выполнения wp_footer с приоритетом 20. Таким образом, мы можем подключиться к wp_footer с приоритетом 11 и удалить скрипт из очереди.

add_action( 'wp_footer', 'wpse_262301_wp_footer', 11 );
function wpse_262301_wp_footer() { 
  wp_dequeue_script( 'dsq_count_script' ); 
}
3 апр. 2017 г. 20:52:21
Комментарии

Отлично !! Работает, большое спасибо за ответ и объяснение

CROSP CROSP
3 апр. 2017 г. 21:47:12

Для всех, кто слишком быстро прочитал решение и установил приоритет больше 20 (например, 999 или 1000 и т. д.), обратите особое внимание, что автор решения явно указывает, что скрипты выводятся с приоритетом 20. Потратил 45 минут, потому что слишком торопился попробовать реализовать решение.

Art Geigel Art Geigel
8 сент. 2020 г. 03:36:59

У меня не работает

IntoTheDeep IntoTheDeep
12 апр. 2022 г. 10:24:44
0

У меня не сработал add_action('wp_footer'), но сработал wp_enqueue_scripts:

add_action( 'wp_enqueue_scripts', 'my_deregister_scripts', 1000 );
 function my_deregister_scripts() {
   // Отменяем регистрацию скрипта wdm_script
   wp_deregister_script( 'wdm_script' );
   // Удаляем скрипт wdm_script из очереди
   wp_dequeue_script('wdm_script');
   // Отменяем регистрацию скрипта enjoyHint_script
   wp_deregister_script( 'enjoyHint_script' );
   // Удаляем скрипт enjoyHint_script из очереди
   wp_dequeue_script('enjoyHint_script');
}
11 авг. 2020 г. 12:30:22