コンタクトフォーム7から記事作成した際の画像保存
-
現在、コンタクトフォーム7のフォーム送信から記事投稿ができるようカスタマイズを行っているのですが、フォームでアップロードした画像のメディアライブラリへのアップロードと記事のカスタムフィールドへの追加がうまくいかない状態です。
メディアライブラリへは、画像が保存される代わりに、ファイル名が「array」と記載されている謎のファイルが保存されています。
当方PHPはコピペでなんとか触れる程度で、参考サイトを見ながらできる範囲いろいろと試してみましたが解決することができず…。
先日もこちらで助けていただいたばかりで大変恐縮なのですが、詳しい方がいらっしゃいましたら解決策をご教授いただけますと幸いです。
↓コード
//フォーム送信時にブログ投稿をおこなう function wpcf7_insert_post(\WPCF7_ContactForm $contactForm) { //送信情報を取得 $submission = WPCF7_Submission::get_instance(); $form_id = $contactForm->id(); if($submission && $form_id == "40") { $formdata = $submission->get_posted_data(); $uploaded_files = $submission->uploaded_files(); $uploaded_files2 = $submission->uploaded_files(); $uploaded_files3 = $submission->uploaded_files(); $new_post = array( 'post_type' => 'user-report', 'post_title' => $formdata['ttl'], 'post_status' => 'draft', //下書き 'post_content' => $formdata['your-txt'] ); //ブログ作成 $post_id = wp_insert_post($new_post); //作成に成功した場合 if(!is_wp_error($post_id)) { //カテゴリを取得 $item1 = $_POST['product-select1']; $term1 = get_term_by('name', $item1 ,'use_item'); $term_id1 = $term1->term_id; $item2 = $_POST['product-select2']; $term2 = get_term_by('name', $item2 ,'use_item'); $term_id2 = $term2->term_id; $item3 = $_POST['product-select3']; $term3 = get_term_by('name', $item3 ,'use_item'); $term_id3 = $term3->term_id; //カスタムフィールドのデータも登録する wp_set_object_terms($post_id,array($term_id1,$term_id2,$term_id3),'use_item'); add_post_meta($post_id, 'name', $formdata['your-handlename']); add_post_meta($post_id, 'date', $formdata['date']); add_post_meta($post_id, 'time', $formdata['time']); add_post_meta($post_id, 'field', $_POST['area']); add_post_meta($post_id, 'field1', $formdata['area2']); add_post_meta($post_id, 'results', $formdata['catch']); /* 画像の設定 */ if (isset($uploaded_files['photo1'])) { $thumb_path = '/user-report/' . str_replace($baseurl, '', $uploaded_files['photo1']); $thumb_id = addAttachmentFromForm($thumb_path, $uploaded_files['photo1'], $post_id, $time); update_field('photo1', $thumb_id, $post_id); } if (isset($uploaded_files2['photo2'])) { $thumb_path = '/user-report/' . str_replace($baseurl, '', $uploaded_files['photo2']); $thumb_id = addAttachmentFromForm($thumb_path, $uploaded_files['photo2'], $post_id, $time); update_field('photo2', $thumb_id, $post_id); } if (isset($uploaded_files3['photo3'])) { $thumb_path = '/user-report/' . str_replace($baseurl, '', $uploaded_files['photo3']); $thumb_id = addAttachmentFromForm($thumb_path, $uploaded_files['photo3'], $post_id, $time); update_field('photo3', $thumb_id, $post_id); } } } } add_action('wpcf7_mail_sent', 'wpcf7_insert_post', 10, 1); /* 画像の詳細処理 */ function addAttachmentFromForm($filename, $file_base, $post_id, $time) { $layout_img_value = ''; $filetype = wp_check_filetype( basename( $filename ), null ); $wp_upload_dir = wp_upload_dir(); $upfile = $wp_upload_dir['url'] . '/' . $time . basename( $filename ); $copyfile = $wp_upload_dir['path'] .'/' . $time . basename( $filename ); copy($file_base, $copyfile); $attachment = array( 'guid' => $upfile, 'post_mime_type' => $filetype['type'], 'post_title' => preg_replace( '/.[^.]+$/', '', basename( $upfile ) ), 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $copyfile, $post_id ); require_once( ABSPATH . 'wp-admin/includes/image.php' ); $attach_data = wp_generate_attachment_metadata( $attach_id, $copyfile ); wp_update_attachment_metadata( $attach_id, $attach_data ); if($attach_id) return $attach_id; else return false; }
↓仕様
・フォームでは、JPG、PNGなどの画像データのみをアップロード
・カスタムフィールドは、Advanced Custom Fieldsで作成。
画像を入れたいフィールドの設定➡フィールドタイプ:画像、ライブラリ:投稿にアップロード
・最大3枚の画像をアップロード
↓参考にしたサイト
https://qiita.com/webiscuit/items/23a2b0f9d218a0d972eb
https://teratail.com/questions/274973
何卒よろしくお願い致します。
1件の返信を表示中 - 1 - 1件目 (全1件中)
1件の返信を表示中 - 1 - 1件目 (全1件中)
- トピック「コンタクトフォーム7から記事作成した際の画像保存」には新たに返信することはできません。