Come caricare immagini utilizzando wp_handle_upload
Ciao, sono nuovo su WordPress e vorrei sapere come posso caricare multiple immagini utilizzando wp_handle_upload in un ciclo
for($i=1;$i<count($_FILES['myfile']['name']);$i++){
$uploadedfile = $_FILES['myfile'].$i;
$upload_overrides = array( 'test_form'.$i => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && !isset( $movefile['error'] ) ) {
// Il file è valido ed è stato caricato con successo
$dir_path= $movefile['url'];
} else {
echo $movefile['error'];
}
}//fine ciclo

Ecco il mio esempio su come caricare più immagini:
add_action( 'add_meta_boxes', 'my_test_metabox' );
function my_test_metabox() {
add_meta_box( 'my_test_metabox', 'Caricamento file', 'my_test_metabox_out', 'post' );
}
add_action('post_edit_form_tag', 'update_edit_form' );
function update_edit_form() {
echo ' enctype="multipart/form-data"';
}
function my_test_metabox_out( $post ) {
$files = get_post_meta( $post->ID, 'my_files', true );
if( ! empty( $files ) ) {
echo 'File caricati:' . "\r\n";
foreach( $files as $file ) {
echo '<img src="' . $file['url'] . '" width="100" height="100" />';
}
echo "\r\n";
}
echo 'Carica file:' . "\r\n";
echo '<input type="file" name="my_files[]" multiple />';
}
add_action( 'save_post', 'my_files_save' );
function my_files_save( $post_id ) {
if( ! isset( $_FILES ) || empty( $_FILES ) || ! isset( $_FILES['my_files'] ) )
return;
if ( ! function_exists( 'wp_handle_upload' ) ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
}
$upload_overrides = array( 'test_form' => false );
$files = $_FILES['my_files'];
foreach ($files['name'] as $key => $value) {
if ($files['name'][$key]) {
$uploadedfile = array(
'name' => $files['name'][$key],
'type' => $files['type'][$key],
'tmp_name' => $files['tmp_name'][$key],
'error' => $files['error'][$key],
'size' => $files['size'][$key]
);
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && !isset( $movefile['error'] ) ) {
$ufiles = get_post_meta( $post_id, 'my_files', true );
if( empty( $ufiles ) ) $ufiles = array();
$ufiles[] = $movefile;
update_post_meta( $post_id, 'my_files', $ufiles );
}
}
}
}

Ciao, ecco il codice che ho utilizzato nel mio plugin, spero tu lo capisca e se hai qualche problema puoi chiedermelo:-
if(isset($_FILES))
{
for ($i=1; $i < count($_FILES) ; $i++)
{
$uploadedfile = $_FILES['question_'.$i];
?>
<script type="text/javascript">
$(document).ready(function(){
var nam = <?php echo "question".$i; ?>
var namm = $("."+nam).prev().attr('name');
});
</script>
<?php
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && !isset( $movefile['error'] ) {
//echo "File is valid, and was successfully uploaded.\n";
$filename = $movefile['file'];
} else {
/**
* Errore generato da _wp_handle_upload()
* @see _wp_handle_upload() in wp-admin/includes/file.php
*/
echo $movefile['error'];
}
// $filename dovrebbe essere il percorso di un file nella directory di upload
//$filename = '/path/to/uploads/2013/03/filename.jpg';
// Ottieni il percorso della directory di upload
$wp_upload_dir = wp_upload_dir();
$url = $wp_upload_dir['url'] . '/' . basename( $filename );
echo $url."<br>";
}
}
Ecco il mio codice HTML:-
$question = get_post_meta($trivia->ID,'question',true);
$c = 0;
$id = uniqid();
if ( count( $question ) > 0 ) {
if(is_array($question)){
foreach( $question as $questions ) {
if ( isset( $questions['question'] ) ) {
printf('<p>Domanda: <input type="text" name="question[%1$s][question]" value="%2$s"> -- <span class="remove_question">%3$s</span><span class="add_answer"> Aggiungi Risposta</span></p>', $c,$questions['question'],__('Rimuovi Domanda'));
for($i = 1; $i<=count($questions['answers']); $i++)
{
if($questions['answers'][$i]['image'])
{
printf('<p>Opzione %5$s <input type="text" value="%1$s" name="question[%4$s][answers][%5$s][answer]"> Stato <input type="text" value="%2$s" name="question[%4$s][answers][%5$s][status]"> Immagine <input type="text" name="question[%4$s][answers][%5$s][image]" value="%6$s"><img src="%6$s" height="100" width="100"> -- <span class="remove_answer">%3$s</span></p>', $questions['answers'][$i]['answer'] ,$questions['answers'][$i]['status'], __('Rimuovi Risposta'), $c, $i,$questions['answers'][$i]['image']);
}
else
{
printf('<p>Opzione %5$s <input type="text" value="%1$s" name="question[%4$s][answers][%5$s][answer]"> Stato <input type="text" value="%2$s" name="question[%4$s][answers][%5$s][status]"> -- <span class="remove_answer">%3$s</span></p>', $questions['answers'][$i]['answer'] ,$questions['answers'][$i]['status'], __('Rimuovi Risposta'), $c, $i);
}
}
$c = $c +1;
}
}
}
}
?>
<span id="question_here"></span>
<span class="add_question"><?php _e('Aggiungi Domanda'); ?></span>
<script>
var $ =jQuery.noConflict();
$(document).ready(function() {
var count = <?php echo $c; ?>;
var countt = 0;
$(".add_question").click(function() {
count = count + 1;
countt = 0;
$('#question_here').append('<p>Domanda: <input type="text" name="question['+count+'][question]" value=""> -- <span class="remove_question">Rimuovi domanda</span><span class="add_answer"> Aggiungi Risposta</span></p>' );
return false;
});
$(".remove_question").live('click', function() {
$(this).parent().remove();
});
$(".add_answer").live('click',function(){
countt = countt + 1;
$('#question_here').append('<p>Risposta <input type="text" name="question['+count+'][answers]['+countt+'][answer]"> Stato <input type="text" name="question['+count+'][answers]['+countt+'][status]"><input id="question_'+count+'_answers_'+countt+'_image" type="text" size="36" name="question['+count+'][answers]['+countt+'][image]" value="" /><input class="upload_image_button" type="button" value="Carica Immagine" /><span class="remove_answer">Rimuovi</span></p>');
})
$('.upload_image_button').live('click',function() {
formfield = $('#upload_image').attr('name');
tb_show('', 'media-upload.php?type=image&TB_iframe=true');
return false;
});
window.send_to_editor = function(html) {
imgurl = $('img',html).attr('src');
$('#question_'+count+'_answers_'+countt+'_image').val(imgurl);
tb_remove();
}
$(".remove_answer").live('click', function() {
$(this).parent().remove();
});
});
</script>
</div><?php

il tuo codice non risolve, se ho capito correttamente, la domanda. Se ho capito bene lui ha l'attributo multiple
nell'input..

Sì, ha bisogno solo di questo, cerca di capire il mio codice, poi dici qualcosa..

io capisco il tuo codice.. in html hai qualcosa tipo:
<input type="file" name"question_1" /><input type="file" name"question_2" />
ecc., ma lui ha <input type="file" name"questions" multiple />
e questa è una grande differenza in php quando si gestisce l'upload..

per favore invia anche il tuo codice html, voglio vedere la tua tecnica

Capisco che ci sia poco da cambiare, ma dal suo esempio di codice vedo che non conosce php.. @dev

funzione per gestire il caricamento dell'immagine per l'input di tipo file con nome 'email_image'.
if (!empty($_FILES['email_image']['name'])) {
$uploadedfile = $_FILES['email_image'];
$upload_overrides = array('test_form' => false);
// Usa la funzione di WordPress per gestire il caricamento del file
$movefile = wp_handle_upload($uploadedfile, $upload_overrides);
if ($movefile && !isset($movefile['error'])) {
// Salva l'URL dell'immagine
update_option('ccd_email_image', $movefile['url']);
echo '<div class="updated"><p>Dettagli contatto salvati!</p></div>';
} else {
echo '<div class="error"><p>' . $movefile['error'] . '</p></div>';
}
}
