如何解决select2 3.5和4.0冲突

问题描述:

虽然不是那个特定的问题,但这里描述的问题 - https://wordpress.org/support/topic/select2-conflicting-with-acf-v5基本上也是我的问题。如何解决select2 3.5和4.0冲突

一个WordPress网站有两个WordPress插件,一个使用选择2 3.5版来处理所有的选择元素,其他(包含在一个插件我写的),使用4.0来处理某些特定的人。这导致错误

Error: select2.min.js?ver=3.4.5:21 Uncaught Error: Option 'multiple' is not allowed for Select2 when attached to a element.

有没有可能的解决方案来解决这类问题?我应该尝试检测3.5是否已加载并尝试避免冲突的设置?也许尝试让“我的”select2首先加载,并希望由于我更具体,不会与使用3.5的代码冲突? (我的jQuery内部知识缺乏,当不同的插件尝试使用相同的名称时会发生什么?)

我面对与我的插件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。

希望有所帮助。

对于使用选择2这里我的答案WordPress的插件作者:Jquery Select2 plugin version check可以提供关于版本检查的一些指导。