Tôi nghĩ rằng @janw đã hoàn toàn đúng, nhưng tôi không thể làm cho một thứ hoạt động được. Jan chèn nút thư viện phương tiện bằng cách sử dụng:
do_action( 'media_buttons', 'default_featured_image' );
và sau đó thực hiện trước hành động mặc định bằng cách sử dụng:
jQuery('#default_featured_image_button').click(function () {...
Vấn đề mà tôi gặp phải là việc chèn một nút phương tiện theo kiểu này không gán id "default_featured_image_button" cho liên kết. Trong thực tế, nó không thêm bất kỳ id nào vào liên kết được chèn. Vì vậy, đây là những gì tôi đã làm để làm cho nó hoạt động.
Tôi đã thêm dòng này vào chức năng gọi lại hộp meta ngay sau trường nhập liệu của mình:
<input id="upload_logo_button" type="button" value="Media Library Image" class="button-secondary" />
Sau đó, tôi đã xử lý tệp jquery tùy chỉnh của mình và tệp css hộp dày, cũng trong tệp tin.php của tôi, bằng cách sử dụng:
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' );
}
Cuối cùng, tệp image-set.js của tôi bao gồm:
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);
}
};
});
Bạn sẽ lưu ý rằng tôi đã sử dụng các biến để lưu trữ tên và id của trường đầu vào ngay trước liên kết gọi jQuery. Theo cách đó, mã này có thể được sử dụng nhiều lần trên cùng một trang. Bạn sẽ chỉ cần gán một lớp cho tất cả các nút hoặc sử dụng id riêng cho các nút trong câu hỏi của bạn như tôi đã làm. Tôi hy vọng điều này sẽ giúp ai đó như câu trả lời của Jan đã làm cho tôi.