Je pense que @janw a tout à fait raison, mais je n'ai pas réussi à faire fonctionner une chose. Jan insère le bouton de la bibliothèque multimédia en utilisant:
do_action( 'media_buttons', 'default_featured_image' );
puis préempte l'action par défaut en utilisant:
jQuery('#default_featured_image_button').click(function () {...
Le problème que j'ai rencontré est que l'insertion d'un bouton multimédia de cette manière n'assigne pas un identifiant "default_featured_image_button" au lien. En fait, il n'ajoute aucun identifiant sur le lien inséré. Voici donc ce que j'ai fait pour le faire fonctionner.
J'ai ajouté cette ligne à ma fonction de rappel de meta box juste après mon champ de saisie:
<input id="upload_logo_button" type="button" value="Media Library Image" class="button-secondary" />
J'ai ensuite mis en file d'attente mon fichier jquery personnalisé et le fichier css thickbox, également dans mon fichier functions.php, en utilisant:
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' );
}
Enfin, mon fichier image-set.js comprenait les éléments suivants:
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);
}
};
});
Vous remarquerez que j'ai utilisé des variables pour stocker le nom et l'id du champ de saisie juste avant le lien qui appelle le jQuery. De cette façon, ce code peut être utilisé à plusieurs reprises sur la même page. Vous auriez juste besoin d'assigner une classe à tous les boutons ou d'utiliser des identifiants individuels pour les boutons de votre jquery comme je l'ai fait. J'espère que cela aide quelqu'un comme la réponse de Jan m'a aidé.