私は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
を使うのがこれをめちゃくちゃにするのですか?
ありがとうございました!
ああ、私は自分でこれに答えることができたと思います。 $ _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