WordPress 3.5媒体上传器多文件选择
我正在使用自定义设置页面构建WordPress主题。 某些设置要求用户上传/添加一组图像(超过1个)。 媒体上传器的默认行为是上传和/或选择单个图像并将其插入post中。
我已经按照这个关于利用媒体上传器的优秀指南 ,它建议我应该能够将多个设置为true,但它仍然只允许上传或选择单个文件。
这是我的代码:
加载所需的脚本,因为这是一个自定义设置页面:
if(function_exists( 'wp_enqueue_media' )){ wp_enqueue_media(); }else{ wp_enqueue_style('thickbox'); wp_enqueue_script('media-upload'); wp_enqueue_script('thickbox'); }
Javascript / jQuery用于显示媒体上传器并处理所选图像:
var tgm_media_frame; $('.upload-images').click(function() { if ( tgm_media_frame ) { tgm_media_frame.open(); return; } tgm_media_frame = wp.media.frames.tgm_media_frame = wp.media({ multiple: true, library: { type: 'image' }, }); tgm_media_frame.on('select', function(){ var selection = tgm_media_frame.state().get('selection'); selection.map( function( attachment ) { attachment = attachment.toJSON(); console.log(attachment); // Do something with attachment.id and/or attachment.url here }); }); tgm_media_frame.open(); });
有没有人能够让多个文件选择正常工作? 我错过了什么吗? 谢谢!
更新
我认为媒体上传者自提问和回答后已经更新。 我想在之前版本的wordpress multiple: 'add'
选项不存在,正如其他用户所建议的那样。 我不太确定。
你的代码一切都很好。 只是一小部分失踪。
selection.map( function( attachment ) { attachment = attachment.toJSON(); $("#something").after(""); });
attachment
转换为toJSON
您可以按照文档中的说明使用它。 您可以将图像URL放入发布到服务器的某些隐藏字段中,并将所选图像同时显示给用户。
只是一件小事我觉得很奇怪,我们需要按住ctrl + 点击选择图片。 它应该是复选框或其他东西。
更新
ctrl + click或shift + click选择多个图像是wordpress给出的方式。 仔细看看,打开
… \ WP-包括\ JS \媒体views.js
有一个定义的函数 – toggleSelectionHandler
。 它监听用户按下的组合键,并因此调用其他改变某些类的function并导致实际选择。
检查完firbug后,你可以看到两个类被应用 –
-
selected
-
details
details
类定义当前单击/活动选择的样式(带有蓝色粗边框), selected
实际上将图像标记为选中,并将其返回到选择数组中。
您可以从该文件本身更改该行为,也可以编写自己的函数来处理选择。 但第一种方法并不好。
PS :Wordpress实际上并没有使用上面的文件。 它选择相同文件的压缩版本。 因此,您可能希望加载未压缩的文件并进行播放。 您可以通过设置强制wordpress使用未压缩的js文件
define('SCRIPT_DEBUG', true);
在wp-config.php
。 这将跳过load-scripts.php
行为(通过合并它们将每个js文件的压缩版本加载到单个文件中)。
你只需要改变multiple:true
to multiple:'add'
。 这是默认的Create Gallery的工作方式。
如果有人想知道如何做到这一点,一种方法就是这样。 请注意,它将完全覆盖其实现范围内的默认行为。
wp.media.view.Attachment.prototype.toggleSelectionHandler = function( event ) { var method = 'between'; if ( event.shiftKey ) { method = 'between'; } else { method = 'toggle'; } this.toggleSelection({ method: method }); };
如果将multiple
设置为true
则允许您选择多个项目,例如在图库屏幕中。