我面對與我的插件Popup Maker完全相同的問題。我發現這select2 multiple versions on same page/site可能是有用的,我唯一的問題是,我們不能總是控制訂單插件使用wp_enqueue_script加載他們的JS。
好吧,我所做的是讓我的腳本需要select2(DUH),然後就在我的腳本框中,我做了這樣的事情。
$.fn.pumSelect2 = $.fn.select2;
然後以後,而不是調用.select2()
我用.pumSelect2()
。
這個偉大的工程我的情況是,我使用V4,其他人使用V3.5,有的甚至引導它變成自己的admin.js文件,使其加載,即使選擇2已經加載。
所以在其所有的黑客攻擊所有,但因爲我們是通過裝載使用wp_enqueue_script做正確的方式。
我也退出select2如果它入隊。
// Deregister older versions, loaded by Types, Advanced Custom Fields etc.
if (wp_script_is('select2', 'registered')) {
wp_deregister_script('select2');
}
wp_register_script('select2', $js_dir . 'select2.full' . $suffix, array('jquery'), '4.0.1');
`
最後一個方法,現在
進一步測試後既然有這麼多其他插件使用舊版本的定製,這將有可能打破這是我想出了。
在我select2.full.js文件
對於加載jQuery和調用工廠開口部
(function (factory) {
var existingVersion = jQuery.fn.select2 || null;
if (existingVersion) {
delete jQuery.fn.select2;
}
if (typeof define === 'function' && define.amd !== undefined && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node/CommonJS
factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
jQuery.fn.pumselect2 = jQuery.fn.select2;
if (existingVersion) {
delete jQuery.fn.select2;
jQuery.fn.select2 = existingVersion;
}
}(function (jQuery) {
基本上我把它引導到一個新的名稱在這種情況下pumselect2,如果有之前是一個加載的版本我恢復它,否則我擦除板岩,以便如果另一個加載沒有衝突出現。
我也修改爲pumselect2我wp_enqueue_script把手,使其被加載,即使別人負荷選擇2。
希望有所幫助。