我认为@janw完全正确,但有一件事我做不到。Jan使用以下方式插入媒体库按钮:
do_action( \'media_buttons\', \'default_featured_image\' );
然后使用以下命令抢占默认操作:
jQuery(\'#default_featured_image_button\').click(function () {...
我遇到的问题是,以这种方式插入媒体按钮不会将id“default\\u featured\\u image\\u button”分配给链接。事实上,它不会在插入的链接上添加任何id。所以这就是我所做的,让它发挥作用。
我在输入字段之后添加了此行到meta box回调函数:
<input id="upload_logo_button" type="button" value="Media Library Image" class="button-secondary" />
然后,我将我的自定义jquery文件和thickbox css文件(也在我的函数中)放入队列。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\' );
}
最后,我的图像集。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。我希望这能像简的回答一样帮助别人。