Сохранить массив изображений для пользователя в Wordpress? - PullRequest
1 голос
/ 24 апреля 2019

Можно ли сохранить массив изображений для пользователя?

Я уже создал форму, и я нахожусь в сохраняющей части.

У меня уже есть этот код:

update_user_meta($user->ID, 'gallery', $_POST['gallery_images']);

gallery_images содержит массив входных изображений в виде.

И я знаю, что это не работает. Можно ли сохранить массив изображений у пользователя? Если возможно, то как?

PS. Я использую последнюю версию WordPress.

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

(пересмотренный ответ)

Как указано в комментарии к другому ответу, вы можете использовать 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(), если только вы не «загружаете» внешнее / удаленное изображение / файл.) Извините за этот ответ ..:)

1 голос
/ 24 апреля 2019

Вы можете сериализовать данные, а при необходимости десериализовать это.

update_user_meta($user->ID, 'gallery', serialize($_POST['gallery_images']));

сериализации: https://www.php.net/manual/fr/function.serialize.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...