(пересмотренный ответ)
Как указано в комментарии к другому ответу, вы можете использовать media_handle_upload()
для загрузки изображений, но так как функция поддерживает только одиночную загрузку, то для Несколько загрузок, вы можете установить временный элемент $_FILES
, например, так:
// Load upload-related and other required functions.
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/image.php';
require_once ABSPATH . 'wp-admin/includes/media.php';
$post_id = 0; // set to the proper post ID, if attaching to a post
$uploaded = []; // attachment IDs
foreach ( $_FILES['gallery_images']['tmp_name'] as $key => $file ) {
// Set a temporary $_FILES item.
$_FILES['_tmp_gallery_image'] = [
'name' => $_FILES['gallery_images']['name'][ $key ],
'type' => $_FILES['gallery_images']['type'][ $key ],
'size' => $_FILES['gallery_images']['size'][ $key ],
'tmp_name' => $file,
'error' => $_FILES['gallery_images']['error'][ $key ],
];
// Upload the file/image.
$att_id = media_handle_upload( '_tmp_gallery_image', $post_id );
if ( ! is_wp_error( $att_id ) ) {
$uploaded[] = $att_id;
}
}
unset( $_FILES['_tmp_gallery_image'] );
// Save the attachment IDs.
$user = wp_get_current_user();
update_user_meta( $user->ID, 'gallery', $uploaded );
И я сохраняю идентификаторы вложений, но, конечно, вам решать, хотите ли вы сохранить URL-адреса изображений и т. Д.
PS: Вы можете проверить исходный ответ здесь , чтобы увидеть, как вы также можете загрузить изображения, используя media_handle_sideload()
. (Это работает хорошо, но вместо того, чтобы проходить через обертку (функцию), мы должны просто вызвать media_handle_upload()
, если только вы не «загружаете» внешнее / удаленное изображение / файл.) Извините за этот ответ ..:)