Sanırım @janw bunu tamamen doğru yaptı, ama bir şeyi çalıştıramadım. Jan aşağıdakileri kullanarak medya kitaplığı düğmesini ekler:
do_action( 'media_buttons', 'default_featured_image' );
ve ardından aşağıdakileri kullanarak varsayılan eylemi önceden boşaltır:
jQuery('#default_featured_image_button').click(function () {...
Karşılaştığım sorun, bu şekilde bir medya düğmesi eklemenin, bağlantıya "default_featured_image_button" kimliği atamamasıdır. Aslında, eklenen bağlantıya herhangi bir kimlik eklemez. Bu yüzden onu işe almak için yaptım.
Bu satırı, giriş alanımdan hemen sonra meta kutusu geri arama işlevime ekledim:
<input id="upload_logo_button" type="button" value="Media Library Image" class="button-secondary" />
Daha sonra kullanarak benim işlev.php dosyasında, özel jquery dosyamı ve thickbox css dosyasını enqueued:
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' );
}
Son olarak image-set.js dosyam şunları içeriyordu:
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);
}
};
});
Değişkenleri kullandığımı, jQuery'yi çağıran bağlantıdan hemen önceki girdi alanının adını ve kimliğini saklamak için kullandığımı göreceksiniz. Bu şekilde bu kod aynı sayfada tekrar tekrar kullanılabilir. Tüm düğmelere bir sınıf atamanız veya jquery'nizdeki düğmeler için tek tek kimlikleri kullanmanız yeterlidir. Umarım Jan'ın cevabı bana yaptığı gibi birisine yardım eder.