具有参数支持的自定义wp.media [英] Custom wp.media with arguments support

查看:24
本文介绍了具有参数支持的自定义wp.media的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何设置[添加媒体]按钮,方法如下:

How to setup a [add media] button, with:

  1. 适当的wordpress [媒体]用户界面

  1. proper wordpress [media] UI

在弹出式窗口右侧具有大小和对齐UI

has size and alignments UI in popup right hand side

可以自定义弹出标题和按钮

can custom popup title and button

大小和对齐方式参数可以发回使用

size and alignments arguments can send back to be use

推荐答案

只需尝试介绍大多数解决方案:

Just try to cover most solutions:

  1. 使用 tb_show(","media-upload.php?type = image& amp; TB_iframe = true"); window.send_to_editor

  • 问题:没有标准的wp.media用户界面

  • problem: has no standard wp.media UI

在js代码中:

jQuery("#my_button").click(function() {
    tb_show("", "media-upload.php?type=image&TB_iframe=true");
    return false;
});
window.send_to_editor = function(html) {
    console.log(html);
    tb_remove();
}

使用 wp.media({frame:'post'})

  • 问题:无法自定义UI元素,例如:标题,按钮

  • problem: cannot custom UI elements, such as: title, button

在js代码中:

function clearField(){
    #remove file nodes
    #...
}

var frame = wp.media({frame: 'post'});

frame.on('close',function() {
    var selection = frame.state().get('selection');
    if(!selection.length){
        clearField();
    }
});

frame.on( 'select',function() {
    var state = frame.state();
    var selection = state.get('selection');
    if ( ! selection ) return;

    clearField();

    selection.each(function(attachment) {
        console.log(attachment.attributes);
    });
});

frame.open();

wp.media.editor wp.media.editor.open(editor_id)

  • 问题:无法自定义UI元素,例如:标题,按钮

  • problem: cannot custom UI elements, such as: title, button

in js code:https://wordpress.stackexchange.com/questions/75808/using-wordpress-3-5-media-uploader-in-meta-box#75823

in js code: https://wordpress.stackexchange.com/questions/75808/using-wordpress-3-5-media-uploader-in-meta-box#75823

使用 wp.media 重写 wp.media.controller.Library ,并在 select 中检索附件代码>

use wp.media with rewrite wp.media.controller.Library and retrieve attachment in select

  • 问题:很复杂...,但是一旦您理解它,一切都说得通,这是我的最终解决方案

  • problem: complicated ..., but once you understand it, it all make sense, and it is my finial solution

在js代码中:

/**
 * Please attach all the code below to a button click event
 **/

//create a new Library, base on defaults
//you can put your attributes in
var insertImage = wp.media.controller.Library.extend({
    defaults :  _.defaults({
            id:        'insert-image',
            title:      'Insert Image Url',
            allowLocalEdits: true,
            displaySettings: true,
            displayUserSettings: true,
            multiple : true,
            type : 'image'//audio, video, application/pdf, ... etc
      }, wp.media.controller.Library.prototype.defaults )
});

//Setup media frame
var frame = wp.media({
    button : { text : 'Select' },
    state : 'insert-image',
    states : [
        new insertImage()
    ]
});

//on close, if there is no select files, remove all the files already selected in your main frame
frame.on('close',function() {
    var selection = frame.state('insert-image').get('selection');
    if(!selection.length){
        #remove file nodes
        #such as: jq("#my_file_group_field").children('div.image_group_row').remove();
        #...
    }
});


frame.on( 'select',function() {
    var state = frame.state('insert-image');
    var selection = state.get('selection');
    var imageArray = [];

    if ( ! selection ) return;

    #remove file nodes
    #such as: jq("#my_file_group_field").children('div.image_group_row').remove();
    #...

    //to get right side attachment UI info, such as: size and alignments
    //org code from /wp-includes/js/media-editor.js, arround `line 603 -- send: { ... attachment: function( props, attachment ) { ... `
    selection.each(function(attachment) {
        var display = state.display( attachment ).toJSON();
        var obj_attachment = attachment.toJSON()
        var caption = obj_attachment.caption, options, html;

        // If captions are disabled, clear the caption.
        if ( ! wp.media.view.settings.captions )
            delete obj_attachment.caption;

        display = wp.media.string.props( display, obj_attachment );

        options = {
            id:        obj_attachment.id,
            post_content: obj_attachment.description,
            post_excerpt: caption
        };

        if ( display.linkUrl )
            options.url = display.linkUrl;

        if ( 'image' === obj_attachment.type ) {
            html = wp.media.string.image( display );
            _.each({
            align: 'align',
            size:  'image-size',
            alt:   'image_alt'
            }, function( option, prop ) {
            if ( display[ prop ] )
                options[ option ] = display[ prop ];
            });
        } else if ( 'video' === obj_attachment.type ) {
            html = wp.media.string.video( display, obj_attachment );
        } else if ( 'audio' === obj_attachment.type ) {
            html = wp.media.string.audio( display, obj_attachment );
        } else {
            html = wp.media.string.link( display );
            options.post_title = display.title;
        }

        //attach info to attachment.attributes object
        attachment.attributes['nonce'] = wp.media.view.settings.nonce.sendToEditor;
        attachment.attributes['attachment'] = options;
        attachment.attributes['html'] = html;
        attachment.attributes['post_id'] = wp.media.view.settings.post.id;

        //do what ever you like to use it
        console.log(attachment.attributes);
        console.log(attachment.attributes['attachment']);
        console.log(attachment.attributes['html']);
    });
});

//reset selection in popup, when open the popup
frame.on('open',function() {
    var selection = frame.state('insert-image').get('selection');

    //remove all the selection first
    selection.each(function(image) {
        var attachment = wp.media.attachment( image.attributes.id );
        attachment.fetch();
        selection.remove( attachment ? [ attachment ] : [] );
    });

    //add back current selection, in here let us assume you attach all the [id] to <div id="my_file_group_field">...<input type="hidden" id="file_1" .../>...<input type="hidden" id="file_2" .../>
    jq("#my_file_group_field").find('input[type="hidden"]').each(function(){
         var input_id = jq(this);
        if( input_id.val() ){
            attachment = wp.media.attachment( input_id.val() );
            attachment.fetch();
            selection.add( attachment ? [ attachment ] : [] );
        }
    });
});

//now open the popup
frame.open();

这篇关于具有参数支持的自定义wp.media的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆