我的jQuery脚本可以很好地打开wp。media uploader,选择或上载单个图像,同时显示图像并通过隐藏输入将其附件ID添加到现有选项阵列(在“我的插件设置”页面上)。我的目标是重新产生相同的结果,but for multiple images at a time.
像我之前的许多人一样,我在使用wp方面遇到了障碍。用于此类目的的媒体。
首先,我将展示完整的工作脚本:它打开媒体框,允许我选择图像,捕获隐藏输入的图像附件ID(最关键的功能),并在保存操作之前提供预览图像,在页面刷新时,通过其附件ID将图像显示在我想要的位置。对于任何研究和编写了使用wp的例程的人来说,大多数都是熟悉的。这种特殊的用法(撇开插件设置的特殊性不谈)到目前为止已经有了很好的记录,至少与多个文件的用法相比是这样的。
工作单映像代码
jQuery(document).ready( function($) {
var myplugin_media_upload;
$(\'#myplugin-change-image\').click(function(e) {
e.preventDefault();
// If the uploader object has already been created, reopen the dialog
if( myplugin_media_upload ) {
myplugin_media_upload.open();
return;
}
// Extend the wp.media object
myplugin_media_upload = wp.media.frames.file_frame = wp.media({
title: button_text.title,
button: { text: button_text.button },
multiple: false
});
//When a file is selected, grab the URL and set it as the text field\'s value
myplugin_media_upload.on( \'select\', function() {
attachment = myplugin_media_upload.state().get(
\'selection\' ).first().toJSON();
console.log(attachment); //irrelevant to functionality but useful
//adds the ID to the hidden input
$(\'#myplugin-featured-image\').val( attachment.id );
//provides the preview image
$(\'#myplugin-thumbnail\').empty();
$(\'#myplugin-thumbnail\').append(
\'<img src="\' + attachment.url +
\'" class="attachment-thumbnail myplugin-preview" />\' );
$(\'#myplugin-new-global\').show();
});
//Open the uploader dialog
myplugin_media_upload.open();
});
});
大部分功能失调的多幅图像尝试结合各处的多个选择例程片段,我尝试了各种改编。下面这一部分将重点介绍关键序列。我之所以提出它,并不是因为它有一个完全成功的机会,而是因为它部分成功,并确实产生了一些可能有用和有趣的信息:
// Extend the wp.media object
myplugin_media_upload = wp.media.frames.file_frame = wp.media({
title: button_text.title,
button: { text: button_text.button },
multiple: true //get multiple images
});
//When a file is selected, grab the URL and set it as the text field\'s value
myplugin_media_upload.on( \'select\', function() {
var selection = myplugin_media_upload.state().get( \'selection\' );
selection.map( function( attachment ) {
attachment.toJSON();
//shows each attachment ID:
console.log(attachment.id);
//last is captured for:
$(\'#myplugin-featured-image\').val( attachment.id );
//captures code fragment (see notes)
console.log(attachment.url);
});
});
虽然上一个示例中最后一个“附件缩略图”相关的内容根本不起作用,因此未包含在内,但此代码确实捕获了所选图像的最后一个附件ID,并将其作为隐藏输入所需的“val”附加。
查看控制台,我发现无论选择了多少图像,实际上都是按ID收集的,attachment.url
结果是注册为一段功能异常的URL,其派生代码显然来自wp-includes/js/backbone.min.js
. 也许有人会在这里找到线索,或者至少觉得有点有趣(!?)。
我想我想在ID暴露时捕获它们,将它们组装在一个数组中,然后foreach将它们循环到不同类型的图像显示中,可能是使用递增的html ID,同样,我需要能够捕获用于PHP处理的数组。
我很确定,一旦处理了“组装和访问数组”部分,我就可以处理最后两个部分(显示和PHP处理),但此时,我的jQuery功能变得非常不足。这导致了数小时糟糕的尝试和错误,当我尝试访问我认为应该是ID数组的变量时,会出现很多“未定义”的通知。到目前为止,我所做的只是装饰控制台,充其量只能给我一个可用的值,正如前面所描述的。
我希望有人能提供一个答案,除了解决这个特定的问题,这将相当于一个工作模板,用于获取和使用插件、主题和函数中的多个图像选择。
PPS:请别挂断电话,我想我几乎得到了一个答案,令人震惊
虽然我仍然很好奇,想看看真正的jQuery大师想出了什么……;)