wordpressで会員制のサイトを作り、メンバーにカスタム投稿タイプの記事をフロントエンドからアップロードさせるフォームを作っています。
ソースコードはショートコード化してあり、固定ページにショートコードを書き込んで呼び出してあります。
カスタムフィールドを使用しそこに画像をアップロードしたいのですが、アップロード時に
Specified file failed upload test.
というエラーが出て、カスタムフィールドに画像のIDを保存できません。
後でメディアライブラリを調べると、画像自体はアップロードできています。
送信フォーム (テキストやチェックボックス、投稿ID等がありますが省略しています。)
<form method="post" action="固定ページのurl" enctype="multipart/form-data"> <input type="file" name="img1" multiple="false"> <input type="file" name="img2" multiple="false"> <input type="file" name="img3" multiple="false"> <input type="submit" class="button" name="save" value="送信"> </form>
送信先固定ページの処理
if ( $_FILES['img1'] ) { foreach ( $_FILES as $file => $array ) { if ( $_FILES[$file]['error'] !== UPLOAD_ERR_OK ) { echo "upload error : " . $_FILES[$file]['error']; } require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id_1 = media_handle_upload( 'img1' , $post_id ); } } if ($attach_id_1 > 0){ update_post_meta( $post_id ,'img1', $attach_id_1 ); } if ( $_FILES['img2'] ) { foreach ( $_FILES as $file => $array ) { if ( $_FILES[$file]['error'] !== UPLOAD_ERR_OK ) { echo "upload error : " . $_FILES[$file]['error']; } require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id_2 = media_handle_upload( 'img2' , $post_id ); } } if ($attach_id_2 > 0){ update_post_meta( $post_id ,'img2', $attach_id_2 ); } if ( $_FILES['img3'] ) { foreach ( $_FILES as $file => $array ) { if ( $_FILES[$file]['error'] !== UPLOAD_ERR_OK ) { echo "upload error : " . $_FILES[$file]['error']; } require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id_3 = media_handle_upload( 'img3' , $post_id ); } } if ($attach_id_3 > 0){ update_post_meta( $post_id ,'img3', $attach_id_3 ); }
また、データベースの
wp-postmeta
テーブルを調査したところ下記の結果でした。
meta_id 36722 post_id 6737 meta_key img1 meta_value O:8:"WP_Error":2:{s:6:"errors";a:1:{s:12:"upload_error";a:1:{i:0;s:34:"Specified file failed upload test.";}}s:10:"error_data";a:0:{}}
さらに送信先の処理に下記コードを加え調査を行いました。
echo ini_get(‘upload_max_filesize’); echo ini_get(‘post_max_size’); echo ini_get(‘memory_limit’); echo(‘<pre>’); var_dump( $_FILES[‘img1’] ); echo(‘</pre>’); echo(‘<pre>’); var_dump( $attach_id_1 ); echo(‘</pre>’);
結果は下記です。
4M 4M 128M array(5) { [“name”]=> string(12) “image215.jpg” [“type”]=> string(10) “image/jpeg” [“tmp_name”]=> string(14) “/tmp/php0IwhdY” [“error”]=> int(0) [“size”]=> int(217336) } object(WP_Error)#14965 (2) { [“errors”]=> array(1) { [“upload_error”]=> array(1) { [0]=> string(34) “Specified file failed upload test.” } } [“error_data”]=> array(0) { } }
media_handle_uploadで画像のアップロードは出来ているのに、何故返り値にWP_Errorが返ってくるのでしょうか?
投稿のカスタムフィールドに画像のIDを保存し、それを元に画像を表示させたいのですが、カスタムフィールドにはWP_Errorの内容が保存されています。
以上です。
よろしくお願いいたします。
あなたの回答
tips
プレビュー