Я думаю, що @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 та файл css thickbox, також у своєму файлі function.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, як і я. Я сподіваюся, що це допомагає комусь, як відповіла мені відповідь Яна.