Cum să încarci imagini folosind wp_handle_upload
Salut, sunt începător în WordPress și aș dori să știu cum pot încărca mai multe imagini folosind wp_handle_upload într-o buclă
for($i=1;$i<count($_FILES['myfile']['name']);$i++){
// Fișierul încărcat curent
$uploadedfile = $_FILES['myfile'].$i;
// Suprascrie setările implicite pentru test_form
$upload_overrides = array( 'test_form'.$i => false );
// Procesează încărcarea fișierului
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && !isset( $movefile['error'] ) ) {
// echo "Fișierul este valid și a fost încărcat cu succes.\n";
$dir_path = $movefile['url'];
} else {
// Afișează eroarea dacă există
echo $movefile['error'];
}
}//sfârșitul buclei
iată exemplul meu despre cum să încarci mai multe imagini:
add_action( 'add_meta_boxes', 'my_test_metabox' );
function my_test_metabox() {
add_meta_box( 'my_test_metabox', 'Încărcare fișier', '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 'Fișiere încărcate:' . "\r\n";
foreach( $files as $file ) {
echo '<img src="' . $file['url'] . '" width="100" height="100" />';
}
echo "\r\n";
}
echo 'Încarcă fișiere:' . "\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 );
}
}
}
}

Salut, aici este codul pe care l-am folosit în plugin-ul meu, sper că îl înțelegi și dacă ai vreo problemă îmi poți întreba:-
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 "Fișierul este valid și a fost încărcat cu succes.\n";
$filename = $movefile['file'];
} else {
/**
* Eroare generată de _wp_handle_upload()
* @see _wp_handle_upload() în wp-admin/includes/file.php
*/
echo $movefile['error'];
}
// $filename ar trebui să fie calea către un fișier în directorul de upload.
//$filename = '/calea/către/uploads/2013/03/numele-fisierului.jpg';
// Obține calea către directorul de upload.
$wp_upload_dir = wp_upload_dir();
$url = $wp_upload_dir['url'] . '/' . basename( $filename );
echo $url."<br>";
}
}
Aici este codul meu 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>Întrebare: <input type="text" name="question[%1$s][question]" value="%2$s"> -- <span class="remove_question">%3$s</span><span class="add_answer"> Adaugă Răspuns</span></p>', $c,$questions['question'],__('Șterge Întrebare'));
for($i = 1; $i<=count($questions['answers']); $i++)
{
if($questions['answers'][$i]['image'])
{
printf('<p>Opțiunea %5$s <input type="text" value="%1$s" name="question[%4$s][answers][%5$s][answer]"> Status <input type="text" value="%2$s" name="question[%4$s][answers][%5$s][status]"> Imagine <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'], __('Șterge Răspuns'), $c, $i,$questions['answers'][$i]['image']);
}
else
{
printf('<p>Opțiunea %5$s <input type="text" value="%1$s" name="question[%4$s][answers][%5$s][answer]"> Status <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'], __('Șterge Răspuns'), $c, $i);
}
}
$c = $c +1;
}
}
}
}
?>
<span id="question_here"></span>
<span class="add_question"><?php _e('Adaugă Întrebare'); ?></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>Întrebare: <input type="text" name="question['+count+'][question]" value=""> -- <span class="remove_question">Șterge întrebare</span><span class="add_answer"> Adaugă Răspuns</span></p>' );
return false;
});
$(".remove_question").live('click', function() {
$(this).parent().remove();
});
$(".add_answer").live('click',function(){
countt = countt + 1;
$('#question_here').append('<p>Răspuns <input type="text" name="question['+count+'][answers]['+countt+'][answer]"> Status <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="Încarcă Imagine" /><span class="remove_answer">Șterge</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

codul tău nu rezolvă, dacă am înțeles corect, întrebarea. După cum am înțeles, el are atributul multiple
în input..

Da, el are nevoie doar de asta, încearcă să înțelegi codul meu, apoi spune ceva..

înțeleg codul tău.. în html ai ceva de genul:
<input type="file" name"question_1" /><input type="file" name"question_2" />
etc., dar el are <input type="file" name"questions" multiple />
și asta e o diferență mare în php atunci când procesezi încărcarea..

te rog trimite-mi și codul tău HTML, vreau să văd tehnica ta

Înțeleg că nu e mult de schimbat, dar după cum văd exemplul său de cod - nu știe PHP.. @dev

funcție pentru gestionarea încărcării imaginii pentru input de tip fișier cu numele 'email_image'.
if (!empty($_FILES['email_image']['name'])) {
$uploadedfile = $_FILES['email_image'];
$upload_overrides = array('test_form' => false);
// Folosește funcția WordPress pentru gestionarea încărcării fișierului
$movefile = wp_handle_upload($uploadedfile, $upload_overrides);
if ($movefile && !isset($movefile['error'])) {
// Salvează URL-ul imaginii
update_option('ccd_email_image', $movefile['url']);
echo '<div class="updated"><p>Detaliile de contact au fost salvate!</p></div>';
} else {
echo '<div class="error"><p>' . $movefile['error'] . '</p></div>';
}
}
