ฉันคิดว่า @janw ทำให้สิ่งนี้ถูกต้องสมบูรณ์ แต่ฉันไม่สามารถทำงานได้ ม.ค. แทรกปุ่มไลบรารีสื่อโดยใช้:
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);
}
};
});
คุณจะทราบว่าฉันใช้ตัวแปรในการจัดเก็บชื่อและรหัสของช่องใส่ที่อยู่ก่อนลิงค์ที่เรียก jQuery ด้วยวิธีนี้สามารถใช้รหัสนี้ซ้ำ ๆ ในหน้าเดียวกัน คุณเพียงแค่ต้องกำหนดคลาสให้กับปุ่มทั้งหมดหรือใช้รหัสบุคคลสำหรับปุ่มใน jQuery ของคุณเช่นเดียวกับฉัน ฉันหวังว่านี่จะช่วยให้ใครบางคนเป็นคำตอบของแจน