我努力解决这个问题,并找到了解决方案。
第一个问题是,您只需要针对侧栏中的小部件中的颜色选择器字段(以及使其正常工作的非活动小部件),这就是导致重复的原因,因为它针对的是可用小部件中的类。
$(\'#widgets-right .color-picker, .inactive-sidebar .color-picker\').wpColorPicker();
其次,您必须使用
ajaxComplete
此操作将应用颜色选择器:
1) 当您第一次将小部件添加到侧栏时(第一次添加时,WP会执行ajax请求)。
2) 当您单击save时,它也会执行该ajax请求。
这只会将颜色选择器应用于新添加的小部件,并且在保存小部件时,因此如果您离开小部件页面,然后再次返回,则不会出现初始ajax请求,因此您添加的小部件不会自动应用颜色选择器。
要处理此问题,您还需要ready
也应用颜色选择器的函数。
您还可以将其放在单独的js文件中,以便在添加多个小部件时不会重复。
我更进一步,使其仅适用于widget save上的元素,如果它是我的widget。
<script>
var elems = jQuery(\'#widgets-right .color-picker, .inactive-sidebar .color-picker\');
var widget_id = \'my-widget-id\';
jQuery(document).ready(function($) {
elems.wpColorPicker();
}).ajaxComplete(function(e, xhr, settings) {
if( settings.data.search(\'action=save-widget\') != -1 && settings.data.search(\'id_base=\' + widget_id) != -1 ) {
elems.wpColorPicker();
}
});
</script>