Überprüfen, ob $ _FILE für ein Array von Datei-Upload-Metaboxen gesetzt ist

Ich habe damit fast 2 Tage lang ohne Erfolg gekämpft. Ich habe einen benutzerdefinierten Beitragstyp von PRODUCTS , der eine Gruppe von Metaboxen zum Hochladen von PDF-Dateien im wp-admin . Ich habe die Metaboxen im Admin erstellt. Hier ist der Code für meine Metaboxen:

 //PDF upload Meta Boxes $meta_box_pdf_uploads = array( 'id' => 'products-pdf-meta-boxes', 'title' => "PDFs", 'page' => 'product', //attach to products custom post 'context' => 'normal', 'priority' => 'default', 'fields' => array( array( 'name' => $prefix . 'pdf1', 'desc' => 'Product PDF', 'id' => $prefix . 'pdf1', 'type' => 'text' ), array( 'name' => $prefix . 'pdf2', 'desc' => 'Product PDF', 'id' => $prefix . 'pdf2', 'type' => 'text' ) ) ); 

Momentan gibt es nur zwei pdf’s zum hochladen. Hier ist der Code, um meine Metaboxen im Admin-Menü anzuzeigen:

 function products_pdf_uploads_show_meta() { global $meta_box_pdf_uploads, $post, $prefix; echo ''; echo '

Upload your PDFs here

'; foreach ($meta_box_pdf_uploads['fields'] as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true); echo '', '', ''; } echo '
', '', '
'; }

Das alles funktioniert, bis ich versuche zu überprüfen, ob das Datei-Upload-Feld einen Wert hat oder nicht. Hier ist, was ich arbeite jetzt so weit wie der Code, um die Meta zu speichern (es gibt Tonnen von Debugging-Code, so dass Sie bewusst sind):

  //Upload PDF files foreach ($meta_box_pdf_uploads['fields'] as $pdf_field) { //Make sure field isn't emtpy if(isset($_FILES[$pdf_field['name']]) { //var_dump($_FILES); print_r ($_FILES[$pdf_field['name']]); //debugging $pdf_type = $_FILES[$pdf_field['name']['tmp_name']]; //debugging, can't get this to return any value wp_die('Passed! '. $pdf_type); //debugging //Setup File type allowed //Get the file type } else { //var_dump($_FILES); print_r ($_FILES[$pdf_field['name']]); wp_die('Nothing was passed: ' . $pdf_field['name']); //debugging } } 

Nun, auch wenn ich dem Upload-Feld keine Datei hinzufüge, ist meine erste Bedingung noch erfüllt:

 if(isset($_FILES[$pdf_field['name']]) { 

Ich weiß, dass es ein Array des $ pdf_fields zurückgibt. Ich habe auch versucht zu prüfen, ob der Fehler 0 mit $_FILES[$pdf_field['name']['error'] aber ich kann keine der Array-Werte $ _FILE zurückgeben.

Wenn ein Feld zum Hochladen angegeben wird und ich eine print_r ($_FILES[$pdf_field['name']]) es zurück:

 Array ( [name] => 1testpdf.pdf [type] => application/pdf [tmp_name] => /tmp/phpF7HQnJ [error] => 0 [size] => 8278 ) 

Was ist richtig, aber es tut dies auch, wenn ich nicht ein Feld angeben, nur alle Array-Werte sind leer, außer für den Fehler, der gleich 4 (keine Datei angegeben).

Ich habe mir die Haare rausgerissen. Was ist der beste Weg, dies zu tun? Ich denke, wenn es eine einzelne Metabox wäre und ich könnte es wie $FILE['name_of_file']['error'] , würde es funktionieren. Warum benutzt eine foreach dies?

Vielen Dank!

Solutions Collecting From Web of "Überprüfen, ob $ _FILE für ein Array von Datei-Upload-Metaboxen gesetzt ist"

Ahh ich glaube ich konnte das alleine beantworten. Ich habe eine Variable für das Array $ _FILES ($ pdf_field [‘name’]) erstellt und konnte diese verwenden, um die Array-Werte zu erhalten. Ich muss nur eine Fehlerbehandlung durchführen und meine Uploads testen. Sollte etwas nicht in Ordnung sein, bitte lass es mich wissen.

  //Upload PDF files foreach ($meta_box_pdf_uploads['fields'] as $pdf_field) { //put file array into a variable $pdf = $_FILES[$pdf_field['name']]; //if array is set and there is no error if(isset($pdf['error']) && $pdf['error'] > 0) { //setup error handling based on error code wp_die('Error uploading file: Error Number is ' . $pdf['error']); } else { //Passed