Ich bin mit dem gleichen Problem mit meinem Plugin Popup Maker konfrontiert. Ich fand diese select2 multiple versions on same page/site, die nützlich sein kann, das einzige Problem, das ich vorhersehe, ist, dass wir nicht immer kontrollieren können, dass die Bestell-Plugins ihre JS mit wp_enqueue_script laden.
Ok, was ich getan habe, wurde mein Skript erfordert SELECT2 (DUH), dann nur in meinem Skripten Gehäuse habe ich etwas wie das getan.
$.fn.pumSelect2 = $.fn.select2;
dann später statt .select2()
des Aufrufs ich .pumSelect2()
.
Das funktioniert gut für meine Situation, die ich v4 verwende, andere verwenden v3.5, einige sogar Bootstrap es in ihre eigene admin.js-Datei, so dass es geladen wird, obwohl select2 bereits geladen ist.
Also alles in allem ist es ein Hack, aber da wir es richtig machen, indem wir mit wp_enqueue_script laden.
Ich nehme auch select2 aus der Warteschlange, wenn es eingereiht ist.
// 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');
`
letzte Methode For Now
Nach weiteren Tests und da so viele andere Plugins verwenden alte Versionen mit Anpassungen, die wahrscheinlich bricht das ist, was ich kam mit.
In meinem select2.full.js
Für den Öffnungsbereich-Datei, die jQuery und Anrufe Fabrik
(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) {
Grundsätzlich ich Bootstrap es zu einem neuen Namen in diesem Fall pumselect2 lädt, und wenn es zuvor habe ich eine geladene version wiederhergestellt, ansonsten wische ich die slate ab, so dass bei einem anderen laden kein konflikt entsteht.
Auch ich meine Handle wp_enqueue_script zu pumselect2 geändert, so dass es geladen wird, auch wenn jemand anderes select2 lädt.
Hoffe, dass hilft.