@janw가 이것을 완벽하게 가지고 있다고 생각하지만 한 가지 일을 할 수 없었습니다. Jan은 다음을 사용하여 미디어 라이브러리 버튼을 삽입합니다.
do_action( 'media_buttons', 'default_featured_image' );
다음을 사용하여 기본 동작을 선점합니다.
jQuery('#default_featured_image_button').click(function () {...
내가 겪은 문제는 이러한 방식으로 미디어 버튼을 삽입해도 링크에 "default_featured_image_button"의 ID가 할당되지 않는다는 것입니다. 실제로 삽입 된 링크에 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);
}
};
});
jQuery를 호출하는 링크 바로 앞에있는 입력 필드의 이름과 ID를 저장하기 위해 변수를 사용했습니다. 이런 식으로이 코드는 같은 페이지에서 반복적으로 사용될 수 있습니다. 내가 한 것처럼 클래스를 모든 버튼에 할당하거나 jquery의 버튼에 개별 ID를 사용해야합니다. Jan의 답변이 나에게 도움이 되었기를 바랍니다.