Ich denke, @janw hat diesen Punkt völlig richtig verstanden, aber ich konnte nichts bewirken. Jan fügt die Schaltfläche für die Medienbibliothek ein:
do_action( 'media_buttons', 'default_featured_image' );
und bereitet dann die Standardaktion vor mit:
jQuery('#default_featured_image_button').click(function () {...
Das Problem, auf das ich gestoßen bin, ist, dass das Einfügen einer Medienschaltfläche auf diese Weise dem Link nicht die ID "default_featured_image_button" zuweist. Tatsächlich wird dem eingefügten Link keine ID hinzugefügt. Das habe ich also getan, um es zum Laufen zu bringen.
Ich habe diese Zeile direkt nach meinem Eingabefeld zu meiner Meta-Box-Rückruffunktion hinzugefügt:
<input id="upload_logo_button" type="button" value="Media Library Image" class="button-secondary" />
Ich habe dann meine benutzerdefinierte JQuery-Datei und die Thickbox-CSS-Datei in die Warteschlange gestellt, ebenfalls in meiner Datei 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' );
}
Schließlich enthielt meine Datei image-set.js Folgendes:
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);
}
};
});
Sie werden feststellen, dass ich Variablen verwendet habe, um den Namen und die ID des Eingabefelds zu speichern, das sich direkt vor dem Link befindet, der die jQuery aufruft. Auf diese Weise kann dieser Code wiederholt auf derselben Seite verwendet werden. Sie müssten lediglich allen Schaltflächen eine Klasse zuweisen oder einzelne IDs für die Schaltflächen in Ihrer Abfrage verwenden, wie ich es getan habe. Ich hoffe, das hilft jemandem, wie es Jan mir geantwortet hat.