WordPress 3.5媒体上传器多文件选择

Cor*_*ory 10 media wordpress jquery file-upload wordpress-theming

我正在使用自定义设置页面构建WordPress主题.某些设置要求用户上传/添加一组图像(超过1个).媒体上传器的默认行为是上传和/或选择单个图像并将其插入帖子中.

我遵循了这个关于利用媒体上传器的优秀指南,它表明我应该能够将多个设置为true,但它仍然只允许上传或选择单个文件.

这是我的代码:

加载所需的脚本,因为这是一个自定义设置页面:

if(function_exists( 'wp_enqueue_media' )){
    wp_enqueue_media();
}else{
    wp_enqueue_style('thickbox');
    wp_enqueue_script('media-upload');
    wp_enqueue_script('thickbox');
}
Run Code Online (Sandbox Code Playgroud)

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();

});
Run Code Online (Sandbox Code Playgroud)

有没有人能够让多个文件选择正常工作?我错过了什么吗?谢谢!

Dmi*_*nov 13

你只需要换multiple:truemultiple:'add'.这是默认创建库的工作方式.

  • 这只是正确的答案.`multiple:"toggle"`也可能是有趣的. (2认同)

Sac*_*tte 12

更新

我认为媒体上传者自提问和回答后已经更新.我猜在以前版本的wordpress multiple: 'add'选项不存在其他用户的建议.我不太确定.


你的代码一切都很好.只是一小部分失踪.

selection.map( function( attachment ) {
    attachment = attachment.toJSON();
    $("#something").after("<img src=" +attachment.url+">");
});
Run Code Online (Sandbox Code Playgroud)

经过attachment转换toJSON,你可以使用它作为文件中提到.您可以将图像URL放入发布到服务器的某些隐藏字段中,并将所选图像同时显示给用户.

只是一件小事我觉得很奇怪,我们需要按 ctrl+ click来选择图像.它应该是复选框或其他东西.


更新

ctrl+ clickshift+ click用于选择多个图像是wordpress给出的方式.仔细看看,打开

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

有一个功能定义 - toggleSelectionHandler.它监听用户按下的键组合,并因此调用其他改变某些类并导致实际选择的功能.

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

  1. selected
  2. details

detailsclass定义当前单击/活动选择的样式(带有蓝色粗边框),selected实际上将图像标记为选中并将其返回到选择数组中.

您可以从该文件本身更改该行为,也可以编写自己的函数来处理选择.第一种方法虽然不好.

PS:Wordpress实际上并没有使用上面的文件.它选择相同文件的压缩版本.因此,您可能希望加载未压缩的文件并进行播放.您可以通过设置强制wordpress使用未压缩的js文件

define('SCRIPT_DEBUG', true);
Run Code Online (Sandbox Code Playgroud)

wp-config.php.这将跳过load-scripts.php(通过合并它们将每个js文件的压缩版本加载到单个文件中)的行为.