2016-04-22 10 views
2

この特定の問題ではありませんが、ここで説明した問題は基本的にはhttps://wordpress.org/support/topic/select2-conflicting-with-acf-v5です。select2 3.5と4.0の競合を解消する方法

ワードプレスサイトにはselect2バージョン3.5を使用してすべての選択要素を処理するプラグインがありますこの結果、

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内部の知識は不足していますが、異なるプラグインが同じ名前を使用しようとするとどうなりますか?)

答えて

2

私はプラグインPopup Makerとまったく同じ問題に直面しています。私は役に立つかもしれないが、私が見ている唯一の問題は、wp_enqueue_scriptを使って注文プラグインがJSをロードすることを常に制御できないということだ。

私がしたことは、自分のスクリプトにselect2(DUH)が必要になったため、スクリプトのエンクロージャ内でこのようなことをしました。後で代わりに私が.pumSelect2()を使用.select2()を呼び出した後

$.fn.pumSelect2 = $.fn.select2;

これは私がv4を使用している、他の人がv3.5を使用している、自分のadmin.jsファイルにブートストラップしていて、select2がすでにロードされていてもロードするという状況です。

このようにすべてがハックですが、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に新しい名前にそれをブートストラップし、あった場合以前にロードしたバージョンを復元します。それ以外の場合は、スレートを消去して、別のものがロードされても競合が発生しないようにします。

また、wp_enqueue_scriptハンドルをpumselect2に変更して、他の誰かがselect2をロードしてもロードされるようにしました。

希望に役立ちます。

0

select2を使用しているWordPressのプラグインの作者の場合、私の答えはここにあります:Jquery Select2 plugin version checkは、バージョンチェックに関するガイダンスを提供することができます。

関連する問題