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