web-dev-qa-db-fra.com

Comment puis-je recevoir l'id de l'image à l'aide de la boîte multimédia?

Le code ci-dessous me permet de récupérer la chaîne de l'image lorsque vous avez appuyé sur Insert to Post, mais quelle serait la méthode correcte pour récupérer l'ID de l'image? Donc, je peux récupérer toutes les informations via wp_get_attachment_image_src?

jQuery(document).ready(function() {

    var form_field;
    var upload_field_ID = '';

    jQuery( '.upload_image_button' ).click( function() {

        jQuery( 'html').addClass( 'Image' );

        upload_field_ID = jQuery(this).prev('input');
        form_field      = upload_field_ID.attr( 'name' );

        tb_show( '', 'media-upload.php?type=image&TB_iframe=true' );

        return false;

    });

    window.original_send_to_editor = window.send_to_editor;
    window.send_to_editor = function( html ) {

        if (form_field) {
            var image_url = jQuery( 'img', html ).attr( 'src' );
            upload_field_ID.val( image_url );
            tb_remove();
            jQuery( 'html').removeClass( 'Image' );
        } else {
            window.original_send_to_editor( html );
        }

    }

});
1
Mark

Vous pouvez également ajouter un filtre permettant d'ajouter l'ID en tant qu'attribut de données html5 au fragment HTML renvoyé par send_to_editor.

public function image_to_editor($html, $id, $caption, $title, $align, $url, $size, $alt){
        $dom = new DOMDocument();
        @$dom->loadHTML($html);

        $x = new DOMXPath($dom);        
        foreach($x->query("//img") as $node){   
            $node->setAttribute("data-id", $id);
        }

        if($dom->getElementsByTagName("a")->length == 0){
            $newHtml = $dom->saveXML($dom->getElementsByTagName('img')->item(0));
        }else{
            $newHtml = $dom->saveXML($dom->getElementsByTagName('a')->item(0));
        }

        return $newHtml;
}

add_filter('image_send_to_editor', array(&$this,'image_to_editor'), 1, 8);

Ensuite, dans votre gestionnaire javascript pour window.send_to_editor;

$('img',html).data('id'));

Vous pouvez faire la même chose pour les téléchargements de médias.

2
Dale Sattler
<input type="submit" name="send[79]" id="send[79]" class="button" value="Insert into Post">

Ci-dessus, un exemple de marquage de ce bouton. Notez que les champs name et id contiennent tous deux l'ID de l'image.

Donc, avec jQuery, vous pouvez lire cela.

$("...").click(function(){
    var buttonID = $(this).attr("name");
    buttonID = parseInt(buttonID.replace("send[", "").replace("]", ""));
});
1
Brady
jQuery(document).ready(function() {

    var form_field;
    var upload_field_ID = '';

    jQuery( '.upload_image_button' ).click( function() {

        jQuery( 'html').addClass( 'Image' );

        upload_field_ID = jQuery(this).prev('input');
        form_field      = upload_field_ID.attr( 'name' );

        tb_show( '', 'media-upload.php?type=image&amp;TB_iframe=true' );

        return false;

    });

    window.original_send_to_editor = window.send_to_editor;
    window.send_to_editor = function( html ) {

        if (form_field) {
            var class_string    = jQuery( 'img', html ).attr( 'class' );
            var image_url       = jQuery( 'img', html ).attr( 'src' );
            var classes         = class_string.split( /\s+/ );
            var image_id        = 0;

            for ( var i = 0; i < classes.length; i++ ) {
                var source = classes[i].match(/wp-image-([0-9]+)/);
                if ( source && source.length > 1 ) {
                    image_id = parseInt( source[1] );
                }
            }

            alert(image_id); // <---- THE IMAGE ID

            upload_field_ID.val( image_url );
            tb_remove();
            jQuery( 'html').removeClass( 'Image' );
        } else {
            window.original_send_to_editor( html );
        }

    }

});
1
Mark

regarde ça marche trouve pour moi. Le problème est que la fonction tb_show doit savoir à qui lance le retour. Donc, vous allez simplement chercher le post_id et le mettre dans l'URL, passez à tb_show, si c'est un nouveau, vous le passez comme s'il était nouveau.

donc je vous montre ma solution pour que vous puissiez mieux comprendre mais bon .. facile quand on sait comment

jQuery('#uploadPDF').click(
        function() 
        {

             window.send_to_editor = function(html){
                 fileurl = html.toString();
                 jQuery('#path_PDF').val(fileurl);                  
                 tb_remove(); 
            }
             var postId = location.href;
             var startPosition = postId.indexOf("post=");
             var url;

             if (startPosition != -1)
             {
                var postId = postId.substr(startPosition);
                var endPosition = postId.indexOf("&");
                var postId = postId.substring(5, endPosition);//5 POUR POST=

                url = 'media-upload.php?post_id=';

                url = url.concat(postId,'&amp;type=image&amp;TB_iframe=true');
             }
             else
             {
                url = 'media-upload.php?post-new.php?&amp;type=image&amp;TB_iframe=true';
             }


             tb_show( '', url);
             return false;
        }
    );
0
garrybob