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 + clickshift + click选择多个图像是wordpress给出的方式。 仔细看看,打开

… \ WP-包括\ JS \媒体views.js

有一个定义的函数 – toggleSelectionHandler 。 它监听用户按下的组合键,并因此调用其他改变某些类的function并导致实际选择。

检查完firbug后,你可以看到两个类被应用 –

  1. selected
  2. 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则允许您选择多个项目,例如在图库屏幕中。