Проверка, установлен ли $FILE для массива метабоксов загрузки файлов


Я боролся с этим почти 2 дня безрезультатно. У меня есть пользовательский тип записи PRODUCTS, в котором есть группа метабоксов для загрузки PDF-файлов в wp-admin. Я создал метабоксы в администраторе. Вот код для моих метабоксов:

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

На данный момент нужно загрузить только два PDF-файла. Вот код для отображения моих метабоксов в меню администратора:

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

    echo '<table class="form-table">';
    echo '<p class="description">Upload your PDFs here</p>';
    foreach ($meta_box_pdf_uploads['fields'] as $field) {
        // get current post meta data
        $meta = get_post_meta($post->ID, $field['id'], true);

        echo '<tr>',
                '<td>',

                    '<input type="file" style="width: 700px;" name="', $field['id'], '" id="', $field['id'], '" />',
                '</td>',
             '</tr>';
    }

    echo '</table>';

}

Все это работает до тех пор, пока я не попытаюсь проверить, имеет ли значение поле загрузки файла или нет. Вот с чем я сейчас работаю в том, что касается кода для сохранения мета-кода (есть тонны кода отладки, чтобы вы знали):

 //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
        }
    }

Теперь, даже если я не добавлю файл в поле загрузки, мое первое условие все равно будет выполнено здесь:

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

Я знаю, что это потому, что он возвращает массив поля $pdf_. Я также попытался проверить, была ли ошибка 0, используя $_FILES[$pdf_field['name']['error'], но я не могу вернуть ни одно из значений массива $_FILE.

Когда указываете поле для загрузки, и я делаю print_r ($_FILES[$pdf_field['name']]) это возвращает:

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

Это правильно, но это также происходит, когда я не указываю поле, только все значения массивов пусты, за исключением ОШИБКИ, равной 4 (файл не указан).

Я рвал на себе волосы из-за этого. Каков наилучший способ сделать это? Я думаю, что если бы это был один метабокс, и я мог бы назвать его так, как $FILE['name_of_file']['error'], это сработало бы. Почему использование foreach все портит?

Спасибо вам!

Author: ItsPronounced, 2012-12-03

1 answers

Ах, я думаю, что смог ответить на этот вопрос самостоятельно. Я создал переменную для массива $_FILES($pdf_field['имя']) и смог использовать ее для получения значений массива. Просто нужно немного обработать ошибки и проверить мои загрузки. Если что-то не так с этим обращением, пожалуйста, дайте мне знать.

 //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
 0
Author: ItsPronounced, 2012-12-03 04:14:10