Voici ce que je fais:
J'ai ajouté le téléchargement de média wordpress avec le popup iframe lorsqu'un bouton ou un lien a été cliqué. Et avec un clic d'insertion dans le post, l'URL de l'image placée sur une zone de texte.
La fonction send_to_editor()
gère l'insertion d'images dans l'éditeur
window.send_to_editor = function(html) {
var imgurl = jQuery('img',html).attr('src');
current_item.siblings('.upload_image').val(imgurl);
current_item.parent().prepend('<div><img width="300" src="'+imgurl+'" alt="banner image" /></div>');
tb_remove();
}
Donc, vous voyez que le send_to_editor par défaut est édité et modifié. Maintenant, quand j'essaie de télécharger l'image à partir de WordPress Editor image téléchargée et cliquez sur Insérer une image pour poster. Ça ne marche pas.
Question: Comment faire pour que plusieurs instances de send_to_editor()
ou de Parhaps créent et raccrochent une nouvelle fonction js à chaque instant de l'utilitaire de transfert d'images afin d'éviter tout conflit?
Solution:
var original_send_to_editor = window.send_to_editor;
window.send_to_editor = function(html) {
var imgurl = jQuery('img',html).attr('src');
current_item.siblings('.upload_image').val(imgurl);
//current_item.siblings('#logo').remove();
current_item.siblings('.image-preview').html('<img src="'+imgurl+'" >');
tb_remove();
window.send_to_editor = original_send_to_editor;
}
écrasez uniquement la fonction send_to_editor lorsque votre lien ou bouton est cliqué, mais stockez l'ancienne fonction pour la restaurer; essayez ceci avec un événement de clic:
//store old send to editor function
window.restore_send_to_editor = window.send_to_editor;
//overwrite send to editor function
window.send_to_editor = function(html) {
var imgurl = jQuery('img',html).attr('src');
current_item.siblings('.upload_image').val(imgurl);
current_item.parent().prepend('<div><img width="300" src="'+imgurl+'" alt="banner image" /></div>');
tb_remove();
//restore old send to editor function
window.send_to_editor = window.restore_send_to_editor;
}
Mon approche était similaire à celle de @ Bainternet. Les circonstances étaient cependant légèrement différentes. Pour résumer, plusieurs boutons ouvraient la fenêtre Ajouter un média et cédaient la fonctionnalité par défaut de TinyMCE.
Créez un objet qui stocke 2 éléments:
var $state_manager = {
active_item : 'null',
default_send_to_editor: window.send_to_editor
}
Les boutons personnalisés vont changer la valeur de active_item quand on clique dessus:
$('.button').click(function(){
$state_manager.active_item = $(this).attr('data-unqiue-id');
// open the window and do whatever else you need
})
Vérifiez l'état de active_item et effectuez un travail personnalisé ou appelez la fonction par défaut stockée et définissez active_item sur null une fois l'opération terminée.
window.send_to_editor = function( html ) {
if($state_manager.active_item === 'null') {
//call the default
$state_manager.default_send_to_editor( html );
}else{
//do some custom stuff here being sure to reset
// active_item to 'null' once completed
$state_manager.active_item = 'null';
}
}
Un avantage du stockage de l'élément active_item est de cibler différents champs d'entrée et de les renseigner avec l'URL de l'élément téléchargé.
Je viens de mettre la fonction de window.send_to_editor dans la fonction .click()
$('#upload_button_1').click(function() {
tb_show('','media-upload.php?type=image&TB_iframe=true');
window.send_to_editor = function(html) {
imgurl = jQuery('img',html).attr('src');
// do some rock
tb_remove();
}
return false;
});
J'ai créé un plugin et il est en conflit avec Add Media on Editor. Alors je change de suite:
$('#upload_button').click(function() {
tb_show('Upload a logo', 'media-upload.php?type=image&TB_iframe=true&post_id=0', false);
//store old send to editor function
window.restore_send_to_editor = window.send_to_editor;
// Display the Image link in TEXT Field
window.send_to_editor = function(html) {
var image_url = $('img',html).attr('src');
$('.logofield').val(image_url);
tb_remove();
window.send_to_editor = window.restore_send_to_editor;
}
return false;
});