説明
wp_handle_upload() は、アップロードされたファイルを検証し、アップロードディレクトリに移動する関数です。
基本構文
wp_handle_upload( array $file, array|false $overrides = false, string|null $time = null ): array
引数
$file:$_FILESの要素$overrides:test_form、mimesなどの設定$time:保存先の年月
戻り値
成功時は file、url、type を含む配列。失敗時は error を含む配列。
使い方(サンプル)
require_once ABSPATH . 'wp-admin/includes/file.php';
$res = wp_handle_upload( $_FILES['my_file'], array( 'test_form' => false ) );
注意点
- メディアライブラリには登録されません。登録するには
wp_insert_attachment()を呼びます。 - 許可するファイル種別は
mimesで制限します。
実務での使いどころ
- アップロードされたファイルを、アップロードフォルダへ移すとき。
- メディアへの登録は、別に行いたいとき。
よくあるミスと対処
- フォームからでない場合に、
test_formをfalseにしていない。エラーになる。 - 戻り値の
errorを、確認していない。失敗しても、エラーがキーとして返る。 - フロント側で、管理画面用のファイル(
wp-admin/includes/file.php)を、読み込んでいない。 - 登録まで終わったと思っている。この関数は、メディアへの登録を行わない。
NG例
$result = wp_handle_upload( $_FILES['photo'] ); // 条件によって、エラーになる
OK例
require_once ABSPATH . 'wp-admin/includes/file.php';
$result = wp_handle_upload( $_FILES['photo'], array( 'test_form' => false ) );
if ( isset( $result['error'] ) ) {
return;
}
$file = $result['file'];
$url = $result['url'];
使い分け早見表
| 関数 | 役割 |
|---|---|
wp_handle_upload() |
ファイルを移すだけ(メディアには登録しない) |
media_handle_upload() |
移動・登録・サムネイル生成まで、行う |
wp_insert_attachment() |
ファイルを、メディアとして登録する |
関連項目
media_handle_upload()、wp_upload_dir()、wp_insert_attachment()
公式リファレンス:wp_handle_upload() | Function | WordPress Developer Resources

コメント