好的,我终于找到了导致问题的原因,并想在这里分享我的解决方案,以防有人有同样的经历。令人遗憾的是,这些信息没有在任何地方突出显示(codex、wp博客、stackexchange等)。
第一个问题是如何将click事件绑定到按钮。如果您直接在按钮选择器上绑定它,保存小部件后WordPress将刷新它并从该按钮取消绑定click事件。因此,这里的解决方案是单击主体,然后将其委托给按钮选择器:
$(\'body\').on(\'click\', \'.deo-image-upload-button\', function(e) {
e.preventDefault();
...
}
第二个问题是,小部件保存后,隐藏的输入不再填充所选图像的url。这是因为我如何缓存
input 和
image mediaUploader外部变量中的元素
select 事件只需将这些元素放在内部即可解决此问题:
mediaUploader.on(\'select\', function() {
var attachment = mediaUploader.state().get(\'selection\').first().toJSON();
$(\'.deo-hidden-input\').val(attachment.url);
$(\'.deo-media-image\').attr(\'src\', attachment.url);
});
因此,经过所有清理和优化后,我的代码现在看起来如下所示:
/* WordPress Media Uploader
-------------------------------------------------------*/
var mediaUploader = wp.media.frames.file_frame = wp.media({
title: \'Select an Image\',
button: {
text: \'Use This Image\'
},
multiple: false
});
$(\'body\').on(\'click\', \'.deo-image-upload-button\', function(e) {
e.preventDefault();
if ( mediaUploader ) {
mediaUploader.open();
}
mediaUploader.on(\'select\', function() {
var attachment = mediaUploader.state().get(\'selection\').first().toJSON();
$(\'.deo-hidden-input\').val(attachment.url);
$(\'.deo-media-image\').attr(\'src\', attachment.url);
});
mediaUploader.open();
});
希望这些信息对您有所帮助;)