J'essaie d'implémenter un téléchargement multiple image sur un formulaire frontal à l'aide de Wordpress Media Uploader intégré.
J'ai réussi à envoyer une seule image, mais je ne peux pas savoir comment avoir des champs multiples images. Je suis très nouveau sur jQuery, malheureusement. Chaque fois que j'utilise plusieurs champs <input>
, le bouton Upload Image
ne fonctionne que sur le premier. L'aide est grandement appréciée.
C’est mon code de travail pour l’envoi d’une seule image, que j’essaie d’ajuster pour autoriser plusieurs envois <input>
de champs/images.
formulaire frontal html
<label for="upload_image">
<input id="upload_image" type="text" size="36" name="ad_image" value="http://" />
<input id="upload_image_button" class="button" type="button" value="Upload Image" />
<br />Enter a URL or upload an image
</label>
media-uploader.js
jQuery(document).ready(function($){
var custom_uploader;
$('#upload_image_button').click(function(e) {
e.preventDefault();
//If the uploader object has already been created, reopen the dialog
if (custom_uploader) {
custom_uploader.open();
return;
}
//Extend the wp.media object
custom_uploader = wp.media.frames.file_frame = wp.media({
title: 'Choose Image',
button: {
text: 'Choose Image'
},
multiple: false
});
//When a file is selected, grab the URL and set it as the text field's value
custom_uploader.on('select', function() {
attachment = custom_uploader.state().get('selection').first().toJSON();
$('#upload_image').val(attachment.url);
});
//Open the uploader dialog
custom_uploader.open();
});
});
dans functions.php
add_action('wp_enqueue_scripts', 'media_uploader_script');
function media_uploader_script() {
if (is_page_template('page-item-submission.php')) {
wp_enqueue_media();
wp_register_script('media-uploader-js', get_template_directory_uri().'/assets/js/media-uploader.js', array('jquery'));
wp_enqueue_script('media-uploader-js');
}
}
Voici une capture d'écran de ce que j'essaie de mettre en œuvre (je sais que le bouton "Ajouter davantage" est un autre type de "problème").
MODIFIER:
Voici ce que j'ai obtenu avec l'aide de Steven Jones:
media-upload.js
jQuery(document).ready(function($){
var custom_uploader;
$('.upload_image_button').click(function(e) {
var target_input = $(this).attr('id');
e.preventDefault();
//If the uploader object has already been created, reopen the dialog
if (custom_uploader) {
custom_uploader.open();
return;
}
//Extend the wp.media object
custom_uploader = wp.media.frames.file_frame = wp.media({
title: 'Choose Image',
button: {
text: 'Choose Image'
},
multiple: false
});
//When a file is selected, grab the URL and set it as the text field's value
custom_uploader.on('select', function() {
attachment = custom_uploader.state().get('selection').first().toJSON();
$('input[name=' + target_input + ']').val(attachment.url);
});
//Open the uploader dialog
custom_uploader.open();
});
});
formulaire frontal html
<input type="text" size="36" name="image_1" value="http://" />
<input id="image_1" class="upload_image_button" type="button" value="Upload Image" />
<input type="text" size="36" name="image_2" value="http://" />
<input id="image_2" class="upload_image_button" type="button" value="Upload Image" />
Cependant, seul l'un des deux champs est rempli avec l'entrée que je choisis dans l'utilitaire de téléchargement de média. Exemple: je clique sur le deuxième bouton (image_2) en premier, une URL est renseignée dans ce champ. Ensuite, je clique sur le premier bouton (image_1): l'URL de la pièce jointe est maintenant renseignée dans le deuxième champ, même si elle doit être insérée dans le premier champ ... cela n'a aucun sens.
Vous ne pouvez pas avoir deux boutons avec le même identifiant (#upload_image_button) car les identifiants sont supposés être uniques.
Vous devez attribuer une classe aux boutons et attribuer un ID égal à celui du nom de l’entrée associée.
<input type="text" size="36" name="image_1" value="http://" />
<input id="image_1" class="button upload_image_button" type="button" value="Upload Image" />
<input type="text" size="36" name="image_2" value="http://" />
<input id="image_2" class="button upload_image_button" type="button" value="Upload Image" />
Ensuite, dans votre JS, vous devez déclencher wp_media avec la classe du bouton.
$('.upload_image_button').click(function(e) {
Lorsque le bouton est cliqué, vous devrez alors obtenir l'ID du bouton sur lequel vous cliquez.
var target_input = $(this).attr('id');
Ensuite, lorsque l'image sera renvoyée par le programme de téléchargement, vous devrez renseigner la bonne entrée avec la valeur:
custom_uploader.on('select', function() {
attachment = custom_uploader.state().get('selection').first().toJSON();
$('input[name=' + target_input + ']').val(attachment.url);
});
J'espère que cela pourra aider.