web-dev-qa-db-fra.com

Trop d'erreurs de récursion lors du choix d'une image dans une bibliothèque d'images pour deux méta-boîtes différentes dans une publication

Il doit y avoir une solution pour cela. J'utilise cette solution pour choisir des images de la médiathèque. http://www.webmaster-source.com/2010/01/08/using-the-wordpress-uploader-in-your-plugin-or-theme/

LE PROBLÈME:

J'utilise deux méta-boîtes pour les types de produits personnalisés.

La première consiste en deux métafields permettant d’ajouter deux images de produit d’ajout. La seconde permet de créer une galerie simple pour ce produit.

Chacun d'entre eux a ses propres trucs tb_show et window.send_to_editor.

Le fait est que tout fonctionne bien lorsqu'il n'y a qu'un seul métabox enregistré - le premier ou le second. S'il y en a deux, le dernier enregistré via add_meta_box apporte l'erreur dans firebug “ trop de récursion” en appuyant sur le bouton “Insérer dans le post”.

Comment résoudre ceci?

Ceci est très critique pour la mission, d'avoir deux métaboxes en post, d'ajouter différents types d'images? En outre, l'insertion par défaut de l'image à publier devrait fonctionner.

Peut-être que quelqu'un a une classe pour cela parce que je vois, le problème est de savoir s'il existe deux fonctions original_send_to_editor enregistrées dans une page de publication.

3
jam

Je pense que vous rencontrez un problème que les gens ont mentionné dans les commentaires de cette histoire. Quelqu'un d'autre a posté à ce sujet ici:

http://www.theenglishguy.co.uk/2010/01/24/multiple-media-uploads-in-wordpress-functions-php/

Fondamentalement, le code JavaScript de ce site devrait être modifié pour ressembler davantage à ceci:

jQuery(document).ready(function() {

  var formlabel = 0;
  var old_send_to_editor = window.send_to_editor;
  var old_tb_remove = window.tb_remove;

  jQuery('.upload_image_button').click(function(){
    formlabel = jQuery(this).parent();
    tb_show('', 'media-upload.php?type=image&TB_iframe=true');
    return false;
  });

  window.tb_remove = function() {
    formlabel = 0;
    old_tb_remove();
  }

  window.send_to_editor = function(html) {
    if(formlabel){
      imgurl = jQuery('img',html).attr('src');
      formlabel.find('input[type="text"]').value(imgurl);
      tb_remove();
    } else {
      old_send_to_editor();
    }
  }
});

À partir de là, tout ce que vous avez à faire est de vous assurer que tous les boutons ont la classe 'upload_image_button' et que le bouton est un frère de la zone de texte correspondante et qu'aucun autre formulaire de téléchargement ne figure dans le même élément parent.

1
John P Bloch