Contents
動機
ユーザーにファイルを複数ファイルをアップロードさせ、メールにて送信する場合、メールに複数ファイルを添付するより、Wordpressのuploadに保存し、それらのURLをメールする方がメール関連の容量エラーを回避できて良いのではないか?
条件
- フロントから
- 複数ファイルののアップロード
- プラグインは使わない
- ログイン済みユーザー用
- Contact form 7などフォーム機能プラグインを使用せず固定ページにてファイルアップロードを実装
私のケースは、フォームからのメール送信で画像ファイルを複数添付する場合、メールに添付するよりWordpressに保存し、画像のURLをメールに記入する方がシンプルでよいのではないか?というので方法を調べました。
検索すると世界で下記と同じようなコードがたくさん見受けられました。
動作したもので私も利用しているものを紹介します。
実装手順
1 フォームを配置するHTML作成
enctype=”multipart/form-data”
type=file のnameは [] で
2 functions.php へ、ファイルを保存する関数を設置
kv_handle_attachment( $file_handler, $post_id, $set_thu = false )
関数の返り値は、media_handle_upload()の返り値、すなわち (整数|WP_Error) 添付ファイルの ID。
アップロードに失敗すると WP_Error。
3 (1)のフォームのpost先のphpファイル(page-upload.phpなどの固定ページ)に(2)の関数を使用する処理を書く
$uploaded_file = kv_handle_attachment( $file, $page_id );
の$page_idでPOSTに紐づける仕組みです。$page_idはなくても動きます。
4 アップロードファイルは、upload/ に保存されます。
下記のコードを実行すると、 $page_id で渡したページの添付として、メディアファイルのURLをechoしています。
※ログイン済みユーザー用です