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 );
}
}
});
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.
<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("]", ""));
});
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 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 );
}
}
});
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,'&type=image&TB_iframe=true');
}
else
{
url = 'media-upload.php?post-new.php?&type=image&TB_iframe=true';
}
tb_show( '', url);
return false;
}
);