我认为@janw完全正确了这一点,但是我无法使一件事起作用。Jan使用以下命令插入媒体库按钮:
do_action( 'media_buttons', 'default_featured_image' );
然后使用以下方法抢占默认操作:
jQuery('#default_featured_image_button').click(function () {...
我遇到的问题是,以这种方式插入媒体按钮并没有为链接分配ID“ default_featured_image_button”。实际上,它不会在插入的链接上添加任何ID。因此,这就是我为使其正常工作所做的。
我在输入字段之后将以下行添加到元框回调函数中:
<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);
}
};
});
您会注意到,我使用变量来存储输入字段的名称和ID,该字段位于调用jQuery的链接之前。这样,该代码可以在同一页面上重复使用。您只需要像我一样为jquery中的按钮分配一个类或为所有按钮使用单独的id。我希望这对某人有帮助,因为Jan的回答对我有所帮助。