質問編集履歴

1 画像の添付がうまくいっておりませんでした。

ilovemathdayo

ilovemathdayo score 14

2017/01/28 23:31  投稿

【PHP】Wordpressのユーザー(マイページ)からの投稿で、画像(ファイル)がうまく反映されません。
###前提・実現したいこと
Wordpressのプラグイン「buddypress」と「Advanced Custom Fields」を使い、
指定ユーザーが記事を投稿できるシステムを作成しています。
###発生している問題・エラーメッセージ
ユーザーのマイページから文章等は登録し、反映されるのですが、
画像ファイルは上手くアップされず、困っております。
イメージページ http://misscampus-kadai.com/2016/01/14/syuukatusample/
実際のページ http://misscampus-kadai.com/store/%ef%bc%88%e6%a0%aa%ef%bc%89gakutopi%e3%80%80%e3%82%ac%e3%82%af%e3%83%88%e3%83%94/
このように実際のページでは画像が反映されておりません。
またユーザーの記事投稿画面は下記の画像の様になります。
![![イメージ説明](fcbbe40ffa6f9475cbc386b45d00b052.png)  
そして下記がユーザーの記事投稿画面のソースコードの一部になります。
###該当のソースコード
```ここに言語を入力
/*---------------------------
* バリデーション
*--------------------------*/
function check_postdata(){
   global $post_error;
   global $upload_dir;
   global $image_url;
   if(!isset($_POST['title']) || empty($_POST['title'])){
       $post_error[] = '販売店名が空白です。';
   }
   if (isset($_FILES['image']['error']) && is_int($_FILES['image']['error'])) {
       // ファイルバリデーション
       if (!$_FILES['image']['error']) {
           // サイズ上限チェック
           if ($_FILES['image']['size'] > 100000) {
               $post_img_error[] = 'ファイルサイズが大きすぎます。';
           }
           // getimagesizeを利用しMIMEタイプをチェック
           $imageInfo = getimagesize($_FILES['image']['tmp_name']);
           list($orig_width, $orig_height, $image_type) = $imageInfo;
           if ($imageInfo === false) {
               $post_error[] = '画像ファイルではありません。';
           } else {
               $ext = substr($_FILES['image']['name'], strrpos($_FILES['image']['name'], '.') + 1);
               if (false === $ext = array_search(
                   $imageInfo['mime'],
                   array(
                       'jpg' => 'image/jpeg',
                       'jpeg' => 'image/jpeg',
                       'png' => 'image/png',
                       'gif' => 'image/gif',
                   ),
                   true
               )) {
                   $post_error[] = '画像形式が未対応です。';
               }
           }
           $user = wp_get_current_user();
           $upload_dir = wp_upload_dir();
           $image_url = $upload_dir['path'] . '/'. $user->get('user_login').'-'. date(YmdHis) .'.'. $ext;
           if (!move_uploaded_file($_FILES['image']['tmp_name'],$image_url)) {
               $post_error[] = 'ファイル保存時にエラーが発生しました。';
           }
       }
   }
}
function upload_image( $fname ){
   global $post_id;
   if (isset($_FILES[$fname]['error']) && is_int($_FILES[$fname]['error'])) {
       // ファイルバリデーション
       if (!$_FILES[$fname]['error']) {
           $imageInfo = getimagesize($_FILES[$fname]['tmp_name']);
           list($orig_width, $orig_height, $image_type) = $imageInfo;
           if ($imageInfo === false) {
//                           $post_img_error[] = '画像ファイルではありません。';
           } else {
               $ext = substr($_FILES[$fname]['name'], strrpos($_FILES[$fname]['name'], '.') + 1);
               $user = wp_get_current_user();
               $upload_dir = wp_upload_dir();
               $image_url = $upload_dir['path'] . '/'. $user->get('user_login').'-'. date(YmdHis) .'.'. $ext;
               if (!move_uploaded_file($_FILES[$fname]['tmp_name'],$image_url)) {
                   $post_img_error[] = 'ファイル保存時にエラーが発生しました。';
               }
           }
           $filename = basename($image_url);
           if(wp_mkdir_p($upload_dir['path']))
               $file = $upload_dir['path'] . '/' . $filename;
           else
               $file = $upload_dir['basedir'] . '/' . $filename;
           $image_data = file_get_contents($image_url);
           file_put_contents($file, $image_data);
           $wp_filetype = wp_check_filetype($filename, null );
           $attachment = array(
               'post_mime_type' => $wp_filetype['type'],
               'post_title' => sanitize_file_name($filename),
               'post_content' => '',
               'post_status' => 'inherit'
           );
           $attach_id = wp_insert_attachment( $attachment, $file, $post_id );
           require_once(ABSPATH . 'wp-admin/includes/image.php');
           $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
           wp_update_attachment_metadata( $attach_id, $attach_data );
           set_post_thumbnail( $post_id, $attach_id );
           update_post_meta($post_id, $fname, $attach_id);
       }
   }
}
/*---------------------------
* エラーメッセージ表示セット
*--------------------------*/
function show_post_error(){
   global $post_error;
   if(!empty($post_error)){
       echo '<div id="error">';
       echo implode('<br />', $post_error);
       echo '</div>';
   }
}
?>
<form action="<?php the_permalink();?>" method="post" enctype="multipart/form-data">
   <input type="hidden" name="mode" id="mode" value="<?php echo $mode; ?>" />
   <input type="hidden" name="id" id="id" value="<?php echo $post_id; ?>" />
   <?php wp_nonce_field('store_regist'); ?>
   <table>
       <tr>
           <th>販売店名</th>
           <td><input type="text" name="title" id="title" class="" value="<?php echo $post->post_title; ?>" /></td>
       </tr>
       <tr>
           <th>トップイメージ</th>
           <td><input type="file" name="image" /></td>
       </tr>
       <tr>
           <th>企業イメージ</th>
           <td><input type="file" name="shoptopphoto" /></td>
       </tr>
       <tr>
           <th>アピール80文字</th>
           <td>
               <textarea type="text" name="appeal" id="appeal" class="" rows="5" style="width:98%;" /><?php echo $custom['appeal'][0]; ?></textarea>
           </td>
       </tr>
       <tr>
           <th>お店トップ画像</th>
           <td><input type="file" name="storephoto" /></td>
       </tr>
       <tr>
           <th>おすすめ画像①</th>
           <td><input type="file" name="storephoto1" /></td>
       </tr>
       <tr>
           <th>おすすめ画像①の説明(最大38文字) </th>
           <td>
               <textarea type="text" name="detail1" id="detail1" class="" rows="5" style="width:98%;" /><?php echo $custom['detail1'][0]; ?></textarea>
           </td>
       </tr>
```
全く解決ができないため、ご教授していただけますと幸いです。
ではよろしくお願い致します。
  • PHP

    33173 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    13070 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る