WordPressでフロントからプラグイン無しで複数ファイルアップロードする方法  ログイン済みユーザー用

動機

ユーザーにファイルを複数ファイルをアップロードさせ、メールにて送信する場合、メールに複数ファイルを添付するより、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しています。

※ログイン済みユーザー用です

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です