Как разгрузить скрипт / стили select2, загруженный новой WooCommerce 2.3.x?

мы являемся разработчиками тем, и мы уже используем скрипт select2 ( http://select2.github.io/ ) для ящиков SELECT в HTML в нашей теме wordpress. Новый WooCommerce 2.3.x, который только что переработал, теперь также использует скрипты select2. Но они переопределяют свои стили своими собственными (прежде всего важными тегами) разными способами.

Мы не можем переопределять все свои изменения в CSS с помощью важных правил, это будет много беспорядка CSS, который нам не нравится. Также теперь наш JS-скрипт загружается 2 раза и иногда конфликты (потому что woocommerce загружает свой собственный select2 js).

Мой вопрос – это лучший способ отключить woocommerce select2 CSS и JS-файлы в наших функциях темы? Мы хотим использовать нашу версию скрипта и наш файл стилей (также для элементов выбора woocommerce).

Я попытался использовать wp_dequeue_script, wp_deregister_script и те же функции, доступные для стилей, но это не помогает. Как я вижу, woocommerce добавляет скрипты / CSS после того, как наша тема уже инициализирована, и мы не можем ее деактивировать.

Благодарю.

Это код, загруженный в /includes/class-wc-frontend-scripts.php, который мне нужно отключить от функций темы:

self::register_script( 'select2', $assets_path . 'js/select2/select2' . $suffix . '.js', array( 'jquery' ), '3.5.2' ); self::enqueue_script( 'select2' ); wp_enqueue_style( 'select2', $assets_path . 'css/select2.css' ); 

Как выгрузить эти файлы CSS / JS в функции темы, не меняя исходные файлы WooCommerce?

Я нашел решение:

 add_action( 'wp_enqueue_scripts', 'mgt_dequeue_stylesandscripts', 100 ); function mgt_dequeue_stylesandscripts() { if ( class_exists( 'woocommerce' ) ) { wp_dequeue_style( 'select2' ); wp_deregister_style( 'select2' ); wp_dequeue_script( 'select2'); wp_deregister_script('select2'); } } 

Вот суть, которая может помочь или обеспечить путь вперед: https://gist.github.com/gregrickaby/2846416

Также посмотрите на includes/class-wc-frontend-scripts.php чтобы увидеть, как скрипты находятся в очереди.

Я скопировал приведенный ниже код со следующего URL-адреса, который показывает, как удалить отдельные стили, что также может помочь: http://docs.woothemes.com/document/disable-the-default-stylesheet/

 // Remove each style one by one add_filter( 'woocommerce_enqueue_styles', 'jk_dequeue_styles' ); function jk_dequeue_styles( $enqueue_styles ) { unset( $enqueue_styles['woocommerce-general'] ); // Remove the gloss unset( $enqueue_styles['woocommerce-layout'] ); // Remove the layout unset( $enqueue_styles['woocommerce-smallscreen'] ); // Remove the smallscreen optimisation return $enqueue_styles; } 

Для тех, кто получает дублирование полей выбора. Кажется, что проблема связана с тем, что Woocommerce обращается к:

 ?wc-ajax=update_order_review 

после загрузки страницы, которая затем вводит элемент select2 сразу после каждого элемента select:

 <span class="select2 select2-container ... > 

Этот диапазон отображается в раскрывающемся списке и содержит выбранный в данный момент вариант.

Дублирующий выпадающий элемент

Я попробовал добавить wp_dequeue_script( 'wc-checkout' ); к его коду, который остановил диапазон от появления, но также остановил другие функции, которые были необходимы.

В конце концов, я спрятал span с помощью css:

 .woocommerce-checkout .select2-container { display:none; } 

Были некоторые недавние изменения в WooCommerce (v 3.2.1), в которых они разветвляли скрипт select2, и поэтому код выше @Dmitry больше не функционирует. Новый код, который работал для меня, ниже ..

 add_action( 'wp_enqueue_scripts', 'agentwp_dequeue_stylesandscripts', 100 ); function agentwp_dequeue_stylesandscripts() { if ( class_exists( 'woocommerce' ) ) { wp_dequeue_style( 'selectWoo' ); wp_deregister_style( 'selectWoo' ); wp_dequeue_script( 'selectWoo'); wp_deregister_script('selectWoo'); } }