web-dev-qa-db-ja.com

$ _FILEがファイルアップロードメタボックスの配列に設定されているかどうかの確認

私は2日間近くこの問題に苦労していましたが無駄でした。私はPDFファイルをwp-adminにアップロードするためのメタボックスのグループを持つPRODUCTSのカスタム投稿タイプを持っています。メタボックスを管理者で作成しました。これが私のメタボックスのコードです。

//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は2つだけです。これが管理メニューに私のメタボックスを表示するコードです。

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_fieldの配列を返しているからです。私は$_FILES[$pdf_field['name']['error']を使用してエラーが0であるかどうかもチェックしようとしました、しかし、私は$ _FILE配列値のどれも返すことができません。

アップロードするフィールドを指定してprint_r ($_FILES[$pdf_field['name']])を実行すると、次のように返されます。

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

これは正しいですが、フィールドを指定しない場合も同様です。ERRORが4に等しい場合を除いて、すべての配列値だけが空になります(ファイル指定なし)。

これで髪を引っ張ってきた。これを行うための最良の方法は何ですか?それが単一のメタボックスであれば、私はそれを$FILE['name_of_file']['error']のように呼ぶことができると思います。なぜforeachを使うのがこれをめちゃくちゃにするのですか?

ありがとうございました!

1
drpcken

ああ、私は自分でこれに答えることができたと思います。 $ _FILES($ pdf_field ['name'])配列用の変数を作成し、それらを使用して配列値を取得できました。ちょっとしたエラー処理をして私のアップロードをテストする必要があるだけです。この方法でそれに対処することに何か問題があるならば、私に知らせてください。

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