Используете Wordpress 3.5 Media Uploader в метабоксе?


16

Возможно ли это сделать?

Мне нравится, как работает новый загрузчик. Я предполагаю, что это связано с вызовом jQuery, как и другой способ.

РЕДАКТИРОВАТЬ

Это код, который я сейчас использую

jQuery(document).ready(function($) {
$('.custom_upload_image_button').click(function() {
    imageField = $(this).prev('input');
    tb_show('', 'media-upload.php?type=image&TB_iframe=true');
});
window.send_to_editor = function(html) {
    imgurl = $(html).attr('href');
    $(imageField).val(imgurl);
    tb_remove();
};
$('.clear_field').click(function() {
    var defaultImage = jQuery(this).parent().siblings('.custom_default_image').text();
    jQuery(this).parent().siblings('.custom_upload_image').val('');
    return false;
});
});

Ответы:


9

Для начала, основные функции и переопределения, насколько я знаю в настоящее время. Возможно, есть лучшие решения, но у меня было только два дня с 3.5 еще:

// open modal - bind this to your button
    if ( typeof wp !== 'undefined' && wp.media && wp.media.editor )
        wp.media.editor.open( ##unique_id_here## );

// backup of original send function
   original_send = wp.media.editor.send.attachment;

// new send function
   wp.media.editor.send.attachment = function( a, b) {
       console.log(b); // b has all informations about the attachment
       // or whatever you want to do with the data at this point
       // original function makes an ajax call to retrieve the image html tag and does a little more
    };

// wp.media.send.to.editor will automatically trigger window.send_to_editor for backwards compatibility

// backup original window.send_to_editor
   window.original_send_to_editor = window.send_to_editor; 

// override window.send_to_editor
   window.send_to_editor = function(html) {
       // html argument might not be useful in this case
       // use the data from var b (attachment) here to make your own ajax call or use data from b and send it back to your defined input fields etc.
   }

Это не полный рабочий ответ. Вы должны сами определять и отслеживать поля ввода и т. Д. Это просто должно помочь вам начать. Если у вас есть более конкретные вопросы, просто спросите.

И убедитесь, что переназначили исходные функции, когда ваш скрипт будет выполнен.


Вытащил из комментариев:

Как я могу прослушать закрытое событие лайтбокса?

// add listener: 
wp.media.view.Modal.prototype.on('close', function(){ console.log('triggered close'); }

Благодарность! Я не могу заставить его работать, хотя. Я вставил то, что я использовал для старого загрузчика медиа, если это поможет.
супоросо

Ipstenu и группа поддержки составили сводный список проблем ( wordpress.org/support/topic/… ), о которых сообщается для WordPress 3.5. Этот поток не предназначен для получения обратной связи с пользователем, но является кураторским потоком, который быстро выделяет известные проблемы, о которых сообщают, а также инструкции о том, как решить проблему.
Тара

Как я могу прослушать закрытое событие лайтбокса? Мне нужно вызвать пользовательскую функцию, если кто-то не выбирает новое изображение
Xaver

3
// добавить слушатель: wp.media.view.Modal.prototype.on ('close', function () {console.log ('triggered close');}
ungestaltbar

6

Вот небольшое руководство о том, как использовать загрузчик мультимедиа WP 3.5 в настройках темы. Это то, что я придумал, и это прекрасно работает для меня. Дайте мне знать, если вы найдете лучшее решение.

Вот как я реализовал код в опциях моей темы:

jQuery(document).ready(function($){
  $('.stag-metabox-table .button').click(function(e){
  var send_attachment_bkp = wp.media.editor.send.attachment;
  var button = $(this);
  var id = button.attr('id').replace('_button', '');
  wp.media.editor.send.attachment = function(props, attachment){
    $("#"+id).val(attachment.url);
    wp.media.editor.send.attachment = send_attachment_bkp;
  }

  wp.media.editor.open(button);
  return false;

  });
});

Обновить

Этот код работает только на странице редактирования поста. Чтобы это работало на странице настроек темы, нужно добавитьwp_enqueue_media();


Что, если обеспечить только один выбор изображения, а не несколько?
Мехул Каклотар

3

Я делаю почти то же самое, что он еще не готов, но он работает:

в php:

<input id="default_featured_image" type="text" size="100" name="default_featured_image" value="<?php echo esc_attr( $value ); ?>" />
<?php
do_action( 'media_buttons', 'default_featured_image' ); // second argument is the same as the `<input>` id

Javascript:

jQuery('#default_featured_image_button').click(function () {
    var formfield = jQuery('#default_featured_image').attr('name');
    tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true');
    return false;
});

window.send_to_editor = function (html) {
    var imgurl = jQuery('img', html).attr('src');
    console.log(jQuery('img', html));
    console.log(html);
    console.log(imgurl);
    // set the url as the value
    jQuery('#default_featured_image').val(imgurl);
    tb_remove();
};

Это позволит вам загрузить и отправить ссылку на изображение (любого размера) на <input>элемент.
Я пытаюсь сделать это как настройку, и это работает, только сейчас мне нужен только надежный способ отправить идентификатор вложения на<input>


Большое спасибо оооооооооооооооооооооооооооооооооцениваются много !!!! Это, наконец, сработало после 2 дней отчаянной охоты за решением !!! Благодаря тонну!!!
Девнер

вы могли бы взглянуть на исходный код этого в моем плагине: wordpress.org/extend/plugins/default-featured-image
января 13

3

Я думаю, что @janw понял это правильно, но я не смог заставить что-то работать. Ян вставляет кнопку библиотеки мультимедиа, используя:

do_action( 'media_buttons', 'default_featured_image' );

а затем упреждает действие по умолчанию, используя:

jQuery('#default_featured_image_button').click(function () {...

Проблема, с которой я столкнулся, заключается в том, что при вставке медиа-кнопки таким способом не назначается идентификатор ссылки «default_featured_image_button». Фактически это не добавляет никакого идентификатора к вставленной ссылке. Вот что я сделал, чтобы заставить его работать.

Я добавил эту строку в функцию обратного вызова мета-бокса сразу после поля ввода:

<input id="upload_logo_button" type="button" value="Media Library Image" class="button-secondary" />

Затем я поставил в очередь свой пользовательский файл jquery и файл Thickbox CSS, также в моем файле functions.php, используя:

add_action('admin_enqueue_scripts', 'jhsir_load_image_set_js');

function jhsir_load_image_set_js() {
    wp_enqueue_script( 'jhsir_image_set_script', get_stylesheet_directory_uri() . '/js/image-set.js', array('jquery','media-upload','thickbox') );
    wp_enqueue_style( 'thickbox' );
}

Наконец, мой файл image-set.js содержал следующее:

jQuery(document).ready(function($) {

    var formfield = null;

    $('#upload_logo_button, #upload_background_button').click(function() {

        $('html').addClass('Image');

        formfield = $(this).prev('input').attr('name');  
        formfield_id = $(this).prev('input').attr('id'); 

        tb_show( '', 'media-upload.php?type=image&TB_iframe=true' );
        return false;
    });

    // user inserts file into post.
    // only run custom if user started process using the above process
    // window.send_to_editor(html) is how wp normally handles the received data

    window.original_send_to_editor = window.send_to_editor;
    window.send_to_editor = function( html ) {
        var fileurl;

        if(formfield != null) {
            fileurl = $( 'img', html).attr('src');

            $( "#" + formfield_id ).val(fileurl);

            tb_remove();

            $('html').removeClass('Image');
            formfield = null;
        } else {
            window.original_send_to_editor(html);
        }
    };
});

Вы заметите, что я использовал переменные для хранения имени и идентификатора поля ввода, которое находится непосредственно перед ссылкой, которая вызывает jQuery. Таким образом, этот код можно многократно использовать на одной и той же странице. Вам просто нужно назначить класс всем кнопкам или использовать отдельные идентификаторы для кнопок в вашем jquery, как я сделал. Я надеюсь, что это поможет кому-то, так как ответ Яна помог мне.


0

Я знаю, что это старый пост, но я просто хочу поделиться своими выводами:

Чтобы открыть редактор мультимедиа, мы вызываем эту функцию

wp.media.editor.open();

Редактор мультимедиа в основном проверяет наличие функции tinyMCE editor ( window.tinymce), а затем Quicktags ( window.QTags) для передачи содержимого.

Для моего подхода к получению контента я назначил window.QTagsпользовательский объект, у которого есть insertContent()метод:

var newObject = {
  insertContent: function(html){
    // to extract the image source
    $(html).find('img').attr('src');
  }
}

// assign the newObject to window.QTags property
window.QTags = newObject;

Ссылка: phpxref

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.