lorsque je clique sur Télécharger un fichier, sélectionnez-le, puis cliquez sur Choisir un fichier. Je souhaite pouvoir cliquer à nouveau sur Télécharger le fichier, avant ou après la mise à jour, et ajouter les fichiers sélectionnés aux valeurs existantes dans les métaboxes "my_file_URL" et "my_file_ID". Mais j'ai un peu de difficulté à faire cela. À l'heure actuelle, il supprime les valeurs précédentes. Toute aide est très appréciée. Je vous remercie. Le code est ci-dessous:
functions.php
function add_resource($post){
$url = get_post_meta($post->ID, 'my_file_URL', true);
$id = get_post_meta($post->ID, 'my_file_ID', true);
?>
<input id="my_file_URL" name="my_file_URL" type="text"
value="<?php echo $url; ?>" style="width:400px;" />
<input id="my_file_ID" name="my_file_ID" type="hidden"
value="<?php echo $id; ?>" style="width:400px;" />
<input id="my_upl_button" type="button" value="Upload File" /><br/>
<script>
jQuery(document).ready(function($){
var custom_uploader;
$('#my_upl_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 File',
button: {
text: 'Choose File'
},
multiple: true
});
//When a file is selected, grab the URL and set it as the text field's value
custom_uploader.on('select', function() {
var selection = custom_uploader.state().get('selection').toJSON();
var urls = selection.map( function(attachment){
return attachment.url;
});
var ids = selection.map( function(attachment){
return attachment.id;
});
for(i=0; i < selection.length; i++){
$( '#my_file_URL' ).after(
'<br/><p>File URL: ' + selection[i].url + '</p><p> Description: ' + selection[i].description + '</p><br/>'
);
}
$( '#my_file_URL' ).val(urls.join(','));
$( '#my_file_ID' ).val(ids.join(','));
});
//Open the uploader dialog
custom_uploader.open();
});
});
<?php
}
function save_meta_box($post_id){
global $post;
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){
return;
} else {
if (isset($_POST['my_file_URL'])){
if(is_array($url))
$url[] = $new_url;
else
$url = array($new_url);
update_post_meta($post_id, 'my_file_URL', $_POST['my_file_URL']);
}
if (isset($_POST['my_file_ID'])){
if(is_array($id))
$id[] = $new_id;
else
$id = array($new_id);
update_post_meta($post_id, 'my_file_ID', $_POST['my_file_ID']);
}
}
}
add_action('save_post','save_meta_box');
single.php
$url = get_post_meta($post->ID, 'my_file_URL', true);
$id = get_post_meta($post->ID, 'my_file_ID', true);
$urls = explode(',', $url);
$urlCount = count($urls);
$ids = explode(',', $id);
for($i=0; $i < $urlCount; $i++){
$fileID = $ids[$i];
$attachment_filesize = size_format( filesize( get_attached_file( $fileID ) ), 2 );
$date = get_the_date('M d, Y', $fileID);
$attachment = get_post( $fileID ); ?>
<div class="codesc" style="float:left;"><h3><a href="<?php echo $urls[$i] ?>" target="_blank"><?php echo $attachment->post_title; ?><br>
<span class="linkdetails"><?php echo $attachment_filesize; ?> | <?php echo $date; ?></span></a></h3>
<p><?php echo $attachment->post_content; ?></p>
</div>
<?php
} ?>
J'ai pu le faire fonctionner en ajoutant ceci ...
jQuery(document).ready(function($){
var custom_uploader;
var currentfiles = document.getElementById('my_file_URL').value;
var currentID = document.getElementById('my_file_ID').value;
.....
var urls = selection.map( function(attachment){
return attachment.url;
});
var ids = selection.map( function(attachment){
return attachment.id;
});
$( '#my_file_URL' ).val(urls.join(','));
$( '#my_file_ID' ).val(ids.join(','));
if(currentfiles != ''){
$( '#my_file_URL' ).val(currentfiles + "," + urls);
}
if(currentID != ''){
$( '#my_file_ID' ).val(currentID + "," + ids);
}