Cum să încarci imagini folosind wp_handle_upload

4 sept. 2015, 14:12:54
Vizualizări: 33.3K
Voturi: 5

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
8
Comentarii

încearcă să explici ce anume trebuie să faci.. nu este clar ce vrei să obții.. și nu folosi $_POST sau $_FILES pentru a insera date direct în baza de date.. întotdeauna sanitizează-le!!

Maikal Maikal
4 sept. 2015 14:20:09

scuze, am actualizat codul acum, te rog verifică din nou

Hafiz Usman aftab Hafiz Usman aftab
4 sept. 2015 14:35:49

Tot nu înțeleg.. ce ar trebui făcut? la ce te referi prin 'actualizare multiple meta box-uri într-o buclă'? iată un exemplu cum să încarci mai multe fișiere: http://stackoverflow.com/questions/4178873/php-uploading-multiple-files

Maikal Maikal
4 sept. 2015 14:46:38

scuze, am scris greșit, voiam să încarc mai multe imagini, nu mai multe metabox-uri. Îmi pare rău că ți-am irosit timpul, dar te rog spune-mi cum pot încărca mai multe imagini folosind wp_handle_upload

Hafiz Usman aftab Hafiz Usman aftab
4 sept. 2015 14:54:27

vezi link-ul din comentariul meu anterior, acolo este un răspuns marcat care se potrivește nevoilor tale.

Maikal Maikal
4 sept. 2015 14:57:39

eroare wp_handle_upload în codul de mai sus

Hafiz Usman aftab Hafiz Usman aftab
4 sept. 2015 15:28:38

Am verificat link-ul tău, dar nu este nimic diferit, același fișier nu s-a mutat

Hafiz Usman aftab Hafiz Usman aftab
4 sept. 2015 15:30:11

Ai permisiunile necesare pe foldere? Poți încărca fișiere media prin panoul de administrare? Ce spune eroarea?

Maikal Maikal
4 sept. 2015 15:32:14
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 3
0

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 );

        }
      }
    }

}
4 sept. 2015 15:57:41
8

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&amp;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
4 sept. 2015 15:08:22
Comentarii

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

Maikal Maikal
4 sept. 2015 15:12:12

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

dev dev
4 sept. 2015 15:15:32

î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..

Maikal Maikal
4 sept. 2015 15:25:38

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

Hafiz Usman aftab Hafiz Usman aftab
4 sept. 2015 15:26:56

Am actualizat codul meu cu HTML..@HafizUsmanaftab

dev dev
4 sept. 2015 15:33:14

Da, dar doar o mică modificare poate funcționa @Maikal

dev dev
4 sept. 2015 15:33:57

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

Maikal Maikal
4 sept. 2015 16:23:04

@Maikal are dreptate

Hafiz Usman aftab Hafiz Usman aftab
5 sept. 2015 09:36:29
Arată celelalte 3 comentarii
0

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>';
    }
}
19 oct. 2024 10:50:09