Intereting Posts
404 Ошибка при попытке установить файл JS Как указать настройку темы для сохранения настроек в моей таблице опций? Ссылки открываются при прокрутке на сенсорных устройствах / мобильных устройствах Простой текстовый и слайдер изображений разрешить новым пользователям публиковать статью до того, как они запишут Не удается войти в wp-admin, поскольку перенаправление установлено на страницу, еще не опубликованную add_filter () в зависимости от условия поиска Меню администратора и администратора. Плагин разрешений current_time («timestamp»), похоже, отличается от реального текущего времени Как сделать таксономии ввода на странице Где скрипт-loader.php создает теги JS Отчет репозитория о некорректном статусе активной версии плагина Присвоить один признанный образ нескольким сообщениям? Большой размер изображения застрял на старом значении, даже для новых изображений показывать данные WordPress без заголовков

Как получить URL-адрес изображения из Media-Upload в сообщении?

Я создал новый MetaBox для всех стандартных сообщений в WordPress 3.1. Там я _meta_fotos[pic] поле ввода: текстовое поле с идентификатором _meta_fotos[pic] , которое должно быть URL-адресом изображения, созданным стандартным медиа-загрузчиком. Я хочу использовать стандартный медиа-загрузчик из стандартного почтового окна. Поэтому я создал следующий код JavaScript.

 jQuery(document).ready(function() { jQuery('#_meta_fotos\\[pic\\]').focusin(function() { formfield = jQuery('#_meta_fotos\\[pic\\]').attr('name'); tb_show('', 'media-upload.php?type=image&TB_iframe=true'); return false; }); window.send_to_editor = function(html) { imgURL = jQuery('img',html).attr('src'); jQuery('#_meta_fotos\\[pic\\]').val(imgURL); tb_remove(); } }); 

На первом этапе все работает нормально. Но я не получаю настоящий URL изображения. Все, что я верну, – это URL-адрес правильного пути uploads с именем файла blank.gif .

Я проверил, вызван ли focusin : все в порядке.

Я думаю, что проблема ist в функции send_to_editor . Он возвращает в html код из основной страницы, а не из всплывающего окна media-uploader / thickbox.

Может ли кто-нибудь помочь мне, чтобы найти ошибку? Любая помощь приветствуется!

Я ненавижу это, чтобы ответить на мой собственный вопрос. Но после нескольких часов поиска и попыток я нашел решение, которое работает. Я предлагаю это решение, потому что это не может быть интересно для других, имеющих ту же проблему. И для обсуждения, если есть лучший способ избавиться от проблемы. Возможно, он не очень изящный, но он работает 😉

Пик должен изменить click -эвенд для кнопки «Вставить в сообщение» в ThickBox.

edit Поскольку код работал только для ОДНОГО изображения в библиотеке, я использовал cto chnge строку в функции click . Теперь он работает с более чем одним изображением

 jQuery(document).ready(function() { //change click event for insert into post (function(){ var tb_show_temp = window.tb_show; window.tb_show = function() { tb_show_temp.apply(null, arguments); var iframe = jQuery('#TB_iframeContent'); iframe.load(function() { var iframeDoc = iframe[0].contentWindow.document; var iframeJQuery = iframe[0].contentWindow.jQuery; var buttonContainer = iframeJQuery('td.savesend'); if (buttonContainer) { var btnSubmit = jQuery('input:submit', buttonContainer); iframeJQuery(btnSubmit).click(function(){ fldID = jQuery(this).attr('id').replace('send', '').replace('[', '').replace(']', ''); var imgurl = iframeJQuery('input[name="attachments\\['+fldID+'\\]\\[url\\]"]').val(); jQuery('#_meta_fotos\\[pic\\]').val(imgurl); jQuery('#picPreview').attr('src', imgurl); tb_remove(); }); } }); } })() //open uploader jQuery('#_meta_fotos\\[pic\\]').focusin(function() { formfield = jQuery('#_meta_fotos\\[pic\\]').attr('name'); tb_show('Use pictures', 'media-upload.php?type=image&tab=library&TB_iframe=1'); return false; }); }); 

Я сделал что-то подобное для страницы настроек тем, с которой я помогал кому-то, она немного отличалась от того, что у вас есть, но я собираюсь опубликовать код, чтобы вы могли сравнить его.

JQuery:
Буквально только применимые части, взятые из рабочего сценария, который я использовал.

 jQuery(document).ready( function($) { $('img.font').click(function() { form_field = $(this).next().next('input'); tb_show('', 'media-upload.php?tab=type&from=t31os&post_id=0&TB_iframe=true'); return false; }) .hover(function() { $(this).css({'cursor':'pointer'}); }); window.send_to_editor = function(html) { media_url = $(html).attr('href'); tb_remove(); $(form_field).val(media_url); } }); 

В моем случае у меня было изображение, которое запустило окно загрузки и передало значение, когда пользователь нажал кнопку « Вставить в настройки» (см. Ниже).

Вы заметите, что во-первых, есть идентификатор сообщения, переданный в запросе массовой загрузки, вам нужно это, чтобы увидеть кнопку « Вставить в сообщение» в окне. Во-вторых, есть дополнительный параметр запроса from=t31os , это позволяет мне выборочно изменять текст Insert into Post , например.

 add_filter( 'gettext', 'change_insert_into_post', null, 2 ); function change_insert_into_post( $translation, $original ) { if( !isset( $_REQUEST['from'] ) ) return $translation; if( $_REQUEST['from'] == 't31os' && $original == 'Insert into Post' ) return 'Insert into settings field'; return $translation; } 

Надеюсь, это поможет.

Последующие комментарии:
Вот некоторые изображения предоставленного кода, работающие на моей странице параметров темы (стрелка – мое изображение, чтобы вызвать загрузчик).

Поле
Поле.

Окно загрузчика
Окно загрузчика.

Результат
Результат.

Вы заметите, что я не беспокоился с фильтром gettext, и это просто потому, что это не является неотъемлемой частью функциональности кода (это личное прикосновение и здесь не имеет значения).

Вы правильно указали необходимые сценарии? Именование media-upload и thickbox вместе с таблицей толстых колод.