前提・実現したいこと
【前提】
ワードプレスプラグインcontact form 7を使用し、フォーム送信と投稿を連携させています。
同時にカスタムフィールドとの連携もおこない、プラグインはACFを使用しています。
・投稿フォーム:〜/reviewpost/
【実現したいこと】
フォームに画像を添付し、添付された画像がカスタムフィールドに反映されるようにしたいです。
発生している問題
https://qiita.com/webiscuit/items/23a2b0f9d218a0d972eb#contact-form-7-%E3%81%8B%E3%82%89%E3%81%AE%E9%80%81%E4%BF%A1
https://teratail.com/questions/274973
上記記事を参考に作成しましたが、添付ファイルのメディアアップロードがうまくいきません。
フォーム送信後、メディアには「Array」という名前のファイルが登録されてしまいます。
〜uploads/2021/09/Array
カスタムフィールドに反映もできていません。
該当のソースコード
//フォーム送信時にブログ投稿をおこなう function wpcf7_insert_post(){ //送信情報を取得 $submission = WPCF7_Submission::get_instance(); if($submission) { $formdata = $submission->get_posted_data(); $formid = $submission->get_contact_form()->id(); $uploaded_files = $submission->uploaded_files(); if($formid == 7) { $new_post = array( 'post_type' => 'comment', 'post_title' => $formdata['your-name'], 'post_status' => 'draft', //下書き 'post_content' => $formdata['message'], ); //ブログ作成 $post_id = wp_insert_post($new_post); if(!is_wp_error($post_id)) { add_post_meta($post_id, 'specification', $formdata['specification']); add_post_meta($post_id, 'maker', $formdata['maker']); add_post_meta($post_id, 'your-email', $formdata['your-email']); add_post_meta($post_id, 'area', $formdata['area']); add_post_meta($post_id, 'menu', $formdata['menu']); add_post_meta($post_id, 'reviewimg', $formdata['reviewimg']); /* 画像の設定 */ if (isset($uploaded_files['reviewimg'])) { $thumb_path = '/comment/' . str_replace($baseurl, '', $uploaded_files['reviewimg']); $thumb_id = addAttachmentFromForm($thumb_path, $uploaded_files['reviewimg'], $post_id, $time); update_field('reviewimg', $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; }
試したこと
専門知識がなく、検索してコピぺで作成しました。
同じように作成したにも関わらずうまくいかず、情報もあまり落ちていないので手詰まりしております。
恐れ入りますがどなたか詳しい方ご教示いただけますと幸いです。。
あなたの回答
tips
プレビュー